The Wine development release 1.5.27 is now available.

What's new in this release (see below for details):
  - System tray support in the Mac driver.
  - Various C runtime improvements.
  - Large icons for built-in applications.
  - Various bug fixes.

The source is available from the following locations:

  http://prdownloads.sourceforge.net/wine/wine-1.5.27.tar.bz2
  http://mirrors.ibiblio.org/wine/source/1.5/wine-1.5.27.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.5.27 (total 34):

  23082  SlingPlayer 2.x fails when connecting
  23751  SpongeBob SquarePants: Diner Dash 2 - some icons are garbled
  24325  MSXML Parser corrupts line breaks
  24502  SimCity 3000 Unlimited crashes when loading
  25455  PopCap games installer hangs before showing the license agreement
  26573  "register with eBay" link in eBay Turbo Lister 9's help file doesn't do anything
  26586  IXMLHTTPRequest basic authentication doesn't work
  27578  Cygwin's wget.exe can't download files
  28667  SlingPlayer 1.5 UI falls apart when streaming
  29079  Serious Sam HD TSE: low performance
  29186  QQ International 1.1 doesn't install properly
  29499  Age of Empires II freezes when disconnecting from a multiplayer room/game using native DirectPlay DLL
  29627  Metacell demo refuses to run
  30904  SlingPlayer 1.3 crashes when streaming
  31546  PS3 gamepad analog sticks problem
  31656  Call of Cthulhu: DCoTE doesn't run
  31682  Sony PC Companion 2.10 crashes at the welcome screen
  32013  RPG Maker games crash - "Failed to load archive."
  32178  Crash in SlingPlayer 2's help file
  32558  Visual Studio 2010 (10.0) Express Edition web installer crashes due to winhttp reporting available chunk size > 32 KiB (heap corruption)
  32992  ARM port of "WabbitEMU" wants KERNEL32.dll.RtlLookupFunctionEntry
  33103  Nimbus crashes on the level selection screen (needs msvcp90.dll.?_Getcat@?$time_put@DV?$ostreambuf_iterator@DU?$char_traits@D@std@@@std@@@std@@SAIPAPBVfacet@locale@2@PBV42@@Z)
  33123  Naver LINE doesn't work with builtin msvcr90
  33201  DVDFab HD Decrypter fails to start with builtin msvcr90
  33213  Wine crashes if printing images
  33221  Visual Studio 2008 (9.0) Express Edition cannot compile with builtin msvcr90
  33228  Icebreakers demo: image missing in the launcher
  33244  Excel 2007 crash text to columns
  33254  sprintf doesn't respect _set_output_format for E format
  33262  Torchlight 2 does not start with builtin msvcr90
  33271  advapi32 OpenServiceW on non-existing service causes crash in SERV_OpenServiceW() if 'service' debug channel is used
  33276  Brothers Keeper program, after editing, you cannot stop the program.
  33278  Torchlight 2 hangs on menu with builtin msvcr90
  33279  Cygwin wants ntdll.dll.RtlConvertToAutoInheritSecurityObject

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

Changes since 1.5.26:

Akihiro Sagawa (3):
      msvcrt: Fix mbtowc_l in C locale.
      msvcrt/tests: Add locale dependent fgetwc tests.
      msvcrt/tests: Add unicode fgetwc tests.

Alexandre Julliard (19):
      winex11: Don't use uninitialized variables (Coverity).
      wrc: Add support for PNG icons.
      buildimage: Store large images as raw PNG files in icons.
      cmd: Add a 256x256 icon.
      iexplore: Add a 256x256 icon.
      msiexec: Add a 256x256 icon.
      notepad: Add a 256x256 icon.
      regedit: Add a 256x256 icon.
      taskmgr: Add a 256x256 icon.
      winecfg: Add a 256x256 icon.
      winefile: Add a 256x256 icon.
      winemine: Add a 256x256 icon.
      winetest: Add a 256x256 icon.
      winhlp32: Add a 256x256 icon.
      wordpad: Add a 256x256 icon.
      appwiz.cpl: Add a 256x256 icon.
      inetcpl.cpl: Add a 256x256 icon.
      user32: Add size checks when creating an icon from bitmap info.
      user32: Constify pointers that point to read-only file data.

