The Wine development release 1.2-rc5 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-rc5.tar.bz2
  http://prdownloads.sourceforge.net/wine/wine-1.2-rc5.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-rc5:

   3756  ATMEL AVRStudio4 crash
   8665  winecfg: please do not remove not-present directories
  11188  Most attempts to save in Warcraft III 1.21a Reign of Chaos crash the game
  12973  QIP: Does not work
  13028  winetest's Stop button does not work
  13891  start.exe http://someurl/ does not work (affects any app that invokes external browser, e.g. Google Sketchup)
  14319  When running Call of Duty 2, the text in the main game menu is blocky and unreadable.
  14554  FLSynthmaker menus show up on the wrong screen in Xinerama mode
  15567  Navision 4.0 sp2 stoped to work when wine upgraded to version 1.1.5
  15728  star wars force commander graphics are blocky
  16001  Quicken crashes when attempting to load files.
  16342  Songbird can't play music files
  16368  installer need access to My Documents
  16670  Angry Planet Temper (app does not start) starting problems give some dll differences
  18314  The Witcher: Launcher window invisible (taskbar enty appears)
  18450  EVE Online crashes
  18710  Installer omits question because of langid
  18808  Microsoft FlightSimulator 9 (2004): surface errors and missing textures
  19154  Recent Blizzard Downloader crashing during download
  19394  Quicken 2007 Basic Crashes on file load
  19419  EVE Online crashes when loading Caldari station environment
  20084  winetricks -q controlpad fails
  20145  DrawIconEx() doesn't draw 1 bpp monochrome Icons correctly
  20155  FlatOut 2 - some UI elements shown as transparent white instead of correct color
  20698  FlatOut 2 - Screen is rendered as black (HUD and menus are working)
  20816  Civilization II crashes on startup when sound is enabled in Wine
  20821  Fusion Sega emulator renders content misplaced
  20848  Pumuckl: regained sound but crashes at start (16bit mm)
  21125  Asteroids game crashes when sound is enabled
  21498  Metatrader 4: window gets lost after minimize
  21509  Windows 7 SDK aborts on startup because of unimplemented gdiplus.GdipGetImageThumbnail
  21962  Call of Duty 4 crashes
  22003  Napoleon: Total War demo has no sound
  22311  PlayOnline viewer corrupts terminal console
  22684  Jedi Knight: Dark Forces II screen flips when picking up an item
  22685  unimplemented function msvcr90.dll._wmakepath_s (affects Spiceworks)
  22897  Mouse cursor is damaged when DCOM98 is used
  22990  Lotus Organizer and Word Pro will not print
  23025  D-Pad is not functional in epsxe
  23112  flash player install crashes
  23169  GeForce FX: Extremely low performance with NPOT textures
  23171  Adobe CS4 installer causes a page fault
  23201  Motocross Madness 2 crashes at start (d3d)
  23238  Repton 3: crashes when viewing map (unhandled page fault on write)
  23241  Icons are blacked out/blank in some Altium Designer 2009 GUI elements
  23242  Windows Platform SDK 2003 installer crashes
  23263  Moon Tycoon gets stuck in loop saying No Direct3D / Switching to software rasterizer.
  23274  Jedi Knight: Dark Forces II screen blue-tearing when picking up an item
  23306  AOE III: Polish patch v1.13 fails to apply
  23314  cmd treats all command lines with '/?' as builtin commands

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

Changes since 1.2-rc4:

Akihiro Sagawa (9):
      hhctrl.ocx: Add Japanese translation.
      comdlg32: Update Japanese translation.
      gphoto2.ds: Add Japanese translation.
      mapi32: Add Japanese translation.
      localspl: Update Japanese translation.
      shdoclc: Add Japanese translation.
      winspool.drv: Add Japanese translation.
      jscript: Add Japanese translation.
      shdoclc: Fix Japanese translation.

Alessandro Pignotti (1):
      winedevice: Use 64-bit wide delta when relocating.

Alexandre Julliard (20):
      hlink/tests: Comment out a test for an uninitialized return value.
      ntdll: Fix the initial FPU control word on 64-bit.
      shell32/tests: Use the windows directory for the SHParseDisplayName test to avoid ambiguous namings.
      user32: Fallback to English in MessageBoxIndirect if the specified language is not supported.
      advapi32: Make rpcrt4 a delayed import to work around circular dependencies with native.
      ntdll: Fix the initial FPU control word on 32-bit too.
      jscript/tests: Fix a test that fails because of the reduced FPU precision.
      psapi/tests: Fix the working set tests for Wow64.
      ntdll/tests: Fix some exception tests for Wow64.
      kernel32: Add the TlsAlloc/FreeInternal entry points.
      user32/tests: Add more systematic tests to validate the DDE client-side A<->W conversions.
      user32/tests: Fix some DDE test failures on Win9x.
      kernel32: Avoid returning the same name when GetTempFileName is called twice in a short interval.
      ntdll: Add a WINEARCH environment variable that allows forcing a specific 32- or 64-bit architecture.
      user32/tests: Restructure the DDE end-to-end tests to make it easier to add new cases.
      user32/tests: Add some Unicode test cases for A/W mappings.
      user32/tests: Fix more DDE test failures on Win9x.
      user32: Add a heuristic for Unicode mappings of DDE data on the server side.
      Revert "winebrowser: Convert URL obtained through DdeGetData to Unicode."
      shell32: Fix DDE command tracing now that we are receiving Unicode.

