The Wine development release 1.8-rc4 is now available.

What's new in this release (see below for details):
  - Bug fixes only, we are in code freeze.

The source is available from the following locations:

  http://dl.winehq.org/wine/source/1.8/wine-1.8-rc4.tar.bz2
  http://mirrors.ibiblio.org/wine/source/1.8/wine-1.8-rc4.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.8-rc4 (total 26):

   8258  Dolphin Smalltalk IDE fails when requesting trial on urlmon.dll.URLOpenBlockingStreamA
  16698  Sandboxie installer needs 'HKLM\\System\\CurrentControlSet\\Services\\Eventlog\\System' registry key
  17501  Cockpit Crash hangs
  17814  HLMV from Source SDK crashes while starting
  18964  BioEdit: Minimized windows icons become garbaged
  19041  WinNER5 database client crashes on startup
  23377  Buried in Time demo does not start
  31817  Tencent RTX Client 2010 installer fails to register Shell extension handler 'RTXShlMenu.dll' (missing 'HKCR\\*\\shellex\\ContextMenuHandlers' and 'HKCR\\folder\shellex\ContextMenuHandlers' registry keys)
  31862  "The Network" demo fails to start without native d3dx9
  32383  Configure script can't find 32-bit freetype libraries on 64-bit debian squeeze
  32655  Miro 5.x/6.x installer does not go beyond "initializing..." phase
  33438  Wine builtin 'explorer' crashes in Win98 mode when browsing virtual 'C:' drive
  33917  Voyage: Journey to the Moon demo shows white screen
  34308  Gazillionaire has transparency issues
  36726  DVD Profiler: black squares in the gui
  37899  Adobe Photoshop 5.0: Type tool fails with stack overflow
  38293  Setting PROMPT in a batch file resets on exit of batch file
  38371  Winfiol crashes when changing program preferences
  38480  RuneScape crashes when switching to OpenGL renderer (glCopyTexSubImage3DEXT blacklisted by extension filtering)
  38723  Ad-Aware 11.6.306.7947 wants msi.dll.MsiJoinTransaction
  38778  Blade of Darkness demo hangs with a black screen on start
  39119  Heroes of the Storm 13.0.37117 crashes on exit needing wevtapi.dll.EvtClose
  39535  PowerISO 6.4 (32 bits) crashes on installation (needs fusion.dll.CopyPDBs)
  39710  Hitman 2: Silent Assassin shows wrong colors with environment bump mapping
  39747  Original War: user interface gets corrupted after opening the help screen
  39758  Desktop Holiday Light app crashes

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

Changes since 1.8-rc3:

Alex Henrie (3):
      winecfg: Widen "Folder" column to accommodate Catalan translation.
      ieframe: Widen toolbar buttons to accommodate Catalan translation.
      po: Update Catalan translation.

Alexandre Julliard (5):
      user32: Fix WS_EX_DLGMODALFRAME handling in AdjustWindowRect and add more tests.
      opengl32: Make it possible to use an alternative in wglGetProcAddress when an extension is missing.
      user32: SetLayeredWindowAttributes is no longer a stub.
      user32: Preserve the surface contents when changing the WS_EX_LAYERED bit.
      Revert "opengl32: Store alternative function in wglGetProcAddress."

Alistair Leslie-Hughes (3):
      configure: Create d3dx10 import library.
      dxguid: Include d3dx10.h.
      wevtapi: Add EvtClose stub.

Andrew Eikum (1):
      winepulse.drv: Print a winediag error when PA buffer size is too small.

Austin English (1):
      fusion: Add a stub for CopyPDBs.

Boyuan Yang (1):
      readme: Add Simplified Chinese translation.

Dmitry Timoshkov (6):
      winhttp/tests: Fix spurious crashes under Windows.
      winhttp/tests: Fix a typo.
      winhttp/tests: Use symbolic names for http status codes.
      winhttp/tests: Send a not empty payload in the server authorization response, check the received data on the client side.
      user32: Call the EnumChildWindows callback using a wrapper.
      winhttp/tests: Add an authentication test using IWinHttpRequest.

François Gouget (15):
      po: Fix some trailing space and exclamation mark issues in the Norwegian Bokmål translation.
      po: Fix ellipsis issues in the Norwegian Bokmål translation.
      po: Remove some extraneous ellipses in the Norwegian Bokmål translation.
      po: Fuzzy some incorrect Arabic translations.
      po: Fuzzy an incomplete Croatian translation.
      po: Remove an unwanted shortcut key in the Arabic translation.
      po: Fix a printf-format specified in the Catalan translation.
      po: Remove a superfluous trailing space in a Japanese translation.
      po: Fix trailing colon issues in the Czech, Esperanto Japanese and Portuguese (Portugal) translations.
      po: Add a couple of missing ellipses to the Catalan translation.
      po: French translation tweaks and fixes.
      winecfg: Tweak sizes and alignments so the 'Font' button does not clip in Portuguese (Portugal).
      po: Translate 'batch file' to French.
      po: Tweak the French TYPE and ASSOC usage messages.
      po: Use lowercase+underscore names for the replaceable parts of the French usage messages.

Henri Verbeet (1):
      ddraw: Mark surfaces as lost on mode changes.

Hugh McMaster (1):
      cmd: Do not overwrite a user-specified Prompt variable.

Jacek Caban (3):
      mshtml: Fixed nsIHttpChannelInternal declaration.
      mshtml: Return success in SetCorsIncludeCredentials and SetCorsMode.
      mshtml: Properly return NULL parentElement.

Jactry Zeng (2):
      riched20/tests: Test EM_SETTEXT and EM_REPLACESEL with multibyte character.
      riched20/tests: Add return tests for EM_SETTEXTEX.

Julian Rüger (1):
      po: Update German translation.

Józef Kucia (4):
      wined3d: Use correct initial color for FFP texture blending in GLSL backend.
      wined3d: Use correct initial color for FFP texture blending in ARB program shader backend.
      d3d9/tests: Add tests for FFP texture blending.
      d3d8/tests: Port test_texture_blending() from d3d9.

Ken Thomases (1):
      loader: Add the CFBundleAllowMixedLocalizations key to the embedded Info.plist to allow Cocoa to localize its strings.

Michael Müller (1):
      advapi32: Set last error to ERROR_SUCCESS in GetSidIdentifierAuthority.

Nikolay Sivov (4):
      po: Update Russian translation.
      dwrite/tests: Some tests for MapCharacters().
      dwrite/tests: Some tests for fallback builder.
      winecfg: Fix a crash on empty size field in Desktop Integration.

Piotr Caban (1):
      ole32: Fix minimal size check of compound file in StgOpenStorage.

Sebastian Lackner (3):
      opengl32: Store alternative function in wglGetProcAddress.
      ntdll/tests: Add more tests for ProcessDebugFlags.
      opengl32: Add alternative function for glVertexAttribDivisor.

Stefan Dösinger (2):
      wined3d: Restore WINEDDBLT_ALPHATEST support.
      wined3d: Clip software cursor blits.

Viliam Lejcik (1):
      kernel32/nls: Regional settings translation for Czech and Slovak.

--
Alexandre Julliard
julliard@winehq.org
