The Wine development release 1.9.0 is now available.

What's new in this release (see below for details):
  - A number of fixes that were deferred during code freeze.
  - WSAPoll implementation.
  - Standard font dialog fixes.
  - X11 drag&drop improvements.
  - Various bug fixes.

The source is available from the following locations:

  http://dl.winehq.org/wine/source/1.9/wine-1.9.0.tar.bz2
  http://mirrors.ibiblio.org/wine/source/1.9/wine-1.9.0.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.9.0 (total 43):

   3611  CorelDRAW 9: copy/paste of graphics elements between multiple instances of the program doesn't work
   8097  Pazuru Alfabet picture display flicker
  14290  winhelp: temporary 100% CPU use when loading some help files
  15253  VB6 application doesn't fully render text using custom bitmap font (only one character shown)
  15951  Origin Pro 6.1 / 7.5 / 8.0 / 8.5: Matrix menu commands don't work (dialog for auto-spacing of levels, colors or linestyles in contour-plots not shown)
  17310  Window looses its top returning from fullscreen and is undragable from normal means
  18347  Multiple applications crash on unimplemented function gdiplus.dll.GdipImageSetAbort (Cooliris, IPLA 0.9)
  20208  Liquid Story Binder - 'z' location broken and window management issues
  22871  MinGW gdb 5.2.1 crashes when trying to enter commands
  22966  Restricted Area: incorrect rendering of character animations
  25104  ChooseFont dialog does not support non standard font sizes
  26769  Unable to play mms in Windows Media Player [9|10] with builtin wininet
  28915  Eclipse Indigo SR1 (3.7.1) C++ IDE complains "'Periodic workspace save.' has encountered a problem." (java expects NtWriteFile to support FILE_WRITE_TO_END_OF_FILE)
  29455  Call of Duty 4: persons are not visible
  30621  Web Forum Reader 3.0 shows empty/white page when adding website resource (embedded browser)
  30678  Phantasy Star Online: Ambition of The Illuminus (PSU: AOTI): resolution dropdown box empty
  30811  Music in Alpha Centauri stutters
  32650  LibreOffice 4 beta UI quite slow
  32926  PPTV 3.2.1 crashes after installation
  33101  FlashDevelop 4.3.0 (.NET 2.0 app) crashes on startup with 'Initialization failed. Please, run FlashDevelop again.'
  33641  MS Comptes Bancaires 9.0 crashes on startup
  33651  HeeksCAD & HeeksCNC fails
  33737  PowerPoint Viewer 2010 cannot start when Windows version is Vista or later ('IFileDialogCustomize::MakeProminent' and 'IFileDialogCustomize::SetControlItemState' are stubs)
  34312  3d chat client for there.com crashes
  35187  Jade Empire Special Edition configuration tool always resetting video settings
  35605  3Dmark 2000: Choosing "Run Default Benchmark" says "Benchmark Aborted!"
  35693  Kaspersky Internet Security 2010 service installation fails due to missing TDI wrapper library 'tdi.sys'
  37457  Musedit crashes when trying to transcribe from a midi file
  37580  Spotify "Browse" GUI not present.
  37646  valgrind shows an invalid free in advpack/tests/install.c
  38076  GameRanger: unimplemented function dnsapi.dll.DnsFlushResolverCacheEntry_A
  38321  Game Heroes 3.5 In The Wake Of Gods (Heroes III of Might And Magic mod): Mouse pointer disappears after click
  38580  Secret Files 1-2, UFO:Extraterrestrials Gold: hardware mouse pointer missing/corrupted
  38601  Planetary Annihilation needs WS2_32.dll.WSAPoll
  38734  Application Impact Telemetry Static Analyzer from Windows SDK 8.1 App Certification Kit needs api-ms-win-core-path-l1-1-0.dll
  38818  Umax Astra 4100 USB scanner driver installer needs setupx.dll16.DiBuildDriverIndex in Win9X mode
  39611  Any Video Converter (AVC) crashes after converting a video, needs msvcr100.dll._wtmpnam_s
  39678  Zararadio can not read folder/file name path with Latin characters
  39764  An attempt to do automatic authentication unexpectedly drops the payload from server response
  39769  Caffeine Demo fails to start with NVIDIA: Extension GL_VERSION_3_3 required for glVertexAttribDivisor not supported
  39770  "Enter/Exit Full Screen" menu isn't localized
  39789  Reusing xmlhttprequest doesn't clear previous headers
  39811  GetLongPathName not working on case insensitive filesystems when short path is passed

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

Changes since 1.8:

Alex Henrie (2):
      kernel32: Add TRACE to SetCommState.
      ntdll: Increase maximum number of autodetected COM/LPT ports to 256.

Alexandre Julliard (1):
      secur32/tests: Don't check the exact number of cipher bits.