Andrew Nguyen (6):
      ddraw: Validate structure pointers and sizes in IDirect3D3::FindDevice.
      ddraw: Allow the ddraw RGB device to be enumerated in IDirect3D3::FindDevice.
      ddraw/tests: Add an observation regarding device color model criteria for IDirect3D3::FindDevice.
      msvcrt: Implement _makepath_s.
      msvcrt: Implement _wmakepath_s.
      gdiplus: Add a few additional traces to gdiplus image functions.

Andrey Turkin (1):
      ntdll: Fix race in NtRead/WriteFile.

André Hentschel (13):
      winedump: Update README.
      cmd: Update German translation.
      user32: Update comment.
      krnl386.exe16: Update a comment.
      winemaker: Ignore the Global section.
      winemaker: Ignore files not found by the search function.
      winemaker: Warn on include path starting with drive letter.
      winemaker: Don't use deprecated -mcpu option.
      uxtheme: Quiet a noisy fixme.
      winetest: Implement aborting.
      kernel32: Update a warning.
      wineps.drv: Update comments.
      winetest: Also abort while sending.

Aric Stewart (2):
      winex11.drv: Make UploadGlyph fallback to notdef and space so as to not fail.
      shlwapi: URL_FILE_USE_PATHURL flag only unescapes file urls in UrlCanonicalize.

Aurimas Fišeras (1):
      cmd: Update Lithuanian translation.

Dmitry Timoshkov (1):
      comctl32: Add a bunch of imagelist storage tests, make them pass under Wine.

Dylan Smith (5):
      winemine: Native RegisterClassEx requires cbSize to be set.
      shell32: Native RegisterClassEx requires cbSize to be set.
      shdocvw: Native RegisterClassEx requires cbSize to be set.
      wordpad: Remove untranslated resources from the Chinese translation.
      wordpad: Use correct resource ID for tab stops dialog.

Eric Pouech (2):
      mmsystem.drv: Always map parameters for all callback kinds.
      mmsystem.drv: Always create a thunk for MMIO objects.

Florian Köberle (1):
      comctl32/tests: Test calculating the rect of a child item while handling TVN_ITEMEXPANDED.

Francois Gouget (27):
      crypt32/tests: Add a trailing '\n' to ok() calls.
      d3d10/tests: Add a trailing '\n' to ok() calls.
      msvcrt/tests: Add a trailing '\n' to an ok() call.
      opengl32/tests: Add a trailing '\n' to a skip() call.
      usp10/tests: Add a trailing '\n' to an ok() call.
      msvcrt/tests: Make test_dup2() static.
      shlwapi/tests: Make the XXX_Construct() functions static.
      ntdll: Fix a typo in a parameter name.
      ws2_32/tests: Fix a typo in a variable name.
      msvcr90/tests: Make test_invalid_parameter_handler() static.
      winemenubuilder: Add a trailing '\n' to a FIXME() call.
      msvcr100: The msvcr100 debug channel is unused so remove it.
      mmdevapi/tests: Add a trailing '\n' to an ok() call.
      wined3d: Remove spaces after '\n's.
      shell32/tests: Make I{DataObject,ShellBrowser}Impl_Construct() static.
      d3dxof: Make fdi_{alloc,free}() static.
      d3dx9_36: Make assemble_shader() static.
      gdiplus: Make measure_ranges_callback() static.
      wordpad: Make print_preview() and preview_page_hittest() static.
      kernel32: GetProcessDword() is unused so remove it.
      usbd.sys: Fix the test for type control endpoints.
      winecfg: The winecfg debug channel is unused so remove it.
      programs: Remove spaces before '\n's in the resources.
      winhlp32: Remove a space before an ellipsis in the Dutch translation.
      wineboot: Remove a space before an ellipsis in the Norwegian (Bokmal) translation.
      programs: Add a space before ellipses in the Slovenian translation.
      Assorted typo and spelling fixes.

Frédéric Delanoy (2):
      cmd: Initial PATH value taken from registry, not wine.conf.
      cmd: Update French translation.

Gustavo Henrique Milaré (21):
      winecfg: Update Portuguese translation.
      wordpad: Update Portuguese translation.
      browseui: Update Portuguese (Brazilian) translation.
      appwiz.cpl: Update Portuguese translation.
      notepad: Fix Portuguese translation.
      credui: Update Portuguese (Brazilian) translation.
      avifil32: Update Portuguese (Brazilian) translation.
      wordpad: Fix Portuguese translation.
      notepad: Update Portuguese (Brazilian) translation.
      winefile: Update Portuguese translation.
      progman: Update Portuguese translation.
      gphoto2.gs: Update Portuguese (Brazilian) translation.
      jscript: Update Portuguese (Brazilian) translation.
      mapi32: Update Portuguese (Brazilian) translation.
      msacm32: Update Portuguese (Brazilian) translation.
      mshtml: Updated Portuguese (Brazilian) translation.
      oledlg: Update Portuguese (Brazilian) translation.
      msi: Update Portuguese (Brazilian) translation.
      oleacc: Update Portuguese (Brazilian) translation.
      sane.ds: Update Portuguese (Brazilian) translation.
      serialui: Fix Portuguese (Brazilian) translation.

