The Wine development release 1.7.28 is now available.

What's new in this release (see below for details):
  - Support for conditional compilation in JavaScript.
  - Bidirectional text support in DirectWrite.
  - Stubs for DirectPlay Voice support.
  - Various bug fixes.

The source is available from the following locations:

  http://prdownloads.sourceforge.net/wine/wine-1.7.28.tar.bz2
  http://mirrors.ibiblio.org/wine/source/1.7/wine-1.7.28.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.7.28 (total 21):

  20799  (not a Wine bug) Multiple games using OpenAL freezes/crashes during the startup
  22469  FileMaker Pro 11: Text is upside down when builtin gdiplus is used
  22987  Irfan view - "Can't paste image from clipboard !"
  23667  CDBurnerXP 3.0 desktop shortcut uses a generic wine glass icon
  25705  Action buttons in Lemmings could not be clicked
  25715  native dxdiag crashes with builtin quartz
  26738  Steam crashes using ALSA
  27978  QuickBooks Premier 2011 crash on start
  31043  Segfault when trying to run Direct3D or OpenGL apps
  31378  Built in IE - U-Haul dealer network Point of Sale page unusable
  31815  Rhapsody 4.0 crashes on startup
  34923  SolidWorks 2014 installer needs ieframe IWebBrowser2::Refresh2
  35019  ToDoList 6.9.b12 (MFC app) crashes when deleting a task
  35121  Multiple applications/games fail to start with WinVer set to 'Windows 7' (FindFirstFileExW needs FIND_FIRST_EX_LARGE_FETCH support)(FotoQuelle Fotosoftware v4.13, QT5)
  37198  Pale Moon Portable 24.7.x fails on startup, reporting "Couldn't load XPCOM" (needs msvcp110.dll '?_BADOFF@std@@3_JB' also exported for 32-bit arch)
  37221  biet-o-matic 2.14.12: Crashes when past eBay item number with context menu (right click, past)
  37290  Baltie educational programming language does not run.
  37304  Different paper size enumerations between cloned printers
  37305  ApexDC fails to do file operations (file:FindFirstFileExW)
  37319  [Ubuntu 12.04][Wine.1.4.x/1.6.x] Steam - can't purchase games due to an invalid SSL cerificate
  37339  Excel 2010 Cant save or open files with Pivot Tables

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

Changes since 1.7.27:

Akihiro Sagawa (3):
      ntdll/tests: Remove duplicated entry.
      ntdll/tests: Add KeyNameInformation tests.
      po: Update Japanese translation.

Alexandre Julliard (2):
      secur32/tests: Update test for the new certificate on winehq.org.
      kernel32/tests: Fix overlapped status checks for 64-bit.

Alistair Leslie-Hughes (7):
      dpvoice: Add IDirectPlayVoiceClient Support.
      dpvoice: Add IDirectPlayVoiceServer support.
      dpvoice: Add DirectPlay Voice test.
      dpvoice: Add IDirectPlayVoiceTest stub interface.
      dpnet: Implement IDirectPlay8Address AddComponent.
      dpnet: Show SetSP adds a component.
      dpnet: Implement IDirectPlay8Address Duplicate.

Andreas Fuchs (1):
      kernel32: Ignore flags on FindFirstFileExW.

Andrei Slăvoiu (2):
      wined3d: Adjust the Intel fallbacks to better reflect reality.
      wined3d: Pass the capabilities directly to d3d_level_from_gl_info and rename it to d3d_level_from_caps.

André Hentschel (5):
      d3d10core: Fix out of bounds access (Coverity).
      dwrite: Check correct variable (Coverity).
      ntdll: Use a dynamic buffer for change notification data.
      winegcc: Respect TMPDIR environment variable.
      winemenubuilder: Respect TMPDIR environment variable.

François Gouget (3):
      dpnet/tests: Add a trailing '\n' to some ok() calls.
      d2d1: Add a trailing '\n' to a FIXME().
      Assorted spelling fixes.

Frédéric Delanoy (2):
      po: Update French translation.
      Assorted spelling/grammar fixes.

Hans Leidekker (3):
      wininet/tests: Update test data to match the new certificate on winehq.org.
      wininet: Protect the request headers array with a critical section.
      msi: Include the terminating null in the buffer size for decoded stream names.

