The Wine development release 1.4-rc3 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://ibiblio.org/pub/linux/system/emulators/wine/wine-1.4-rc3.tar.bz2
  http://prdownloads.sourceforge.net/wine/wine-1.4-rc3.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.4-rc3:

   4756  Can't install Bard's tale due to grayed out "I accept" button in eula dialog
   6033  Fallout 2 : In game mouse pointer is unusable
   8295  Motorhead crashes when using hw D3D renderer
  14211  Skype 3.8 Crash while installing
  15229  Dragon NaturallySpeaking 10 has gdiplus error on microphone display box
  15531  Janosch - Kleine Tigerschule crashes
  15894  PostgreSQL 8.3 service installation fails
  17036  GTA2 (Grand Theft Auto 2) runs too slow to be playable (ATi issue)
  17370  Notepad++ 5.2 crashes when triggering tooltip over macro record toolbar button (user32.RealChildWindowFromPoint needs to pass CWP_SKIPINVISIBLE to skip hidden windows)
  17508  Adobe Photoshop CS2 won't install
  18345  Silverlight 2+ installers fails
  20186  Project64 does not work with gamepads anymore
  20866  Houaiss Portuguese Dictionary (blocked window)
  21015  Star Trek: Birth of the Federation crashes
  21799  3DRad IDE does not display properly
  22104  Proteus ISIS slows down in time
  22305  AutoWikiBrowser databse scanner fails with err:seh:setup_exception_record
  22459  NFSMW - Only black screen
  22836  ITypeInfo_fnInvoke member ID -525 - HP Virtual Rooms 8.0
  23423  Some graphics are corrupted in Civilization IV
  23827  HTML-Kit crashes on exit
  23912  dvdflick has an error on startup: "Object doesn't support this property or method"
  24248  TREPCAD St3: some stair types give fatal errors
  24288  SR3D Builder "will only install when DotNet2.0 is installed"
  24659  The material Navigator reports a system failure and terminates the program
  24791  Broken display in Might and Magic VII: For Blood and Honor
  25615  Wine Internet Explorer cannot load kongregate
  25749  TortoiseSVN (TortoiseProc.exe) crashes upon exit (OLE teardown)
  26792  Sentinel Protection Driver/Service installer fails (needs "HKLM\\SYSTEM\\CurrentControlSet\\Control\\VirtualDeviceDrivers" registry key present)
  27256  PDFCreator installer cannot display Chinese correctly
  27606  SketchUp 8 garbled working area
  27826  SpongeBob: Truth or Square Demo crashes before you can start
  27902  Project64 1.7.x beta doesn't work anymore
  28033  CAJViewer 7.1 install failed on some machine
  28092  pwsafe 3.26 chm help file blank
  28162  Battle.net System Check fails to send data
  28237  Hyperlinks do nothing in Internet Explorer 3.02
  28304  "p" command doesn't recognize single-quoted chars in expressions
  28379  Internet Explorer 4.0 highlights selected text incorrectly
  28516  Red Alert 3 crashes when loading map
  29046  Office 2007 apps crash loading document properties editing window
  29116  Pegasus Mail v. 4.62 build 191, IERenderer 2.4.5.18 generates (0x80004001) @01AEDC9D upon exit due to mshtml HTMLDocument_get_frames() stub
  29130  Where's Wally? The Fantastic Journey fails to recognize the CD in the drive (needs support for IOCTL_STORAGE_CHECK_VERIFY2)
  29552  Tropico 3 installer crashes with -fno-omit-frame-pointer
  29577  msvcmaker-generated projects try to run non-existent winebuild.exe
  29639  TextPad 5 installer crashes in repair mode
  29712  DInput doesn't support INFINITE effect iterations
  29740  wine gecko failed to get the profile directory
  29741  Office 2007 SP2 & SP3 installers report success but fail to install some components
  29760  Sonic R complains about a lost surface when starting in Direct3D mode
  29761  Bridge Commander: Black screen
  29783  quartz/filtergraph test is flaky
  29808  mingw32-g++ random crash compiling a wxWidgets app
  29814  Stronghold Crusader: unhandled page fault
  29821  Notepad++: closed tabs aren't properly cleared
  29827  Where's Wally? The Fantastic Journey gives 'File not found' when running setup.exe
  29829  Some images in treeview have black backgrounds with native comctl32
  29834  Age of Empires II screen freezes after playing for around 10 minutes
  29840  gdi32/font.ok test fails: font.c:4208: Test failed: expected non-vertical face for charset 128, got'

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

