The Wine maintenance release 1.2.3 is now available.

What's new in this release (see below for details):
  - Translation updates.
  - Various bug fixes.

The source is available from the following locations:

  http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.2.3.tar.bz2
  http://prdownloads.sourceforge.net/wine/wine-1.2.3.tar.bz2

Binary packages for various distributions will be available from:

  http://www.winehq.org/download

You will find documentation on http://www.winehq.org/documentation

You can also get the current source directly from the git
repository. Check http://www.winehq.org/git for details.

Wine is available thanks to the work of many people. See the file
AUTHORS in the distribution for the complete list.

----------------------------------------------------------------

Bugs fixed in 1.2.3:

   4432  Blobby Volley - corrupted graphics
   8640  Oziexplorer Save Image Problem
  10140  Most grayscale JPEGs cause abnormal rendering artifacts in CDisplay
  12808  indexed bitmaps support is broken
  14882  UpdateResource fails to delete a resource
  15025  HxD crashes on opening disk
  16703  Wineconsole: Fallback from curses to window based backend
  16704  wineconsole: Allow specifying the console backend to use when wineconsole is launched implicitly
  18075  IE8 crashes due to missing urlmon.dll.423 API
  19314  IE8 for Server 2003 refuses to install (Service Pack 2 for Windows Server 2003 install required)
  20552  Memory leak in alloc_thread_tls?
  23872  Steam: Windows will automatically reopen after being closed
  24294  corrupted icons in SolidWorks sketches
  24680  loader: segfault after  loading krnl386.exe, while LoadLibraryEx for any buildin dll
  24800  wine try to use float texture even if driver don't support them
  25107  When panning on SeaClear, bits of the chart get 'left behind'
  25155  Creative Writer 2 only installs in Win9x modes on WoW64
  25206  Anarchy Online v18.4, Ingame browser crashes (Awesomium.dll)
  25273  msvcrt/misc.ok I10_OUTPUT long double crash with winetest.exe, not make test
  25283  Unimplemented function urlmon.dll.410
  25301  Occasional sock_check_pollhup() error on Solaris
  25354  King's Quest Collection Series (1997): setup.exe crashes
  25401  WSAStringToAddress doesn't update lpAddressLength on success
  25491  BearShare: Fails to install
  25510  Wine-generated desktop files are not compliant with XDG standard
  25583  Starcraft II fails to start
  25616  Comet Busters: Error displays indicating Wine cannot continue
  25678  'Wine reg add' with longer hive name error
  25680  Stale file associations are not properly removed
  25685  When printing diagrams & charts in Family Historian 4.1.3 characters are upside down
  25691  ImageList_Duplicate doesn't correctly duplicate full length of has_alpha byte array
  25910  Notepad tries to open a file using wrong sharing mode
  26014  Printing produces garbled output, characters rotated and sliced.
  26281  regedit: Doesn't export decent newline in Unicode (NT5) Format.
  26367  Winecfg crashes when selecting Graphics tab
  26393  Temple of Elemental Evil refuses to run
  26505  file associations built by winemenubuilder lack wineprefix

----------------------------------------------------------------

Changes since 1.2.2:

Akihiro Sagawa (1):
      regedit: Export a decent newline in Unicode format.

Albert Pool (1):
      winecfg: Update Dutch translation.

Alexander Kochetkov (3):
      wineps.drv: Disable world transform for fonts in GM_COMPATIBLE mode.
      wineps.drv: All map modes should have inverted y-transforms.
      gdi32: Fix scaling factors for EMR_EXTTEXTOUTW.

Alexander Law (1):
      programs/notepad: Correct sharing mode for opening file in notepad.

