This is release 1.0-rc3 of Wine, a free implementation of Windows on Unix.

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

Because of lags created by using mirrors, this message may reach you
before the release is available at the public sites. The sources will
be available from the following locations:

  http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.0-rc3.tar.bz2
  http://prdownloads.sourceforge.net/wine/wine-1.0-rc3.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 or CVS
repositories. Check respectively http://www.winehq.org/site/git or
http://www.winehq.org/site/cvs for details.

If you fix something, please submit a patch; instructions on how to do
this can be found at http://www.winehq.org/site/sending_patches

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.0-rc3:

   2368  Wine loses its X-Window when switching to another virt. desktop in Fvwm
   4468  advapi32: Fulltilt Poker hangs  (GetCurrentHwProfileA is a stub)
   4652  Adobe Dreamweaver MX 2004 installs well but does not run.
   6206  riched20:Live Person crashes
   7214  wine_dbg_vprintf: debugstr buffer overflow (contents: 'err:msvcrt:demangle_datatype Unknown type ')
   7318  supertux 0.3 freezes (dsound bug)
   7904  C&C 3 setup displays empty window
   7979  S.t.a.l.k.e.r. - some objects appear over-bright or too dark
   8043  Dreamfall: speech gets skipped in dialogues
   8129  Acomba: Freezes after closing an unsaved invoice
   8408  unimplemented function ntoskrnl.exe.memset
   9799  Textures on vehicles are too dark in GTA Vice City!
  10025  Cyrillic glyphs are missing in built-in Tahoma Bold
  11248  fixme:winsock:WSASocketW Unsupported socket family -1!
  11389  ABBYY FineReader 7.0 Professional Edition crashes at start
  11822  All applications over VNC: Applications freeze for any letters input
  11914  DestroyContext in dlls/wined3d/device.c causes regression in Everquest2
  11929  Audiosurf: Questviewer.exe crashes with page fault.
  11989  Arindal.exe Text-Windows not displayed correctly
  11991  OpenGL regression in Hitman 2 and Hitman 3
  12192  SupCom Addon: No units visible
  12322  Sacrifice game crashes in full screen mode
  12455  Warcraft III 1.21b - Crashes with Fatal Error on Switch Desktop
  12540  Favourites menu doesn't work as expected
  13102  WinterMute Engine drawing window bug
  13120  dzh2 crashes on startup
  13148  Guitar Pro 5 Crashes (maybe audio problem)
  13154  Jedi Academy: launcher freezes when button clicked
  13277  Return to Mysterious Island crashes
  13342  Winedbg doesn't handle longlong's well
  13372  Adobe Acrobat Pro 8 / Acrobat Reader 8 -- install fails
  13395  Guild wars not start
  13403  fcc hangs , unless using native dbghelp
  13420  Hang on first keypress
  13475  Sytray icon totally transparent
  13476  SQLyog community edition : Cannot connect to a remote DB through gSTM tunnel

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

Changes since 1.0-rc2:

Alexander Dorofeyev (1):
      ddraw: Do not return modes differing only by refresh rate without DDEDM_REFRESHRATES.

Alexandre Julliard (16):
      libport: Move the sigsetjmp replacement to exception.h to make it available for Winelib too.
      winedbg: Fix compile when poll() is not available.
      programs: Use the Wine import libraries when compiling with MinGW.
      tests: Use the Wine import libraries when compiling with MinGW.
      winetest: Remove the per-file revision info, we now use the global commit id.
      winetest: Don't submit test results if we don't have a valid git build id.
      winex11: Change the pixel format initialisation to make sure it happens under the X11 lock.
      winex11: Make sure that all glX functions are called under the X11 lock.
      winex11: Add support for performing GL calls on a top-level window DC.
      opengl32/tests: Add a couple of test cases for pixel format handle on window DCs.
      msftedit: Explicitly load riched20 to make sure the window classes are created.
      winex11: XInitThreads is hopeless, remove it again.
      user32: Check for wraparound in the initial window coordinates.
      start: Fall back to ShellExecute for unknown binaries in /unix mode.
      include: Use WINE_NO_UNICODE_MACROS instead of __WINESRC__ where appropriate.
      user32: We no longer need to ensure that the BeginPaint window belongs to the current thread.

Alistair Leslie-Hughes (2):
      msxml3: Stopped tests from crashing and a Win98 fix.
      netapi32: Fix tests when the machine is on DOMAIN.

Andrej Sinicyn (1):
      regedit: Update the German translation.