Hao Peng (1):
      mshtml: Add IHTMLAnchorElement::search propertyimplementation.

Henri Verbeet (23):
      d3d8: Get rid of the format switching code in d3d8_device_CopyRects().
      ddraw: Move the pitch / linear size validation from ddraw_surface_init() to ddraw_surface_create().
      ddraw: Set user memory in ddraw_surface_create() instead of ddraw_surface_init().
      wined3d: Replace wined3d_surface_update_desc() with wined3d_texture_update_desc().
      wined3d: Get rid of SFLAG_DONOTFREE.
      wined3d: Use wined3d_texture_set_color_key() to manipulate the color-key in surface_blt_special().
      wined3d: Use a lookup table in d3dfmt_get_conv().
      wined3d: Get rid of the "use_texturing" parameter to d3dfmt_get_conv().
      wined3d: Pass a texture to d3dfmt_get_conv().
      wined3d: Use a more consistent naming for wined3d_conversion_type elements.
      wined3d: Get rid of the WINED3D_CT_NONE case in d3dfmt_convert_surface().
      wined3d: Fix the pitch handling in the no-palette WINED3D_CT_P8 case.
      wined3d: Convert to WINED3DFMT_B8G8R8A8_UNORM for WINED3D_CT_P8.
      wined3d: Convert to WINED3DFMT_B5G5R5A1_UNORM for WINED3D_CT_CK_B5G6R5.
      wined3d: Convert to WINED3DFMT_B8G8R8A8_UNORM for WINED3D_CT_CK_B8G8R8.
      wined3d: Convert to WINED3DFMT_B8G8R8A8_UNORM for WINED3D_CT_CK_B8G8R8X8.
      wined3d: Just store the wined3d format in color_key_info[].
      wined3d: Introduce a separate function for WINED3D_CT_P8.
      wined3d: Introduce a separate function for WINED3D_CT_CK_B5G6R5.
      wined3d: Introduce a separate function for WINED3D_CT_CK_B5G5R5X1.
      wined3d: Introduce a separate function for WINED3D_CT_CK_B8G8R8.
      wined3d: Introduce a separate function for WINED3D_CT_CK_B8G8R8X8.
      wined3d: Introduce a separate function for WINED3D_CT_CK_B8G8R8A8.

Jacek Caban (40):
      vbscript: Don't try to convert int to short in return_int.
      mshtml: Don't share nsform reference with nsnode.
      mshtml: Don't share nsinput reference with nsnode.
      mshtml: Don't share nsframe and nsiframe reference with nsnode.
      mshtml: Don't share nsstyle reference with nsnode.
      mshtml: Don't share nslink reference with nsnode.
      mshtml: Don't share nsanchor reference with nsnode.
      mshtml: Don't share nsselect reference with nsnode.
      mshtml: Don't share nsoption reference with nsnode.
      mshtml: Don't share nstextarea reference with nsnode.
      mshtml: Don't share nstable reference with nsnode.
      mshtml: Don't share nscell reference with nsnode.
      mshtml: Don't share nsobject reference with nsnode.
      ieframe: Added partial Refresh2 implementation.
      mshtml: Don't share nsimg reference with nsnode.
      mshtml: Don't share nsscript reference with nsnode.
      mshtml: Don't share nsrow reference with nsnode.
      mshtml: Don't share nsbutton reference with nsnode.
      mshtml: Use UTF-8 encoding in NewURI by default.
      mshtml: Use proper type for text node in exec_hyperlink.
      mshtml: Don't assume that nsIDOMHTMLElement inherits from nsIDOMNode in HTMLDocument_createStyleSheet.
      mshtml: Removed no longer needed assert.
      jscript: Move parser related declarations to separated header.
      jscript: Return double from parse_numeric_literal and parse_double_literal.
      jscript: Added new ccval_t type for CC variable values.
      jscript: Moved skipping spaces to separated function.
      jscript: Added conditional compilation @set support.
      jscript/tests: Added @set tests.
      jscript: Added support for conditional compilation @if/@elif/@else/@end.
      jscript: Added tests for @if/@elif/@else/@end.
      jscript: Implicitly turn CC on for @set instruction.
      jscript: Implicitly turn CC on for @if instruction.
      jscript: Added support for '-' CC expression.
      mshtml: Don't assume that nsIDOMHTML*Element interfaces inherit from nsIDOMHTMLElement in htmlinput.c.
      mshtml: Don't assume that nsIDOMHTML*Element interfaces inherit from nsIDOMHTMLElement in htmloption.c.
      mshtml: Don't assume that nsIDOMHTML*Element interfaces inherit from nsIDOMHTMLElement in htmlscript.c.
      mshtml: Don't assume that nsIDOMHTMLScriptElement inherits from nsIDOMHTMLElement in get_script_guid.
      jscript: Added parser rules for missing expressions.
      jscript: Added support for '==' CC expression.
      jscript: Added support for relational CC expressions.