Changes since 1.4-rc2:

Akihiro Sagawa (5):
      po: Update Japanese translation.
      gdi32: Restore the vertical font flag from the cache.
      gdi32/tests: Add tests for East Asian font selection.
      gdi32: Consider whether the logical font face is vertical when selecting.
      gdi32/tests: Reorder tests to avoid side-effects.

Alex Henrie (1):
      po: Update Catalan translation.

Alexandre Julliard (6):
      mshtml: Use the current AppData folder instead of the default one as profile directory.
      winecoreaudio: Fix spec file parameters.
      user32: Draw the mask with SRCCOPY in DrawIcon when the image isn't being drawn.
      services: Don't close the overlapped event when terminating a service.
      dbgeng: Add missing WINAPI.
      cmd: START needs to be an internal command.

Alistair Leslie-Hughes (1):
      mshtml/tests: Interface ITravelLogClient may not be supported.

Andrew Eikum (6):
      hlink: Always pass a bind context to IMoniker::GetDisplayName.
      hlink: Don't query the IHlinkSite if the IMoniker is a system moniker.
      wineoss.drv: Don't call GETOSPACE immediately after device initialization.
      wineoss.drv: Downgrade most ERRs to WARNs.
      winmm: Downgrade most ERRs to WARNs.
      winmm: TRACE unhandled messages.

André Hentschel (5):
      winemaker: Print the invocation command line to the Makefile.
      msvcmaker: "MODULE = none" is obsolete.
      po: Update German translation.
      comctl32/tests: Add some more thumb length tests.
      mshtml: Only release the interface if it exists.

Aric Stewart (5):
      quartz: Do not report a position unless the filter graph is running or has been paused.
      quartz: AMFilterData_ParseFilterData returns a pointer to a pointer to filter data.
      gdi32: Keep our internal generated system links separate and append them to any user defined system links.
      gdi32: Allow font replacements to be specified either in localized name or English name.
      gdi32: Load fonts from default Mac external font paths.

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

Austin English (3):
      kernel32: Add support for IOCTL_STORAGE_CHECK_VERIFY2.
      wine.inf: Add CurrentControlSet\Control\VirtualDeviceDrivers registry key.
      advapi32: Sync specfile to win7.

Christian Costa (3):
      d3dx9_36: Turn FIXME into TRACE since function is implemented. Not supported formats are caught by final FIXME.
      include: Add missing formats in D3DXIMAGE_FILEFORMAT enum.
      d3dx9_36: Detect and display message for all not yet supported file formats.

Dmitry Timoshkov (6):
      psapi: Add a test for NtQueryVirtualMemory(MemorySectionName).
      user32: Add a bunch of RealChildWindowFromPoint tests.
      user32: RealChildWindowFromPoint should skip invisible windows.
      psapi: Make sure that NtQueryVirtualMemory(MemorySectionName) succeeds under Windows 2000 too.
      user32: Fix a couple of typos.
      user32: Make FlashWindowEx tests pass under Windows.

Eric Pouech (4):
      msvcrt: Fix TRACE format modifier for wfreopen.
      kernel32: Added a couple of tests about console creation through CreateFile, and fix some corner cases.
      winhlp32: Added support for some keyword support in external DLL support (RegisterRoutine parameters).
      winedbg: Let the lexer accept char definitions as integral values.

Erich Hoover (1):
      hhctrl.ocx: Fix searching for Index and TOC file.

Francois Gouget (7):
      ddraw/tests: Fix compilation on systems that don't support nameless unions.
      po: Fix a typography issue in the Telugu translation.
      po: Fix some typography issues in the Serbian (Latin) translation.
      po: Fix some typography issues in the Serbian (Cyrillic) translation.
      po: Remove or fuzzy invalid Turkish shell folder translations.
      shell32: Fix the name of the 'Application Data' folders.
      kernel32: Add a trailing full stop to the error messages.