Alexandre Julliard (29):
      winex11: Only map the window the first time that WS_VISIBLE is set through WM_SETREDRAW.
      kernel32: Update the environment variables that vary across 32-bit/64-bit/Wow64.
      wine.inf: Don't set the ProgramFiles environment variables through the registry.
      ntdll: Ensure alignment of static TLS data and free it at thread exit.
      ntdll: Don't worry about the DOS area on non-x86.
      wineboot: Relaunch the 64-bit version of wineboot on Wow64.
      winecfg: Relaunch the 64-bit version of winecfg on Wow64.
      winecfg: Set Wow64 registry keys as well as the 64-bit ones for version information.
      krnl386: Fetch version from the PEB to avoid potentially using GetVersionEx before it's initialized.
      loader: Make sure the new stack is 16-byte aligned in the preloader.
      wpp: Line and column numbers must start at one.
      advapi32: Fix array size construct that gcc doesn't like.
      libwine: Fix handling of null character in vsnprintfW for %c format.
      libwine: Fall back to normal exec if the preloader doesn't exist.
      comctl32/imagelist: Don't change destination size in ImageList_Duplicate without corresponding allocation.
      wmc: Add support for creating resource and plain binary files.
      makefiles: Generate .res files directly from message files.
      configure: Print a notice if zlib isn't found.
      server: Create anonymous file mappings in the config directory if the server directory is mounted noexec.
      winebuild: Don't remove stdcall decorations on non-x86.
      ntdll: Don't print an error when architecture is set to win64 and the app is 64-bit.
      wine.inf: Put some fake dlls in the right place for WoW64.
      server: Work around Mac OS not being able to set global breakpoint flags.
      winex11: Don't unmap off-screen windows on PropertyNotify events.
      version: Allocate the full virtual size of the section when loading PE resources.
      shlwapi: Don't use wide strings in button labels.
      msrle32: Fix invalid character in resource wide string.
      Update copyright info for 2011.
      Updated the authors list.

Alistair Leslie-Hughes (1):
      oleaut32: Implement ITypeInfo_GetNames Stub/Proxy.

Andrew Eikum (1):
      include: Add defines for KSDATAFORMAT_SUBTYPE_ALAW and _MULAW.

Andrew Nguyen (6):
      wineboot: Set the FeatureSet value in the volatile CPU registry keys.
      wineboot: Set a placeholder ProcessorNameString value in the volatile CPU registry keys.
      mmsystem.dll16: Correctly map the MCI_SYSINFO_PARMS structure when MCI_SYSINFO_QUANTITY is set.
      reg: Accept full names of the standard registry hives.
      include: Add an extern C++ block around the property key equality operators.
      server: Filter the WOW64 registry access flags before performing the access check.

André Hentschel (11):
      ntdll: Respect multiple CPUs when faking values.
      msvcrt: Forward _setjmp on x86_64.
      mountmgr.sys: Handle IOCTL_DISK_GET_DRIVE_GEOMETRY_EX.
      winemaker: Fix library argument.
      shlwapi: Implement wow64 reporting.
      sane.ds: Convert Swedish translation to UTF-8.
      sane.ds: Convert Norwegian translation to UTF-8.
      gphoto2.ds: Fix German translation.
      sane.ds: Fix translation of microsecond.
      include: Add winhttp secure protocol flags.
      include: Add more minor shutdown reasons.

Aric Stewart (2):
      ws2_32: async_send with no buffers does not need to do any work.
      user32: Remove SetWindowText export.

Austin English (3):
      ntdll: Bump win2k3 version information to sp2.
      urlmon: Add stubs for ordinals 410 and 423.
      msiexec: Add /unreg as an alias for /z.

Charles Davis (2):
      ntdll: Fix IOCTL_CDROM_RAW_READ on Mac OS.
      ntdll: Implement CDROM_GetInterfaceInfo() on Mac OS.

Cheer Xiao (1):
      view: Update simplified Chinese translation.

Damian Dixon (1):
      advapi32: Added check for NULL pointer being passed to QueryServiceStatus for either parameter.

Damjan Jovanovic (1):
      winemenubuilder: Do not skip entries when cleaning up file open associations.