Alistair Leslie-Hughes (1):
      iads.idl: Add missing interfaces.

Andrew Eikum (3):
      riched20: EM_FINDTEXT implementation should match richedit character type.
      mmdevapi: Don't free resources on PROCESS_DETACH.
      winmm: Shutdown the devices thread when all devices are closed.

André Hentschel (5):
      winedump: Recognize IMAGE_DEBUG_TYPE_CLSID.
      winedump: Dump exception info on ARM.
      ntdll: Add stubs for RtlAddFunctionTable and RtlDeleteFunctionTable on ARM.
      ntdll: Implement RtlLookupFunctionEntry on ARM.
      ntdll: Improve stub for FileFsAttributeInformation in NtQueryVolumeInformationFile.

Aric Stewart (3):
      usp10: Correct access to -1 index of array.
      user32: ImmProcessKey is only called on WM_KEYDOWN and if the message is being removed.
      imm32/tests: Show behavior with VK_PROCESSKEY in relation to PeekMessage.

Austin English (2):
      msvcp90/tests: Remove thiscall_thunk_retptr struct definitions.
      ntdll: Add a stub for RtlConvertToAutoInheritSecurityObject.

C.W. Betts (1):
      winemac: Implement getting and setting screen saver state on OS X.

Carlo Bramini (1):
      inetcpl.cpl: Minor fix, remove useless code.

Daniel Jelinski (2):
      comctl32/listview: Fix overwriting of item values.
      wined3d: Add NVidia GeForce 315M.

Detlef Riekenberg (1):
      kernel32/tests: Avoid test failure on multicore machines.

Dmitry Timoshkov (4):
      gdi32: Add support for disk-based metafiles to GetMetaFileBitsEx.
      windowscodecs: Make JPEG decoder fallback to 96 dpi resolution for density_unit == 0 case.
      ws2_32: Make _is_blocking() return server error code, so that callers can act appropriately.
      ole32: Fix an apartment reference count leak on error path.

Francois Gouget (1):
      winhttp: netconn_get_next_line() is not used anymore so remove it.

Frédéric Delanoy (1):
      wined3d: Add NVIDIA GeForce 410M.

Hans Leidekker (5):
      rpcrt4: Use the right port for https connections.
      winhttp: Add a read-ahead buffer to allow WinHttpQueryDataAvailable to return the right values in chunked mode.
      winhttp: Remove support for MSG_PEEK.
      urlmon: Fix handling of mailto URIs in CoInternetCombineUrlEx.
      mshtml: Don't append slashes to opaque protocol identifiers.

Huw Davies (6):
      riched20: We don't need to special case the PARAFORMAT2 fields since the masks have already been correctly sanitised. This fixes setting PFE_RTLPARA.
      riched20: Set the bidi base embedding level.
      riched20: Always write out the color table.
      gdi32: Printer drivers don't use the character extra spacing if lpdx is supplied.
      user32: Invalidate the listbox in LB_SETCOUNT.
      user32: Keep the combo listbox within the monitor's work area.