Alistair Leslie-Hughes (2):
      oledb32: Convert to a BSTR to work out it size.
      oledb32: GetConversionSize shouldn't fail for null variants.

Andrew Eikum (1):
      maintainers: Alphabetize.

Andrey Melnikov (1):
      gdi32: Handle NULL filename in GetICMProfileA().

André Hentschel (14):
      winmm: Remove a dead assignment (Clang).
      shell32: Minor cleanup of SHELL_execute (Clang).
      xaudio2_7: Check return of IAudioClient_Start (Coverity).
      wininet: Return the correct error code (Clang).
      msvcrt: Don't continue on demangle failure (Coverity).
      mmdevapi: Skip device if GetId fails (Coverity).
      winmm: Respect return value from joyGetPos (Coverity).
      version: Remove dead assignments (Clang).
      services: Fix access adjustment by reordering code (Clang).
      setupapi: Remove dead code (Clang).
      secur32: Ignore pfQOP in VerifySignature (Clang).
      sane.ds: Remove dead code (Clang).
      wineboot: Remove dead code (Clang).
      winedbg: Remove a dead assignment (Clang).

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

Austin English (10):
      iexplore: Sync registry and program resource values.
      setupx.dll16: Add DiBuildDriverIndex stub.
      tdi.sys: Add a stub dll.
      api-ms-win-core-path-l1-1-0: Add stub dll.
      hal: Add READ_PORT_ULONG stub.
      kernel32: Make CompareStringEx semi-stub flag FIXME only show once.
      pdh: Add PdhGetLogFileTypeA/W stubs.
      setupapi: Add SetupDiSelectBestCompatDrv stubs.
      ntoskrnl.exe: Add RtlInitializeGenericTableAvl/RtlInsertElementGenericTableAvl stubs.
      api-ms-win-security-lsalookup-l1-1-0: New dll.

Bruno Jesus (1):
      ws2_32: Add WSAPoll() implementation.

Changhui Liu (2):
      hidclass.sys: Initialize ext->irp_queue immediately after HID_CreateDevice.
      hidclass.sys: Properly print 80 bytes in first line when tracing ParseDescriptor.

Hans Leidekker (11):
      qmgr: Use the full path for HTTP downloads.
      dnsapi: Add a stub implementation of DnsFlushResolverCacheEntry_A/UTF8/W.
      winhttp: Don't drain content until authorization is handled successfully.
      wbemdisp: Calculate the object count returned from ISWbemObjectSet::get_Count just once.
      wbemprox: Support string literals in comparisons with integer properties.
      wbemprox: Implement Win32_NetworkAdapterConfiguration.Description.
      wbemprox: Implement Win32_NetworkAdapterConfiguration.DefaultIPGateway.
      wbemprox: Set correct variant type if array property value is NULL.
      wbemprox: Implement Win32_NetworkAdapterConfiguration.DHCPEnabled.
      wbemprox: Implement Win32_NetworkAdapterConfiguration.DNSServerSearchOrder.
      wbemprox: Implement Win32_NetworkAdapterConfiguration.SettingID.

Jacek Caban (2):
      mshtml: Added IHTMLWindow::get_clientInformation implementation.
      mshtml: Added nsIChannel::Cancel implementation.

Jactry Zeng (10):
      riched32/tests: Test EM_LINELENGTH with multibyte character.
      riched20/tests: Test EM_LINELENGTH with multibyte character.
      riched20/tests: Add multibyte character tests for selection.
      riched32/tests: Add tests for selection.
      riched20/tests: Test EM_GETTEXTRANGE with multibyte character.
      riched32/tests: Test EM_GETTEXTRANGE with multibyte character.
      riched20/tests: Test EM_GETSELTEXT with multibyte character.
      riched32/tests: Test EM_GETSELTEXT with multibyte character.
      riched20/tests: Add tests for WM_GETTEXTLENGTH.
      riched32/tests: Test WM_GETTEXTLENGTH with multibyte character.

Jeremy White (7):
      kernel32/tests: Add path tests for the ./../foo case.
      kernel32: Advance over the input buffer when stripping ./.
      kernel32/tests: Add tests for GetLongPathName using a slash delimiter.
      kernel32/tests: Add a test for GetShortPathName using a slash delimieter.
      kernel32: Preserve a '/' delimiter in GetLongPathName and GetShortPathName.
      kernel32/tests: Test GetLongPathNameA when the file name case differs from the input.
      kernel32: Revise GetLongPathNameA to avoid overriding the input on long names.

Joachim Priesner (1):
      wbemprox: Iterate over all drives instead of just the first four.

Lauri Kenttä (1):
      po: Update Finnish translation.

Michael Stefaniuc (3):
      dsound: Fail to create a version 8 3d buffer with DSBCAPS_CTRLPAN.
      dsound: Simplify error handling when creating a sound buffer.
      dsound: Use a better name for IDirectSoundBufferImpl_Create().

