The Wine development release 1.2-rc7 is now available.  Barring any
last minute problems, this should be the last release candidate before
the final 1.2. Please give it a good testing.

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-rc7.tar.bz2
  http://prdownloads.sourceforge.net/wine/wine-1.2-rc7.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-rc7:

   1567  Capella 2002 - welcome-screen doesn't disappear
   9216  Gothic 2 won't start - complains about hook process
  12287  CommFort: cannot use sound capture
  12298  Notation Composer: crashes when opening menus when using ALSA
  13743  Checkboxes are drawn as buttons in Voyage Century
  14869  Error closing internal windows in Hy-Tek Team Manager 4.0
  15471  Adobe Contribute 4 locks up X
  15548  Voyage Century Online crashes to desktop after logging in
  16087  wine spews innumerable "Unable to check compatibility for Format..." errors in some games
  16162  Settlers 3 crashes with "wine client error: partial write"
  16863  Control drwaing over each other in very simple dotnet application
  17239  Fiesta does not work - D3D issue?
  18210  Fallout 3: game hangs after childbirth
  18475  Fallout 3: No sound device detected. Fallout 3 cannot run.
  18924  OutputDebugString does not do what it's supposed to do
  19659  EverQuest 2: EQ2 Crashed shortly after entering game.
  20650  Wargames crashes instantly if choosing hardware mode (rather than Software Rasterizer)
  21422  winedbg cannot find local symbols in EXE.
  22213  The Witcher, Enhanced edition crashes
  22215  Goldwave - Window Close event freezes application
  22944  Goldwave dialog windows drawn behind parent window
  23265  The Neverhood: movies do not play
  23417  EverQuest II: Crashes immediately after hitting "Play" at character select screen
  23469  Spectrum Lab crashes on loud sounds
  23479  notepad++: can no longer select file tabs when multiple files are open

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

Changes since 1.2-rc6:

Alexander Nicolaysen Sørnes (1):
      wordpad: Update Norwegian Bokmål translation.

Alexandre Goujon (1):
      ws2_32: Add host unreachable case.

Alexandre Julliard (3):
      Revert "comctl32: Fix selection of tab via mouse."
      ntdll/tests: Fix a few test failures in the new exe protection tests.
      msvcrt/tests: Add some alternative locale names that happen on Windows.

Andrew Nguyen (8):
      msi/tests: Run the automation tests in silent mode to avoid a dialog.
      msi/tests: Delete the test patch file for proper patch test cleanup.
      msi/test: Uninstall the test product when skipping patch tests.
      msi/tests: Skip patch tests if product installation failed.
      msi/tests: Free the user SID string buffer with the correct deallocator in the source tests.
      msi/tests: Remove a redundant source test.
      msi/tests: Fix a source test comment.
      msi/tests: Skip some source tests if a required product key cannot be created.

Andrey Turkin (1):
      msxml3: Add test to highlight another difference between XSLPattern and XPath.

André Hentschel (1):
      user32/tests: The dialog for that proc has no IDCANCEL.

Aric Stewart (1):
      shlwapi: Correct slash/backslashs in UrlCanonicalize.

Austin Lund (1):
      riched20: Process messages which arrive before WM_NCCREATE.

David Adam (1):
      d3dx9_36/test: Fix a copy/paste typo.

Eric Pouech (1):
      dbghelp: Added support for CFA save/restore operation.

Frédéric Delanoy (1):
      comdlg32: Ensure French print dialogs sizes match English ones.

Gustavo Henrique Milaré (9):
      cryptui: Update Portuguese (Brazilian) translation.
      crypt32: Update Portuguese (Brazilian) translation.
      crypt32: Update Portuguese (Brazilian) translation.
      shell32: Update Portuguese (Brazilian) translation.
      comdlg32: Fix Portuguese translation.
      kernel32: Added Brazilian Portuguese winerr file.
      kernel32: Fixed typos in Portuguese translation and changed LanguageName.
      taskmgr: Fixed Portuguese (Brazilian) translation.
      shdoclc: Fix Portuguese translation.

Henri Verbeet (1):
      wined3d: Invalidate STATE_STREAMSRC in IWineD3DDeviceImpl_EvictManagedResources().

Igor Paliychuk (10):
      clock: Add Ukrainian translation.
      devenum: Add Ukrainian translation.
      mapi32: Add Ukrainian translation.
      serialui: Add Ukrainian translation.
      uninstaller: Add Ukrainian translation.
      view: Add Ukrainian translation.
      wineps.drv: Add Ukrainian translation.
      comdlg32: Ukrainian translation update.
      winemine: Add Ukrainian translation.
      winhlp32: Ukrainian translation update.

Jörg Höhle (1):
      kernel32/tests: Skip fewer tests on Win9x.

Ken Sharp (12):
      msvidc32: Add Welsh resource.
      localspl: Add Welsh resource.
      oleaut32: Add Welsh resource.
      kernel32: Update Gaelic resource.
      mapi32: Add Welsh resource.
      msrle32: Add Welsh resource.
      view: Add Welsh resource.
      uninstaller: Add Welsh resource.
      devenum: Add Welsh resource.
      kernel32: Update Cornish resource.
      kernel32: Update Welsh resource.
      mapi32: Add Gaelic resource.

Ken Thomases (1):
      ntdll: Fix set_baud_rate for high rates for non-Linux (bad copy/paste).

Louis Lenders (4):
      xinput1_3: Quiet a noisy fixme.
      include: Add EnumDisplaySettingsEx flags.
      include: Add dmDisplayOrientation definitions.
      d3d9: Add a few tests for GetAdapterDisplayModeEx.

Marcus Meissner (3):
      ntdll: Add tests for NtQueryVirtualMemory.
      mscvrt: Fix include to be C++ compatible.
      ntdll: Handle error cases in om test (Coverity).

Michael Stefaniuc (3):
      winhlp32: Remove an untranslated resource from the Romansh translation.
      progman: Fix the sizes of a dialog in the Romanian translation.
      wordpad: Add the Romanian translation.

Misha Koshelev (1):
      d3dx9: Test penultimate declaration element in D3DXDeclaratorFromFVFTest.

Paul Vriens (2):
      notepad: Use SUBLANG_NEUTRAL for the Arabic resources.
      comdlg32: Prevent a NULL pointer dereference (Coverity).

Stefan Dösinger (5):
      d3d9: Nvidia drivers don't like unused output formats.
      d3d9: Pass count=0 when clearing the whole surface.
      d3d9: Ignore a Windows 7 failure in the d3d9 depth clamp test.
      d3d9: Windows7 doesn't draw with Viewports bigger than the framebuffer.
      d3d9: Use color_match in the coissue tests.

Vincent Povirk (5):
      gdiplus: Check for null pt in GdipCreateMatrix3.
      gdiplus: Set result to NULL when CreatePathGradient fails.
      gdiplus: Stub GdipRecordMetafile.
      gdiplus: Stub GdipRecordMetafileStream.
      gdiplus: Stub GdipGetMetafileHeaderFromEmf.

Yaron Shahrabani (2):
      notepad: Add Hebrew translation.
      notepad: Add Arabic translation by Khaled Hosny.

--
Alexandre Julliard
julliard@winehq.org