Austin English (1):
      gdi32: Fix a test failure in 2k.

Dan Kegel (4):
      winmm: Use HeapAlloc in the capture test instead of using strdup.
      fusion: UninstallAssembly test: Fix typo, avoid undefined value.
      fusion: Use HeapAlloc, not strdup, to avoid malloc/HeapFree mismatch.
      advapi32: Don't test buffer length if buffer is null.

Detlef Riekenberg (1):
      avifil32: Resize the dialog to avoid truncated texts.

Dmitry Timoshkov (9):
      wininet: INTERNET_InternetOpenUrlW is an internal helper.
      msi: Mark some data as constant.
      gdi32: Ignore exScale/eyScale when comparing EMREXTTEXTOUT EMF records.
      gdi32: If there is no clipping rect, EMREXTTEXTOUT shouldn't have a bounding rect.
      gdi32: Make generated EMFs fully match Windows ones.
      user32: Implement GetWindowModuleFileName.
      user32: Add the tests for GetWindowModuleFileName.
      msvcrt: Mark some data as constant.
      user32: CBT hook doesn't send window messages.

Dylan Smith (2):
      wordpad: Removed spaces between dots in ellipses for english menu text.
      wordpad: Added a null terminator needed for a unicode string.

Eric Pouech (6):
      dbghelp: Don't crash when parsing the forward declaration of a function.
      dbghelp: Fix for SymGetModuleInfo().
      msvcrt: Properly handle the extended keys in getch().
      winedbg: Removed unneeded variable from print_basic.
      winedbg: Fixed the print_basic command when dealing with long long values.
      winedump: Fully dump the compiland (V3) structure out of .pdb files.

Francois Gouget (6):
      kernel32/tests: Get the tests running again on Win95.
      ws2_32: Make sure INVALID_SOCKET is correctly typed.
      shell32: s/library/Wine/ for consistency in the license message.
      ddraw: Remove trailing spaces in Wine traces.
      tests: Add a broken() function to make it possible to handle Windows misbehaviors that we don't want to reproduce in Wine.
      regedit: Remove extraneous spaces in '...'.

Gregor Münch (2):
      shell32: Update German translation.
      winhlp32: Update German translation.

H. Verbeet (5):
      d3d: Use an alpha capable backbuffer format in the visual tests.
      wined3d: Add WINED3DTOP_ADDSIGNED2X to debug_d3dtop().
      wined3d: Fix the nvrc implementation of WINED3DTOP_MULTIPLYADD and WINED3DTOP_LERP.
      d3d8: Test our texop implementation.
      d3d9: Test our texop implementation.

Hwang YunSong(황윤성) (1):
      winecfg: Updated Korean resource.

Igor Tarasov (2):
      user32: Further implementation of MNS_NOTIFYBYPOS.
      fonts: Tahoma Bold Cyrillic glyphs added.

Jacek Caban (4):
      mshtml: Fixed some tests on IE 7.
      mshtml: Make Wine behave like IE 7.
      mshtml: Fixed more tests on IE 7.
      mshtml: Fixed copy&paste typo.

James Hawkins (10):
      mshtml: Add missing OLECMDID definitions.
      mshtml: Fix a test failure in win2k3.
      winetest: Use the win32 API to extract the tests.
      shell32: Test against the long form of the path.
      rpcrt4: Trace the results of two statuses that return different results across platforms.
      usp10: Fix several failing test in win2k3.
      kernel32: Remove two tests that produce different results for win9x and NT platforms.
      user32: Fix two tests that fail in win2k3 and above.
      oleaut32: Disable olefont tests that fail on all platforms.
      user32: win2k3's GetWindowModuleFileName does return ERROR_INSUFFICIENT_BUFFER.

Jens Albretsen (2):
      ddraw: IDirect3DTextureImpl_Load failed when texture was loading onto itself.
      ddraw: Test for IDirect3DTexture_Load of Texture into itself.

John Klehm (2):
      winex11: Detect acecad tablet as stylus device.
      winex11: Support detection of tablet devices from XExtensionKeyboard type.

Jon Griffiths (6):
      msvcrt/tests: Fix 4 tests that always fail on Vista.
      msvcrt/tests: Fix 3 tests that always fail on Vista.
      msvcrt: Follow Vista behaviour in wcscpy_s.
      msvcrt: Fix an RTTI test Failure on Vista.
      msvcrt: Fix file test which fails on Vista.
      msvcrt: Fix a test that fails on win95.