Nikolay Sivov (32):
      kernel32/tests: Some tests for ZombifyActCtx().
      user32/tests: One more activation context test for interthread SendMessage.
      user.exe: Fix MapDialogRect() to actually convert passed rectangle (Coverity).
      ole2nls: Fix CompareString() prototype.
      ntdll: Trace RTL_BITMAP api arguments as unsigned when appropriate.
      dxdiagn: Improve error handling when converting to VT_BSTR (Coverity).
      regedit: Fix potential buffer leak, simplify error handling (Coverity).
      winemenubuilder: Simplify MIME types list management.
      gdi32: Initialize 'param' field (Coverity).
      comdlg32/fontdlg: Limit text length user can type in as font point size.
      comdlg32/fontdlg: Allow font sizes outside of defaults set.
      comdlg32/fontdlg: Fix string format for sizes added to listbox.
      comdlg32/fontdlg: Remove dead assignment (Coverity).
      msvcrt: Fix char to int promotion that breaks pattern lookup.
      msvcrt: Fix cwscanf* prototypes.
      po: Update Russian translation.
      msxml3: Clear request headers on Open().
      ole32: Fix parameter validation for CoGetMalloc().
      ole32: Simplify OleRegGetMiscStatus() using existing helper, use read-only key permissions.
      ole32: Simplify OleRegGetUserType() using existing helper.
      ole32/tests: Some tests for OleRegGetUserType().
      ole32: Ignore GetMiscStatus() returned value in OleCreate().
      ole32: Use OleRun() in OleCreate() instead of unrolling what it does.
      ole32/tests: Remove some casts we don't need, fix a couple of others.
      ole32/tests: Simple test for aggregation in CreateDataCache().
      dwrite/tests: One more test for duplicates in IDWriteTypography.
      dwrite: Store per-range typography property.
      dwrite: Optimize for the most common case of layout object initialization.
      dwrite: Store last line wrapping property.
      dwrite: Store optical alignment property.
      dwrite: Locale layout ranged attribute is case-insensitive.
      dwrite: Fix identical ranges merging.

Paul Gofman (1):
      msvcrt: Rename __libm_sse2_* functions to fix compilation when using Intel compiler.

Piotr Caban (17):
      winex11.drv: Ignore effect returned in IDropTarget::DragEnter.
      winex11.drv: Call DragLeave instead of Drop if DROPEFFECT_NONE was set.
      winex11.drv: Only update drop effect if IDropTarget::DragOver returned S_OK.
      winex11.drv: Reset XDNDAccepted flag if IDropTarget::DragEnter fails.
      winex11.drv: XDNDDropEffect stores OLE Drag&Drop effect so don't use it WS_EX_ACCEPTFILES related drops.
      msvcrt: Add _strtol_l implementation.
      msvcrt: Return error if last known character is further in the string then current character.
      ole32: Fix apartment window class name.
      msxml3: Update xmlNode reference count when nodes are merged in node_insert_before.
      msxml3: Store information about ignorrable whitespace nodes in xmlNode._private variable.
      msxml3: Reimplement node_get_text helper so it uses information about ignorred white space nodes.
      msxml3: Add support for CDATA nodes in node_get_text.
      msxml3/tests: Use exact comparison in IXMLDOMNode::get_text tests.
      ntdll: Fix NtQueryDirectoryFile behavior on short file names on case insensitive file systems.
      msvcp110: Always return empty string in _Read_dir on end of enumeration or error.
      msvcrt: Add tmpnam_s implementation.
      msvcrt: Add _wtmpnam_s implementation.

Riccardo Bortolato (2):
      ddraw: Check if surface is a mipmap sublevel or a non-positive X top level surface through caps in ddraw_surface7_GetPriority().
      ddraw7/tests: Test GetPriority() on cubemap surfaces.

Sebastian Lackner (8):
      kernel32/tests: Remove unnecessary call to GetExitCodeProcess in process tests.
      ntdll: ProcessDebugFlags should return debug_children flag instead of !debugger_present.
      server: Fix assignment of primary_group in token_duplicate.
      tools: Remove redundant check for request size in make_requests.
      advapi32: Add stubs for RegCreateKeyTransacted[A/W] functions.
      ntdll/tests: Add more tests for SystemHandleInformation.
      kernel32/tests: Add test for process object destruction.
      pdh: Fix prototype of PdhGetLogFileType[A/W].

Thomas Faller (1):
      ntdll: Fix valgrind heap realloc notifications.

Thomas Petazzoni (1):
      configure: Allow to override the location of the *-config scripts.

YongHao Hu (3):
      msvcp110: Add tr2_sys__Read_dir implementation.
      msvcp110: Add tr2_sys__Close_dir implementation.
      msvcp120/tests: Add tests of tr2_sys__Open_dir, tr2_sys__Read_dir and tr2_sys__Close_dir.

--
Alexandre Julliard
julliard@winehq.org
