The Wine development release 1.2-rc4 is now available.

What's new in this release (see below for details):
  - Many translation updates.
  - A lot of bug fixes.

The source is available from the following locations:

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

Binary packages for various distributions will be available from:

  http://www.winehq.org/site/download

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

You can also get the current source directly from the git
repository. Check http://www.winehq.org/site/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-rc4:

   4813  Haegemonia crashes on startup
   7893  cubloc locks up when you choose 'run'
   9136  Hitman 4: PostProcessing\Blur artefacts
   9140  Can not install AutoCad 2006
   9320  No applications inside virtual desktop get properly focused and activated
   9579  Window doesnt redraw after restoring
  10142  Switching workspaces/desktops can make some application windows disappear
  10558  Srim 2006 does not work
  11028  Cannot type into IMVU chat window after it first loses focus.
  11548  Coastal Explorer launches but has no toolbar or menus
  11661  Confusing error message when executing application on noexec fs
  11933  Alien Shooter 2 demo crashes on exit when playing at 1024x768
  12752  Zak McKracken - Between Time and Space aborts after game loading screen
  13007  ADIsimPLL: crashes after the "tip-of-the-day" dialog is closed
  13064  AfterEffects 7 tryout crashes on startup, needs GDI32.dll.CreateFontIndirectExW
  13402  rendering glitches in fr-030 candytron party
  13423  Firefox unusable when computer loaded down [dogfood]
  13438  Eudora 7.1.0.9: printing garbled after first half page
  14097  Zak McKracken - Between Time and Space mp3 problem
  14557  Sins of a solar empire straddles both monitors in xinerama mode
  15010  Peggle Deluxe and Peggle Extreme: black screen with 3D hardware acceleration
  15012  Thunder:crashes when click the resume(开始) button to continue the task.Also EXCEPTION_ACCESS_VIOLATION error.
  15099  Bionic Commando Rearmed wont run
  15284  Direct3D output is at half the frame rate of OpenGL output in WinUAE
  15452  Freewire aborts due to incorrect handling of COLORRES nIndex in winex11's GetDeviceCaps()
  15819  BeyondCompare hangs when restoring window or changing desktops
  15884  Tooltips displayed in mIRC when windows are minimized
  15941  Mount & Blade crashes with 'Unable to create render target texture'
  16380  Program manager window appears unexpectedly
  17275  Aquamark 3 crashes at end after failing to access VIDEOPRT.SYS
  17311  REDCINE: Application crash at startup
  17697  SNetTerm won't start
  17778  WinPolis drawing errors
  17992  fixme:d3d error, screen is broken, and then flips forever
  18596  AOL Instant Messenger 6.9 exits silently
  18615  Motocross Madness 2: upside down display as mouse moves over button
  18934  Free PDF to Word Doc converter's installer reports wrong ClassNN (appinstall)
  19128  UseGLSL=disabled stops FIFA WM 2006 with vertex shader error
  19316  winecfg.exe: cannot access the 'Audio' Tab
  19507  Harry Potter a. t. Half-Blood Prince Demo Installer in infinite loop
  19573  Adobe CS4 installer's Quit button doesn't do anything
  19624  winspool.drv needs to properly handle local printer server config data queries (XPSEPSC update/installer)
  19628  Muziic reports an error and exits
  20499  Bottom part is not visible in windows with custom-drawn title bar
  20666  Garmin WebUpdater install screen (nearly) empty
  21156  Add torrents in webUI with µTorrent >= 2.0 doesn't work
  21181  Wine does not compile on Cygwin
  21402  Microsoft GIF Animator fails to install correctly
  21526  several programs fail to compile under cygwin
  21534  TF2 stops when pushing on the key : "Display multiplayer scores" (tab key by default)
  21609  Multiple games loose most sound effects or crash
  21844  Homeworld 2: no sound
  21865  Homeworld 2 crashes
  21982  DPC Latency Checker barfs loading its driver
  22148  Mount & Blade crashes after intro video
  22289  Cannot find -lmsvcrt on a msvcr90 test under Cygwin
  22595  Zwinky install fails
  22686  VectorWorks 11.5 shows icons in toolbars on mouseover only
  22725  Entering two columns of numerical data in Excel 2003 leads to crash
  22811  Graphical rendering problem in cad program
  22824  Guitar Pro 5 - window disappears after minimizing
  22941  New behaviour of wineconsole (Alt+F4 emulation by [x] button pressing) causes problems with FAR manager
  22952  Babaschess, invisible text on black background input text box
  22979  winhelp: Gets stuck in infinite loop loading some help files
  23054  WinHEX: Cannot open website link in help
  23092  FL Studio built-in file browser fails with long pathnames and/or long filenames
  23116  No sound inDawn Of War - Soulstorm Demo
  23130  MSVCR100.dll fails to initialize, needs kernel32.RtlPcToFileHeader
  23143  SlingPlayer 2 unable to remember password
  23200  cygwin build broken in dlls/ws2_32/tests/sock.c
  23202  Cyberboard Player has missing disabled icons on menubar
  23206  Print output from builtin notepad lacks spaces
  23231  Cannot close window in the background by pressing the Close button of that window

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