Kai Blin (2):
      ws2_32: Add support for FROM_PROTOCOL_INFO to WSASocket().
      ws2_32: Change back magic 127.12.34.56 to loopback on connect().

Kirill K. Smirnov (1):
      mshtml: Fix copy/paste error.

Louis Lenders (1):
      wine.inf: Add fake glu32.

Maarten Lankhorst (2):
      include: Add missing RpcMgmtIsServerListening declaration.
      d3d9: Add a test to see whether offscreen surfaces can be locked while a reset occurs.

Michael Karcher (8):
      crypt32: Fix integer overflow.
      crypt32: Fix order-of-evaluation dependence.
      crypt32: Pass on aiKeyAlg on RSA key import.
      crypt32: CertGetPublicKeyLength should check only cert encoding type.
      oleaut32: Currency to BSTR must use local decimal separator.
      oleaut32/tests: Call functions via manually obtained pointers.
      advpack: Fix buffer sizes for possibly quoted strings.
      dsound: Fix double free in dsound capture.

Michael Stefaniuc (37):
      comdlg32: Fix the Catalan translation including some size fixes too.
      shell32: Fix the Catalan translation.
      comdlg32: Fix the Walon translation.
      shell32: Fix the Walon translation.
      comdlg32: Fix the Thai translation.
      comdlg32: Fix the Greek translation.
      comdlg32: Fix the Ukrainian translation.
      shell32: Fix the Ukrainian translation.
      shell32: Fix the Chinese translations.
      user32: Fix the Chinese translations.
      notepad: Fix the Walon translation.
      winecfg: Fix the Chinese (Traditional) translation.
      notepad: Fix the Chinese (Simplified) translation.
      regedit: Fix the English (NEUTRAL) translation. Rename SUBLANG_ENGLISH_US to SUBLANG_DEFAULT.
      shell32: Fix the Slovak translation.
      shell32: Fix the Esperanto translation.
      shell32: Fix the Finnish translation.
      shell32: Fix the Bulgarian translation.
      shell32: Fix the Japanese translation.
      notepad: Remove the Slovak "translation" as it is basically only a stale copy of the English resource.
      notepad: Fix the Finnish translation.
      winhlp32: Fix the Slovak translation.
      comdlg32: Fix the Japanese translation.
      comdlg32: Fix the Esperanto translation.
      mshtml: Fix the Finnish translation.
      regedit: Fix the Bulgarian translation.
      regedit: Fix the Japanese translation.
      regedit: Fix the Hungarian translation.
      winecfg: Fix the Hungarian translation.
      winecfg: Fix the Bulgarian translation.
      winecfg: Fix the placement of a checkbox in the Japanese translation.
      cmd: Fix the Japanese translation.
      comdlg32: Fix the Hungarian translation.
      comdlg32: Fix some control sizes in the default English resource.
      mshtml: Fix the Hungarian translation.
      shell32: Fix the Hungarian translation.
      notepad: Fix the Hungarian translation.

Paul Vriens (18):
      setupapi/tests: Close registry key after use.
      setupapi/tests: Fix a test on NT4.
      setupapi/tests: Turn guid into a global variable.
      setupapi/tests: Skip tests on win9x.
      setupapi/tests: Cleanup after testDevRegKey.
      setupapi/tests: Cleanup after testRegisterAndGetDetail.
      setupapi/tests: Cleanup after testGetDeviceInterfaceDetail.
      setupapi/tests: Test registry after testDeviceRegistryProperty.
      setupapi/tests: Cleanup after testCreateDeviceInterface.
      setupapi/tests: Add another test.
      setupapi/tests: Test to show cleanup should not be needed.
      shell32/tests: Run tests again on win95.
      ws2_32/tests: Fix crash on win98.
      ddraw/tests: Don't crash on win9x.
      user32/tests: Run tests on win95 again.
      user32/tests: Prevent writing to not allocated memory.
      setupapi/tests: Remove leftovers from old tests.
      ole32/tests: Prevent a crash.

Tomasz Jezierski - Tefnet (1):
      comctl32/tests: Fix for setting wrong initial position in listbox.

Vitaliy Margolen (4):
      shell32: Don't print not initialized value.
      winex11: Use memmove for possibly overlapping memory areas.
      dxdiagn: A number of FIXMEs can be replaced with TRACEs.
      dinput: Convert keyboard buffer from internal data format to user data format.

Vitaly Lipatov (1):
      wine.inf: Create default spool dir.

--
Alexandre Julliard
julliard@winehq.org