Hans Leidekker (1):
      msi: Avoid a crash when the cabinet file must be downloaded.

Henri Verbeet (2):
      wined3d: read_from_framebuffer_texture() isn't suitable for readback of onscreen surfaces.
      ddraw: Avoid an integer overflow in IDirectDrawSurfaceImpl_BltFast().

Hwang YunSong (9):
      comctl32: Update Korean resource.
      gphoto2.ds: Update Korean resource.
      oledlg: Update Korean resource.
      setupapi: Update Korean resource.
      shdoclc: Update Korean resource.
      winecfg: Update Korean resource.
      wininet: Update Korean resource.
      avifil32: Update Korean resource.
      mapi32: New Korean resource.

Ilya Basin (1):
      shell32/tests: SHELL_ArgifyW(%2|%*|%~3, ...) tests.

Jacek Caban (4):
      mshtml: Fixed event tests.
      mshtml: Check if event_table entry is allocated before using it in remove_event_handler.
      shdocvw: Return IHTMLDocument2's IDispatch in get_Document.
      mshtml: Use correct iexplore.exe path in mshtml.inf.

Jose Rostagno (5):
      wineconsole: Fix Spanish translation.
      winecfg: Fix Spanish translation.
      start: Fix Spanish translation.
      regedit: Fix Spanish translation.
      winhlp32: Fix Spanish translation.

Juan Lang (1):
      wincrypt.h: Remove duplicate definitions.

Jörg Höhle (2):
      winealsa: Only linear PCM is supported.
      mmsystem: Handle WAVE_FORMAT_QUERY case.

Ken Thomases (1):
      winex11: Allow setting focus on active window, if no focus window.

Luca Bennati (2):
      kernel32: Update Italian translation.
      cmd: Update Italian translation.

Maarten Lankhorst (1):
      winecfg: Only initialise the audio drivers once.

Marko Nikolic (2):
      advapi32/tests: Fixed -Wsign-compare warnings in security tests.
      advapi32/tests Fixed test macro in ConvertSecurityDescriptorToString.

Matteo Bruni (1):
      wined3d: Check for error conditions in GL call.

Michael Stefaniuc (17):
      wordpad: "Fix" an error in the Norvegian translation.
      wordpad: Remove untranslated resources from the Turkish translation.
      winecfg: Fix an error in the Chinese (Traditional) translation.
      xcopy: Add the Romanian translation.
      xcopy: Update the English resource.
      cmd: Don't treat all command lines with '/?' as builtin commands.
      serialui: Add the Romanian translation.
      hhctrl.ocx: Add the Romanian translation.
      gphoto.ds: Add the Romanian translation.
      net: Add the Romanian translation.
      notepad: Fix an error in the Wallon resource.
      notepad: Fix an error in the Chinese (Simplified) resource.
      msvfw32: Add the Romanian translation.
      oledlg: Add the Romanian translation.
      jscript: Update the Romanian translation.
      reg: Add the Romanian translation.
      winedbg: Add the Romanian translation.

Misha Koshelev (1):
      include: Include d3dx9shape.h in d3dx9.h.

Nikolay Sivov (10):
      msxml3: Don't force parser encoding when loading from file.
      msxml3: Support xml:lang attribute in IXMLElement::getAttribute().
      msxml3: Don't crash on null pointer when doing ::Next() on a last child.
      msxml3: Extend traces for inc/dec refs on libxml2 documents.
      msxml3: Properly free namespace structure pointer.
      msxml3: Use vtable macros consistently, depending on pointer type.
      msxml3: Silence a warning in ::get_baseName() for document nodes.
      msxml3: Accept CLSID_FreeThreadedDOMDocument30 in class factory.
      msxml3: Don't free namespace data tracked in a tree.
      msxml3/tests: A test to show difference in XPath and XSLPattern for node position.

Paul Chitescu (1):
      gdi32: If driver is missing claim vectorial fonts are supported so GDI fonts (freetype) are used.

Peter Davies (1):
      winegcc: Enable the use of gcov and PGO.

Piotr Caban (1):
      msvcrt: Added __crtLCMapStringW partial implementation.

Sven Baars (3):
      cmd: Update Dutch translation.
      oledlg: Fix Dutch translation.
      shell32: Fix Dutch translation.

Vincent Povirk (6):
      gdiplus: Stub GdipGetRenderingOrigin.
      gdiplus: Stub GdipGetLineTransform.
      gdiplus: Stub GdipMultiplyLineTransform.
      gdiplus: Stub GdipGetPathGradientCenterColor.
      gdiplus: Always create path gradient brushes with blend positions.
      gdiplus: Stub GdipGetEncoderParameterListSize.

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

--
Alexandre Julliard
julliard@winehq.org