Changes since 1.2-rc3:

Alexander Scott-Johns (2):
      msvcrt/tests: Rename a variable.
      include/msvcrt: Update a bit.

Alexandre Julliard (21):
      atl: Fix parsing of extended dialog templates.
      atl: Implemented AtlCreateTargetDC.
      krnl386: Defined the SMapLS/UnMapLS_IP_EBP functions explicitly to make life easier for winapi_check.
      shell32: Create a 32-bpp image list to get alpha blended icons.
      appwiz.cpl: Create a 32-bpp image list to get alpha blended icons.
      winecfg: Fix pointer truncation in audio setup.
      winegcc: Add explicit support for the Cygwin platform.
      include: Define the SPLREG winspool string constants.
      ntdll: Make the DOS area accessible even when not using it to hide bugs in broken apps.
      winedevice: Fix up protections before writing to the NT header.
      winegcc: Load the Unicode argv dynamically from the generated stub.
      ws2_32/tests: Reorder includes so that winsock.h is included before system headers.
      wrc: Avoid use of toupper/isupper on signed chars.
      user32: Don't try to alpha blend icons when drawing to a monochrome device.
      ntdll: Print a warning when failing to set execute permissions on a section.
      user32/tests: Expand the DCX_NORESETATTR test to make sure we check the correct DC.
      user32/tests: Ignore repeat key flag that causes occasional failures on Windows.
      user32/tests: Fix some class tests that behave differently on WoW64.
      shell32: Flesh out the stub DDE query for Progman groups a little.
      gdi32: Fix the sign of the vertical text position in ExtTextOutW.
      user32: Destroy the unused buttons in a message box instead of only hiding them.

Andrew Nguyen (16):
      msxml3: Add proper skips when msxml3 DOM interfaces are unavailable.
      msxml3: Ignore the encoding attribute when loading a new XML document in IXMLDOMDocument::loadXML.
      msxml3/tests: Correct the sense of a few test failure messages.
      winex11.drv: Report a non-zero COLORRES capability value.
      setupapi: Avoid useless initializations in SetupIterateCabinetA/W.
      setupapi: Validate the cabinet filename parameter in SetupIterateCabinetA.
      setupapi: Validate the cabinet filename parameter in SetupIterateCabinetW.
      setupapi/tests: Add tests to show that SetupIterateCabinet handles callback exceptions on newer Windows.
      setupapi/tests: Add simple enumeration tests for SetupIterateCabinetA.
      setupapi/tests: Add simple enumeration tests for SetupIterateCabinetW.
      setupapi: Exhaustively test the invalid parameter handling of SetupDecompressOrCopyFileA.
      setupapi: Only extract the first MSZIP cabinet file in SetupDecompressOrExtractFile.
      setupapi: Add a few traces for SetupDecompressOrCopyFileW.
      ntdll/tests: Add tests to examine output file part pointer behavior for RtlGetFullPathName_U.
      kernel32/tests: Add tests to examine output file part pointer behavior for GetFullPathNameA.
      kernel32/tests: Add tests to examine output file part pointer behavior for GetFullPathNameW.

André Hentschel (3):
      propsys: Mention that the functions are stubs.
      winegcc: Add detection for --param options.
      winemaker: Avoid setting variable to an uninitialized value.

Aric Stewart (3):
      usp10/tests: Having numbers in the ScriptStringXtoCP tests causes unpredictable behavior.
      usp10/tests: Remove a test for a bug corrected in later versions of usp10.
      usp10/tests: Windows 95 does not set invalid glyphs to 0 but instead 0x80.

Damjan Jovanovic (3):
      kernel32: Revert 3f1404bf29676d79dd76ffd31e2630bb9f2b0b60 and add better CopyFile tests.
      kernel32: Add a CopyFile test.
      kernel32: Stop CopyFile from overwriting a file with itself.