Frédéric Delanoy (28):
      po: Update French translation.
      po: Fix some trailing ellipses errors in Brazilian Portuguese translation.
      po: Fix some trailing ellipses errors in Italian translation.
      po: Fix some trailing ellipses errors in Japanese translation.
      po: Fix some trailing ellipses errors in Russian translation.
      po: Fix some trailing ellipses errors in Portuguese translation.
      po: Fix some trailing ellipses errors in Catalan translation.
      po: Fix some trailing ellipses errors in Norwegian Bokmål translation.
      po: Fix some trailing ellipses errors in Korean translation.
      po: Fix some trailing ellipses errors in Polish translation.
      po: Fix some trailing ellipses errors in the Swedish translation.
      po: Fix some trailing ellipses errors in the Slovenian translation.
      po: Remove untranslated English strings from the Portuguese (Portugal) translation.
      po: Remove untranslated English strings from the Polish translation.
      po: Remove untranslated English strings from the Danish translation.
      taskmgr: Debug classes names are not translatable.
      po: Fix trailing full stops errors in the Catalan translation.
      po: Fix trailing full stops errors in the Danish translation.
      po: Fix trailing full stops errors in the Italian translation.
      po: Fix trailing full stops errors in the Swedish translation.
      po: Fix trailing full stops errors in the Polish translation.
      po: Fix trailing full stops errors in the Ukrainian translation.
      po: Fix trailing full stops errors in the Slovenian translation.
      po: Fix trailing full stops errors in the Portuguese (Portugal) translation.
      po: Fix trailing full stops errors in the Korean translation.
      po: Fix trailing full stops errors in the Norwegian Bokmål translation.
      po: Fix trailing full stops errors in the Russian translation.
      cmd: Add short help for START command.

Gustavo Henrique Milaré (1):
      po: Update Brazilian Portuguese translation.

Hans Leidekker (6):
      dnsapi: Remove a dead assignment (clang).
      mscms: Use the return values of GetStandardColorSpaceProfileW and GetColorDirectoryW (clang).
      mscms/tests: Pass profiles names as parameters instead of using global variables.
      msi: Follow the parent state for preselected features unless the parent is an advertised feature.
      msi: Avoid a null pointer dereference in MsiGetFileVersionW (clang).
      msi: Use the return value of IXMLDOMNode_get_text (clang).

Henri Verbeet (4):
      ddraw/tests: Use correct COM macros in a couple of places.
      ddraw/tests: Move some helper functions up with the rest of the helper functions.
      wined3d: Complain when the hardware may not be able to run a shader.
      ddraw: Implement get_window_region() on top of GetRandomRgn().

Huw Davies (6):
      ole32: Don't hold a ref to the drop target in the wrapper. Apps tend to destroy the target object without calling RevokeDragDrop.
      oleaut32: [restricted] members with negative dispids may still be called.
      shell32: Zero-init the out parameter and fix the error if the folder id is invalid.
      shell32: Don't try to check for the folder's existence if we don't have a path.
      gdi32: Rename a shadow variable.
      gdi32: Intersect the background text box with the clip rectangle in device units.

Hwang YunSong (1):
      po: Update Korean translation.

Jacek Caban (9):
      mshtml: Removed code duplication in frame collection tests.
      mshtml: Added IHTMLDocument2::get_frames implementation.
      urlmon: Properly handle combining relative mk: URIs containing full internal path.
      urlmon: Added more mk: combining tests.
      t2embapi.h: Added some missing declarations.
      urlmon: Added empty hash URIs comparing tests.
      ieframe: Make get_typeinfo implementation thread safe and more generic.
      ieframe: Added IProvideClassInfo::GetClassInfo implementation.
      ieframe: Added IProvideClassInfo::GetClassInfo tests.

Jörg Höhle (3):
      mmdevapi/tests: Produce audible output.
      mmdevapi/tests: Fix errors and crashes in various native configurations.
      mmdevapi/tests: Perform renderer padding & position tests.

Laura Leinonen (1):
      po: Update Finnish translation.

Lauri Kenttä (2):
      po: Correct Finnish translation.
      po: Fix Finnish translation.

Matteo Bruni (1):
      ddraw: Don't leak the window DC.

Michael Stefaniuc (2):
      comctl32: Remove an obsolete resource attribute.
      inetcpl.cpl: Remove an obsolete resource attribute.

Nikolay Sivov (4):
      msxml3: Fix element data leak on error.
      shell32: Use string comparison as autocompletion check.
      comctl32: Invalidate before item is removed.
      comctl32: A test for auto-set TBSTYLE_TRANSPARENT style.

Piotr Caban (1):
      msvcrt: Handle negative file->_cnt value in _flsbuf function.

--
Alexandre Julliard
julliard@winehq.org