Dan Kegel (1):
      winemenubuilder: File associations should set wineprefix.

David Bartley (1):
      iphlpapi: Add CancelIPChangeNotify stub.

David Hedberg (1):
      gdi32: Stay within the clipping area when painting text background.

Dmitry Timoshkov (5):
      winex11.drv: Make sure that default clipping region exists before calling ExcludeUpdateRgn().
      winex11.drv: Associate the real DC transformation with cached font data.
      gdi32: Use graphics mode specified at the EMF creation time when playing EMR_EXTTEXTOUT record.
      gdi32: EnumFontFamilies should also match against fully qualified face name.
      winecfg: Protect from closing the root key.

Eric Pouech (3):
      winedbg: Don't print extra \n in print_basic.
      winegcc: Correctly manage the -V option (gcc expects to be among the first ones, with -b).
      winegcc: Check that option argument is within command line parameters.

Francois Gouget (2):
      server: Make sock_check_pollhup() more reliable on Solaris.
      xcopy: Remove a space before a '\n' in the Korean translation.

Gerald Pfeifer (3):
      wpp: Fix the output type for the "unsigned OP signed" cases in BIN_OP_INT and friends.
      wpp: Add explicit casts when mixing signed and unsigned integers.
      wpp: Add explicit casts when mixing unsigned and signed integers.

Hans Leidekker (6):
      ntdll: Don't call NtClose directly in delete_view.
      advapi32: Return the computer name as referenced domain name in LookupAccountName.
      wineboot: Set the USERDOMAIN environment variable.
      uninstaller: Run msiexec if the WindowsInstaller value is set.
      uninstaller: Fix a leak.
      appwiz.cpl: Run msiexec if the WindowsInstaller value is set.

Henri Verbeet (3):
      kernel32: Fix some memory leaks in set_wow64_environment().
      widl: Support forward type declarations.
      wined3d: Don't use floating point textures without ARB_texture_float.

Huw Davies (10):
      fonts: Fix the metrics of the extended integral and brace glyphs.
      fonts: Increase the version number so that we don't use the Mac's version of symbol.ttf, which doesn't contain a Microsoft Symbol charmap.
      gdi32: Clear the accel flags.
      wineps.drv: Explicitly report that we do not support blending.
      widl: Initialise [out] only parameters if they are user types or interface pointers.
      widl: Don't dereference if the referenced type is a user type.
      widl: Initialise [out] only conformant arrays.
      oleaut32: Mask off the lsb from the vtbl offset. This is set when the user specifies an offset in ICreateTypeInfo.
      oleaut32: Fix the typelib marshaler when the vtbl has holes.
      include: Add some more internet options.

Hwang YunSong (41):
      sane.ds: Update Korean resource.
      browseui: Update Korean resource.
      clock: Update Korean resource.
      cmdlgtst: Update Korean resource.
      comctl32: Update Korean resource.
      comdlg32: Update Korean resource.
      credui: Update Korean resource.
      crypt32: Update Korean resource.
      cryptdlg: Update Korean resource.
      cryptui: Update Korean resource.
      gphoto2.ds: Update Korean resource.
      hhctl.ocx: Update Korean resource.
      iccvid: Update Korean resource.
      localspl: Update Korean resource.
      localui: Update Korean resource.
      mpr: Update Korean resource.
      msacm32: Update Korean resource.
      msrle32: Update Korean resource.
      msi: Update Korean resource.
      msvidc32: Update Korean resource.
      msvfw32: Update Korean resource.
      net: Update Korean resource.
      notepad: Update Korean resource.
      oleacc: Update Korean resource.
      oleaut32: Update Korean resource.
      oledlg: Update Korean resource.
      oleview: Update Korean resource.
      progman: Update Korean resource.
      reg: Update Korean resource.
      regedit: Update Korean resource.
      serialui: Update Korean resource.
      setupapi: Update Korean resource.
      view: Update Korean resource.
      wineboot: Update Korean resource.
      wineconsole: Update Korean resource.
      winedbg: Update Korean resource.
      winefile: Update Korean resource.
      winemine: Update Korean resource.
      wineps.drv: Update Korean resource.
      wordpad: Update Korean resource.
      winspool.drv: Update Korean resource.