Jacek Caban (24):
      mshtml: Added IHTMLButtonElement::name implementation.
      mshtml: Added IHTMLButtonElement::name tests.
      jscript: Return buffer pointer separately from jsstr_t from jsstr_alloc_len.
      secur32: Pass whole schan_credentials struct to schannel backend implementations.
      jscript: Added jsstr_flatten helper and use it to access string buffer in date.c.
      jscript: Use jsstr_flatten to access string buffer in dispex.c.
      jscript: Use jsstr_flatten to access string buffer in jsutils.c.
      urlmon: Fixed handling URIs with implicit file scheme in CoInternetCombineUrlEx.
      mshtml: Use Uri_CREATE_ALLOW_IMPLICIT_FILE_SCHEME in CreateUri calls.
      jscript: Added to_flat_string helper and use it to access string buffer in activex.c.
      jscript: Use to_flat_string to access string buffer in array.c.
      jscript: Use helpers to access string buffer in engine.c.
      jscript: Use helpers to access string buffer in global.c.
      jscript: Use helpers to access string buffer in object.c.
      secur32: Added support for grbitEnabledProtocols in schan_AcquireClientCredentials.
      secur32: Added SECPKG_ATTR_SUPPORTED_PROTOCOLS implementation.
      secur32: Added SECPKG_ATTR_SUPPORTED_PROTOCOLS tests.
      mshtml: Added IHTMLButtonElement::disabled implementation.
      mshtml: Added IHTMLButtonElement::disabled tests.
      urlmon: Delay processing notifications from Read during MIME verification.
      libwine: Added tid debug channel support on native Windows builds.
      jscript: Added jsstr_extract helper and use it in String.charCodeAt implementation.
      jscript: Use helpers to access string buffer in some String functions.
      secur32: Take schannel backend capabilities into account when configuring enabled protocols.

Jactry Zeng (1):
      msvcrt: Added _wcsncoll and _wcsncoll_l implementation.

Jimmy Rentz (1):
      advapi32: Fix segfault in OpenService.

Ken Thomases (19):
      winemac: Rename create_cgimage_from_icon() to create_cgimage_from_icon_bitmaps().
      winemac: Move create_cgimage_from_icon_bitmaps() into new module, image.c.
      winemac: Set application Dock icon from first icon resource in process's .exe file.
      winemac: Implement rudimentary support for system tray icons as Mac status items.
      winemac: Allow Command-[Shift-]Tab to switch apps even when the displays are captured.
      winemac: Don't read an array at index -1 in debugstr_pf().
      winemac: Implement GetDeviceGammaRamp() and SetDeviceGammaRamp().
      winemac: Specify import and export functions explicitly in builtin_format_names[].
      winemac: Support CFSTR_SHELLURLW (UniformResourceLocator) clipboard format, mapped to public.url.
      explorer: Create desktop window hidden and only show it if it wins the race.
      winemac: Keep stable surface for layered windows using UpdateLayeredWindow().
      winemac: Use kCGLPFANoRecovery for accelerated pixel formats in create_context().
      winemac: Set the ordering of color modes explicitly to reduce chance of picking an odd one.
      winemac: Synthesize 8- and 16-bpp display modes if the system doesn't provide any.
      winemac: Don't override -[NSOpenGLContext clearDrawable], just use our own method.
      winemac: Add proper locking in macdrv_surface_set_region().
      winemac: Invalidate window shadow on every draw for transparent windows.
      winemac: Draw surface region rects separately instead of clipping one big draw.
      winemac: Track drawn surface region to reduce black flicker for new or resized windows.

Lucas Zawacki (1):
      dinput: Initialize all axis (from 0 to ABS_MAX) with -1.

Marcus Meissner (5):
      jscript: Check the correct heap return condition (Coverity).
      windowscodecs: Do not leak profile on errors (Coverity).
      jscript: Fix warning with older compilers.
      urlmon: Pass up error on error condition (Coverity).
      strmbase: Fixed user-after-free (Coverity).

Michael Stefaniuc (10):
      dplayx: Get rid of LPCLASSFACTORY and use a better name for the methods.
      dplayx: Fix QueryInterface, AddRef and Release methods for IClassFactory.
      dplayx: Fix DllGetClassObject().
      dplayx: Have the decency to support IUnknown in DirectPlay.
      dplayx/tests: Remove superfluous void pointer casts.
      dplayx/tests: Get rid of the LPDIRECTPLAY type usage.
      dplayx/tests: Add DirectPlay COM tests.
      dplayx: Get rid of the unused DirectPlay3Data / DirectPlay4Data fields.
      dplayx: Remove the duplicated IDirectPlayXImpl structs.
      dplayx: Get rid of the useless IDirectPlay{2,3} vtables.