Jactry Zeng (1):
      riched20: Set editor->reOle to NULL when IRichEditOle is released.

Johannes Brandstätter (1):
      d3d10core: Add support for map_type flags D3D10_MAP_READ, D3D10_MAP_WRITE_NO_OVERWRITE and D3D10_MAP_DISCARD.

Joris van der Wel (1):
      server: A new function "set_sd_defaults_from_token".

Ken Thomases (2):
      winemac: Don't invalidate the window shadow on every draw if it's merely shaped and not color-keyed or using per-pixel alpha.
      winemac: Properly ignore attempts to set a window's shape to its current shape.

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

Marcus Meissner (6):
      dwrite: Use correct variable (Coverity).
      dwrite: Fixed NULL ptr deref before check (Coverity).
      dwrite: Avoid NULL ptr dereference (Coverity).
      wbemprox: Fixed a memory leak in get_sd (Coverity).
      dwrite: Check correct variable for NULL (Coverity).
      dxgi: Added missing unlock (Coverity).

Nikolay Sivov (12):
      usp10: Use proper type for return value.
      dwrite: Use proper type for return value.
      dwrite: Implement itemization by script id using Unicode.org data.
      include: Update dwrite headers to match SDK 8.1.
      dwrite: Update to IDWriteTextAnalyzer2.
      dwrite: Allow underscores in script names.
      dwrite: Implement GetScriptProperties().
      dwrite: Implement GetTextComplexity().
      po: Update Russian translation.
      dwrite: Implement AnalyzeBidi().
      usp10: Remove comment that's no longer true.
      dwrite: Implement CreateNumberSubstitution().

Piotr Caban (4):
      user32: Return early on child windows in DrawMenuBar.
      user32/tests: Add initial WindowFromPoint tests.
      user32/tests: Add cross-process WindowFromPoint tests.
      user32/tests: Add cross-process mouse click test.

Qian Hong (5):
      mshtml: Using UTF-8 as default charset in bind_mon_to_wstr.
      mshtml: Don't pass NULL string pointer to jscript engine.
      appwiz.cpl: Fixed typo.
      winmm: Also initialize sound device thread in mixerGetControlDetails.
      jscript: Ignore BOM mark in next_token.

Ralf Habacker (1):
      wineps.drv: For each printer start page size and source index with the same value.

Sebastian Lackner (8):
      msvcp110: Export ?_BADOFF@std@@3_JB on both i386 and win64.
      shlwapi/tests: Add SH*Shared inter-process tests.
      shlwapi: Fixed swapped argument order in SHLWAPI_DupSharedHandle command.
      kernel32/tests: Add tests for FindFirstFileExA with FIND_FIRST_EX_LARGE_FETCH flag.
      kernel32/tests: Add tests for FindFirstFileExA with FIND_FIRST_EX_CASE_SENSITIVE flag.
      shlwapi/tests: Add test for SHMapHandle.
      shlwapi: Fix swapped argument order in SHMapHandle.
      shlwapi: Remove unnecessary internal function SHLWAPI_DupSharedHandle.

Shuai Meng (1):
      vbscript: Implemented RGB.

Stefan Dösinger (1):
      d3d8: Return the correct value in CreateAdditionalSwapChain.

Thomas Faber (1):
      wined3d: Use correct FXCAPS constant in wined3d_get_device_caps.

Vincent Povirk (1):
      gdiplus: Process a row instead of a column in inner conversion loop.

--
Alexandre Julliard
julliard@winehq.org