Detlef Riekenberg (7):
      msvcr7x: Sync exports to msvcrt.
      msvcr100: Sync exports to msvcr90.
      msvcr80: Sync exports to msvcr90.
      winspool: Support the spooler in GetPrinterData.
      winspool/tests: Test GetPrinterData/Ex for the print spooler.
      winspool: Return ERROR_MORE_DATA, when the app probe for the needed buffer size.
      winspool/tests: Handle the Windows bug in GetPrinterDataEx.

Dylan Smith (1):
      wordpad: Fix failing GetDlgItem that forced screen repaint.

Eric Pouech (4):
      winhelp: Fix trailing space in window name for JumpID macro.
      winhelp: Avoid accessing a window in global window list after it has been freed.
      winhelp: When following a link, don't do it into a popup, but its parent.
      winmm: Only compute dwFileSize for MMIO objects with a DOS ioproc.

Hans Leidekker (3):
      propsys: Return success from PSRegisterPropertySchema.
      msi: Don't trace the contents of an output buffer.
      msi: Add tests for MsiLocateComponent and make them pass.

Henri Verbeet (3):
      winealsa.drv: Add some missing newlines.
      ntdll: The FPU control word for newly created threads is 0x27f.
      ddraw: Register / unregister the ddraw window class from DllMain().

Huw Davies (1):
      wineps.drv: Don't return an error for empty glyphs.

Igor Paliychuk (3):
      localui: Add Ukrainian translations.
      iccvid: Add Ukrainian translations.
      localspl: Add Ukrainian translations.

Jacek Caban (5):
      shobjidl.idl: Added INewWindowManager declaration.
      docobj.idl: Added OLECMDID_UPDATETRAVELENTRY_DATARECOVERY declaration.
      mshtml: Don't crash in on_start_uri_open on nscontainer without associated document.
      shdocvw: Silence QueryService traces in non-interactive runs.
      mshtml: Added IHTMLWindow2::open test.

Jose Rostagno (2):
      localui: Add Spanish translation.
      notepad: Update Spanish translation.

Juan Lang (5):
      crypt32: Add support for szCERT_STORE_PROV_PKCS7 to CertOpenStore.
      crypt32/tests: Test opening serialized stores.
      crypt32: Terminate reading a serialized store upon reading an empty property.
      crypt32: Increment current pointer on successful reads from memory.
      crypt32: Add support for CERT_STORE_PROV_SERIALIZED to CertOpenStore.

Jörg Höhle (1):
      mmsystem: Log MCI command name again.

Luca Bennati (3):
      cryptui: Add Italian translation.
      crypt32: Add Italian translation.
      oleacc: Add Italian translation.

Marcus Meissner (1):
      atl: Also handle struct sizes for 64bit.

Michael Stefaniuc (7):
      mapi32: The Portuguese translation is in UTF-8.
      wordpad: Remove untranslated resources from the Hungarian translation.
      wordpad: "Fix" two errors in the Chinese translations.
      notepad: Fix an error in the Czech translation.
      notepad: Fix an error in the Portuguese (Brazil) translation.
      notepad: Fix an error in the Bulgarian translation.
      jscript: Add the Romanian translation.

Nikolay Sivov (5):
      gdi32: Add CreateFontIndirectEx implementation.
      kernel32: Export RtlPcToFileHeader on x86-64 platform.
      msxml3: Avoid SysStringLen() testing for an empty string in ::createNode().
      msxml3: Use defined macros to access internal XPath structures.
      winhlp32: Added missed Russian resource.

Paul Chitescu (2):
      winex11.drv: Post a WM_SYSCOMMAND SC_CLOSE when the window manager asks to close a window.
      user32: Use a safer method of freeing user handles to prevent zeroing out a newly allocated handle.

Paul Vriens (1):
      user32: Add another flag to the TRACE().

Piotr Caban (1):
      atl: Pass correct arguments to fuctions executed by AtlInternalQueryInterface.

Ricardo Filipe (6):
      jscript: Update Portuguese Portugal translation.
      shell32: Update Portuguese Portugal translation.
      wineboot: Update Portuguese Portugal translation.
      winecfg: Update Portuguese Portugal translation.
      wordpad: Update Portuguese Portugal translation.
      mapi32: Add Portuguese Portugal translation.

Rico Schüller (1):
      wined3d: Improve fglrx glsl spam filter.

Roderick Colenbrander (1):
      wined3d: Add NPOT quirk for GeforceFX 5200.

Sven Baars (2):
      wldap32: Fix Dutch translation.
      oleacc: Fix Dutch translation.

Vitaly Lipatov (1):
      Update Russian translations.

Łukasz Wojniłowicz (1):
      winhlp32: Update the Polish translation.

--
Alexandre Julliard
julliard@winehq.org