Igor Egorov (1):
      kernel32: Add stderr redirection for native Unix programs started from Windows program.

Jacek Caban (1):
      aclocal.m4: Recognize mingw-w64 as 32-bit cross compiler.

Janne Hakonen (1):
      iphlpapi: Changed return value of NotifyAddrChange() stub and added test cases.

Jerome Leclanche (2):
      winemenubuilder: Add a trailing semicolon to MimeType in desktop files.
      winemenubuilder: Make sure extension-based mimetypes are always lowercase.

Joshua Beck (1):
      winex11: Improved error handling in pglXMakeCurrent() call.

Juan Lang (3):
      ws2_32: Set length on successful return from WSAStringToAddress.
      crypt32: Accept any matching CN when checking a certificate's name.
      include: Add some missing definitions.

Jörg Höhle (1):
      msvcrt: sizeof(long double) is 12 with MS, but not necessarily so on UNIX.

Ken Thomases (2):
      iphlpapi: Enable non-privileged ICMP (ping) on Mac OS X.
      mountmgr: Balance volume references in add_volume().

Kirill Smelkov (1):
      kernel32: Support deleting resources in UpdateResource.

Lauri Kenttä (1):
      readme: Add Finnish translation.

Maarten Lankhorst (3):
      ole32: Handle alertable wait in CoWaitForMultipleHandles.
      mshtml: Make sure system xpcom dll gets loaded.
      kernel32: CreateProcessA should not call CreateProcessW directly.

Marcus Meissner (2):
      wined3d: Detect nouveau as NVIDIA.
      kernel32: Fixed size to GetEnvironmentVariableW.

Martin Storsjo (2):
      wineconsole: Fallback to window based console if the curses library isn't found.
      wineconsole: Don't overwrite the backend selection when parsing --use-event.

Michael Stefaniuc (2):
      shlwapi: The Italian translation uses UTF-8 encoding.
      sane.ds: The Da, En, Fi, Fr, Nl, Pt resources are using UTF-8.

Nicholas Niro (1):
      winex11.drv: Add proper initialization for border_pixel.

Nikolay Sivov (3):
      oleview: Fix a crash on null helpstring and name on library level.
      oleview: Fix some crashes on unnamed variables.
      oleview: Fix some crashes on unnamed methods/arguments.

Paul Vriens (1):
      notepad: Add WS_EX_LAYOUTRTL to some RTL resources.

Peter Schellenbach (1):
      oleaut32: Fixed short time & medium time named formats.

Peter Schlaile (1):
      winedbg: Adds an rwatch command to winedbg.

Piotr Caban (2):
      shell32: Improved equal ITEMIDLISTs handling in ILIsParent.
      sane.ds: Convert Polish translation to UTF-8.

Rex Tsai (1):
      wineboot: Update Traditional Chinese translation.

Tristan Schmelcher (2):
      ddeml: Fix incorrect HSZ argument sizes.
      ddeml: More calling convention fixes.

Vincent Povirk (2):
      oleaut32: Deserialize VT_BOOL as 2 bytes, not 4.
      wininet: Use LIST_FOR_EACH_SAFE in a loop where we can delete an entry.

Wolfram Sang (2):
      winex11.drv: In GetDIBits() with DIB sections, always use dibpitch from the target.
      comdlg32: Filedlg should not add extension if it contains a glob.

Łukasz Wojniłowicz (3):
      avifile: Update Polish translation.
      taskmgr: Update Polish translation.
      winecfg: Update Polish translation.

--
Alexandre Julliard
julliard@winehq.org