Nikolay Sivov (8):
      msxml3: Embed user/password in uri used to create a moniker.
      xmllite: Partially implement value normalization for CDATA sections.
      hlink: Implement HlinkUpdateStackItem().
      hlink: Remove useless initializers.
      hlink: Add link stack to browser context.
      hlink: Implement IHlinkBrowseContext_GetHlink().
      hlink: Implement IHlinkBrowseContext_UpdateHlink().
      hlink: Implement IHlinkBrowseContext_SetCurrentHlink().

Phil Krylov (1):
      usp10: Support GPOS extension lookup subtables.

Piotr Caban (46):
      msvcp90: Added time_put class stub.
      msvcp90: Added time_put class implementation.
      msvcp90: Added collate facet to locale object.
      msvcp90: Added time_put facet to locale object.
      msvcp: Sync implementations.
      vbscript: Added IMatchCollection interface to MatchCollection2 object.
      vbscript: Added IMatch interface to Match2 object.
      msvcrt: Remove incorrect cast in fgetws function.
      msvcrt: Fixed fgetwc behavior on multibyte characters and Unicode files.
      msvcrt: Fixed copied buffer size in _ui64tow_s.
      wininet: Rename HASH_CACHEFILE_ENTRY to entry_hash_table.
      wininet: Rename URLCACHE_HEADER to urlcache_header.
      wininet: Rename STREAM_HANDLE to stream_handle.
      wininet: Rename URLCACHECONTAINER to cache_container.
      wininet: Rename URLCacheFindEntryHandle to find_handle.
      wininet: Rename URLCache_* functions to urlcache_*.
      wininet: Rename URLCacheContainers_* functions to cache_containers_*.
      wininet: Reorder functions to avoid urlcache_create_hash_table forward declaration.
      msvcp80: Fixed typo in spec file.
      msvcp: Match parameters list and architecture with function we're forwarding to.
      msvcrt: Match architecture with function we're forwarding to.
      msvcrt20: Match parameters list with function we're forwarding to.
      d3dx10: Match parameters list with function we're forwarding to.
      shell32: Match parameters list with function we're forwarding to.
      imagehlp: Match parameters list with function we're forwarding to.
      wmi: Match parameters list with function we're forwarding to.
      msvcrt: Added _set_output_format implementation.
      msvcrt: Added _set_output_format tests.
      msvcrt: Don't forward _wcsicmp to ntdll.
      msvcrt: Don't forward _wtoi to ntdll.
      msvcrt: Added _wtol_l implementation.
      msvcrt: Don't forward atoi to ntdll.
      msvcrt: Don't forward memset to ntdll.
      msvcrt: Don't forward strchr to ntdll.
      msvcrt: Don't forward strncmp to ntdll.
      msvcrt: Don't forward strncpy to ntdll.
      msvcrt: Don't forward towupper and towlower to ntdll.
      msvcrt: Don't forward wcsncpy to ntdll.
      msvcrt: Added _wcstoul_l implementation.
      msvcrt: Don't forward _getpid to kernel32.
      msvcrt: Sync spec files.
      msvcr90: Don't forward new and delete to msvcrt.
      msvcr90: Don't forward set_se_translator to msvcrt.
      msvcrt: Update spec file with functions added in newer version of the dll.
      msvcrt: Move fread_s function to msvcrt.
      kernel32: Fixed copy-paste error in IdnToUnicode.

Qian Hong (5):
      atl100/tests: Added class name test for AtlAxWinInit.
      atl100: Fixed register class names in AtlAxWinInit.
      atl100: Fixed register class types in AtlAxWinInit.
      atl80: Don't forward AtlAxWinInit to atl100.
      atl: Don't forward AtlAxWinInit to atl100.

--
Alexandre Julliard
julliard@winehq.org
