The Wine development release 1.7.9 is now available.

What's new in this release (see below for details):
  - Improved window moving/resizing in the Mac driver.
  - Some DirectDraw palette fixes.
  - Reduced code duplication between C++ runtime versions.
  - Various bug fixes.

The source is available from the following locations:

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

   8320  DirectInput joystick timestamps are wrong
  10844  Need for Speed 2 demo fails on startup, claiming "insufficient memory"
  11919  foobar2000 with foo_facets.dll: clicking popup menu item to display facets pane/view does nothing
  12503  Firefox with Oracle/Sun JRE 6/7 Java plugin fails the verification website of Java
  14740  Combat Arms 3.7 installer html-based UI layout is distorted
  14783  Cannot closed WMP 9 after minimizing.
  17715  Incorrect translation of D3D asm instruction "expp"
  17784  Runscape (web-based Java game) fails to terminate upon user request
  19959  Rome Total War loading screen has incorrect colors, rendered twice
  20354  Sony Vegas has encountered an Error: 'WIA-Manager could not be initialized'
  21054  Platform SDK 2003 web installer download unreliable
  21755  Heroes of Might and Magic V demo doesn't run
  23472  PokerStars crashes/UI remains unresponsive on startup
  23748  Need for Speed Shift demo: movies repeat until you press Enter
  23802  Need for Speed Shift demo: slow framerate on showroom floor
  24167  Boxes are not drawn in Double Dragon Forever
  24328  Filter Forge 2 demo fails to launch with error: <class XFW::OSCallError> ::GetScrollInfo failed. (ExeCryptor protection)
  24600  Saira: some fonts are messed up
  24819  Grand Ages: Rome installer: "Couldn't get the string value for the game tasks folder"
  25248  Brothers in Arms Road to Hill Demo needs msvcr71.__security_error_handler
  26541  Dragon Saga crashes randomly on startup (needs ntdll.DbgUiConvertStateChangeStructure, ntdll.KiRaiseUserExceptionDispatcher, ntdll.NtSetDebugFilterState stub exports)
  26668  Language macros are not defined during an .rc file compilation
  27850  Severe graphic issues in Need for Speed Hot Pursuit II
  28001  ExeCryptor protected apps/games complain with 'Clock manipulation detected!' (World War One Gold demo, Universal Mechanic)
  28440  Deus Ex Invisible War installer sometimes asks for non-existent disk 0
  28487  [Halo CE Trial] X Error bad value: XF86VidModeGetGammaRamp
  29290  Ubisoft - The Settlers: Rise of Cultures - disc authentication failure (SecuROM v7.37.0014)
  29550  PaintTool SAI installer complains about missing administrator rights (Wine defaults to NTFS for unknown fs type, FSCTL_GET_NTFS_VOLUME_DATA support needed)
  30717  Janetter crashes on startup (ISWbemLocator interface/stub missing)
  31039  Visual C++ 2005 Express SP1 install fails
  32762  Worms Forts Under Siege crashes on startup (Safedisc v4.00.000)
  33342  Blur: rear view upside down with backbuffer ORM
  33801  World of Warplanes Downloader crashed
  33895  Tomb Raider 2013 mouse does not work with the changes made to the winemac.drv in the version 1.5.30
  33963  WINE Wordpad crashes when selecting text from line end to line start
  34294  64-bit SMPlayer 0.8.6 installer claims "64-bit Windows Operating system is required to install this software"
  34327  Adobe Acrobat X Pro/Standard installer fails to extract files (insufficient directory permissions)
  34713  Treasure Adventure Game: dialogue text unreadable
  34902  Ableton Live 9 Suite v9.0.x (64-bit) crashes on startup, needs msvcr90.dll._vsprintf_l
  35058  Lattice Diamond 2.2 Active-HDL crashes due to unimplemented function atl90.dll.AtlComModuleRevokeClassObjects
  35067  Populous: The Beginning crashes on start in D3D mode
  35109  L.A. Noire 1.3 (Steam version) crashes on startup
  35122  NVIDIA CUDA Toolkit v5.5 installer fails, claiming "An unknown error has occurred." (failure to return 'url' property from DOMDocument)
  35144  NVIDIA CUDA Toolkit v5.5 installer fails (SetupDiGetINFClassW whitelists only 'Chicago', ignoring WINEPREFIX WinVer setting)
  35149  RSA SecurID token v411 installer hangs during processing of EULA (large RTF passed twice: window text and richedit streamin callback)
  35166  NVIDIA CUDA Toolkit v5.5 installer fails (NtQueryKey with KeyNameInformation info class unsupported on server side)
  35178  FL Studio 11.x 'DirectWave' plugin doesn't work (unsupported FSCTL_IS_VOLUME_MOUNTED ioctl)

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

Changes since 1.7.8:

Akihiro Sagawa (2):
      gdi32: Return ANSI character code as glyph index for bitmap fonts.
      gdi32: Use ANSI character code as glyph index for bitmap fonts.

Alexandre Bique (5):
      msvcrt: Implement _vsprintf_l.
      msvcrt: Implement missing sprintf functions.
      cmd: Update the string of the ver command.
      winealsa.drv: midiSeq must be protected by a critical section.
      ntdll: Fixme once for NtFlushInstructionCache().

Alexandre Julliard (27):
      make_xftmpl: Report errors in standard format.
      make_xftmpl: Allow the C define names to be specified in the source file with pragmas.
      makedep: Generate rules for .x template files.
      user32: Don't check for comctl32 class for integer atoms.
      makefiles: Explicitly specify source directory in Makefile dependencies.
      makefiles: Explicitly specify source directory in spec file dependencies.
      makefiles: Explicitly specify source directory in font dependencies.
      makefiles: Add separate clean targets even in the non-recursive case.
      makefiles: Generate rules from makedep for .in files.
      makefiles: Get rid of the VPATH directive.
      makefiles: Automatically create object sub-directories when needed.
      makefiles: Get rid of the no longer used PO_SRCS variables.
      makefiles: Automatically update the IDL_H_SRCS variable.
      makefiles: Don't use Make.rules in the top-level Makefile.
      makefiles: Generate individual .gitignore files corresponding to the build targets.
      makefiles: Generate the top-level .gitignore from configure.
      msvcp90: Add MSVCP_ prefix on more of the string iterator functions.
      msvcp71: Share the string.c implementation with msvcp90.
      msvcp71: Share the ios.c implementation with msvcp90.
      msvcp71: Share the locale.c implementation with msvcp90.
      makedep: Add support for reading source variables directly from the makefile.
      msvcp90: Always print stream sizes and offsets as long long to support various sizes.
      msvcp: Add macros to switch the string type used in the locale information structure.
      msvcp90: Set the thiscall parameter count according to the size of the stream size and offset types.
      msvcp100: Share the source code with msvcp90.
      msvcr: Add import libraries for all versions.
      msvcp: Import the corresponding version of the msvcr library.

Andrew Eikum (1):
      dinput: Fix logging typos.

Andrey Gusev (1):
      d3dx9_36: Add one more missing f suffix.

André Hentschel (3):
      winedbg: Improve formatting of context printing.
      ntdll/tests: Add ARM support for map protection tests.
      ntdll: Trace NtFlushInstructionCache on x86_64.

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

Austin English (4):
      dinput: Consistently use GetCurrentTime().
      ntdll: Return success for FSCTL_IS_VOLUME_MOUNTED ioctl.
      ntdll: Export a few more functions.
      server: Set process start time a bit later.

Detlef Riekenberg (1):
      tools: make_authors is no longer used.

Dmitry Timoshkov (10):
      msiexec: Make service thread do nothing by waiting for the kill event instead of using an empty loop.
      msiexec: MSI service should report SERVICE_STOPPED when appropriate.
      include: Add taskschd.idl.
      msiexec: Make sure that SERVICE_STOPPED status is really sent to SCM.
      crypt32: Add support for decoding serial number property in the certificate attributes.
      include: Add more Task Scheduler interface definitions.
      secur32/tests: Use LoadLibrary instead of GetModuleHandle to load advapi32.dll APIs.
      secur32/tests: Make sure that QueryContextAttributes(SECPKG_ATTR_STREAM_SIZES) succeeds.
      secur32/tests: Add a test for QueryCredentialsAttributes(SECPKG_CRED_ATTR_NAMES).
      include: Add more Task Scheduler interface definitions.

François Gouget (1):
      netapi32: Make access_mask_to_samba() static.

Frédéric Delanoy (32):
      ntdll: Use boolean type where appropriate.
      krnl386.exe16: Fix signature of DOSVM_Int16ReadChar.
      krnl386.exe16: Make VGA_[Set/Get]Mode return TRUE on success.
      krnl386.exe16: Use BOOL type where appropriate.
      krnl386.exe16: Use BOOL type where appropriate.
      wined3d: Use BOOL type where appropriate.
      winemac.drv: Use BOOL type where appropriate.
      dbghelp: Constify some character strings.
      advapi32: Constify a character string.
      krnl386.exe16: Use BOOL type where appropriate.
      inetcomm: Constify some character strings.
      joy.cpl: Constify some character strings.
      mscoree: Constify a character string.
      mshtml: Constify a character string.
      msi: Constify a character string.
      msxml3: Constify a character string.
      rpcrt4: Constify a character string.
      scrrun: Constify a character string.
      usp10: Constify a character string.
      setupapi: Constify a character string.
      wer: Constify a character string.
      winemac.drv: Constify a character string.
      wininet: Constify some character strings.
      xmllite: Constify some character strings.
      oleview: Constify a character string.
      regedit: Constify a character string.
      start: Constify a character string.
      winedbg: Constify some character strings.
      winefile: Constify some character strings.
      winetest: Constify a character string.
      widl: Constify a character string.
      advapi32/tests: Constify some character strings.

Hans Leidekker (6):
      wininet: Return an error when ensure_cred_handle fails.
      wininet: Separate socket destruction from destruction of the connection object.
      wininet: Always store the SSL context.
      ntdll: Report the latest service pack for 64-bit Windows XP.
      msi: Don't add text to the scrollable text control twice.
      advapi32: Avoid a crash when storing credentials on MacOS.

Henri Verbeet (15):
      wined3d: Remove the render target check in x11_copy_to_screen().
      wined3d: Recreate DIB sections in wined3d_surface_update_desc().
      d3d8/tests: Add a test for instructions taking a scalar source.
      wined3d: Fix the source swizzle for WINED3DSIH_EXP.
      wined3d: Fix the source swizzle for WINED3DSIH_EXPP.
      wined3d: Fix the source swizzle for WINED3DSIH_LOG and WINED3DSIH_LOGP.
      ddraw: Keep a reference to the palette in the surface.
      ddraw: Don't set the palette on attached backbuffers in ddraw_surface7_SetPalette().
      ddraw: Store the palette flags in the ddraw palette.
      ddraw: Set DDPCAPS_PRIMARYSURFACE when attaching a palette to the primary surface.
      ddraw: Unset the primary surface's palette when the palette is released.
      ddraw/tests: Add a test for palettes on primary surfaces.
      ddraw: Just set the palette caps in ddraw7_GetCaps().
      wined3d: Explicitly pass the palette size to wined3d_palette_create().
      wined3d: Get rid of unused palette flags.

Huw D. M. Davies (3):
      riched20: Ensure the cursors are correctly ordered in the case of a zero (logical) length selection bridging two runs.
      wbemprox: Add a partial implementation of Win32_PhysicalMedia.
      mshtml: Remove a double-Release.

Jacek Caban (2):
      oleaut32: Check OANOCACHE variable only on process attach.
      qcap: Added CLSID_AVICo stub implementation.

Jonathan Liu (2):
      winebuild: Use correct PATH separator on Windows.
      winebuild: Don't crash when dlltool or ar can't be found.

Ken Thomases (9):
      winemac: Don't change window order for SetFocus().
      winemac: Consolidate the logic for deciding if cursor clipping should be active.
      winemac: While a window is being dragged, suppress mouse events and disable cursor clipping and warping.
      winemac: Send WM_{ENTER, EXIT}SIZEMOVE before/after window dragging and run an internal event loop during.
      user32: Fix distance calculation for MONITOR_DEFAULTTONEAREST.
      user32: Respect monitor work area when sizing or moving a top-level window.
      user32: In WINPOS_SysCommandSizeMove(), fix constraining a point to a rect's right and bottom edges.
      winemac: When dragging an undecorated window, keep the title bar vertically within the work area.
      winemac: When ClipCursor() is called redundantly, don't warp the cursor or discard mouse move events.

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

Marcus Meissner (1):
      winedbg: Added missing breaks (Coverity).

Michael Stefaniuc (1):
      oleaut32: Cast to the correct type instead to void pointer.

Nikolay Sivov (5):
      ole32: Fix a memory leak caused by copy/pasted fragment (Coverity).
      atl: Implement AtlComModuleRevokeClassObjects().
      shell32: Don't call comctl32 on unload time if it wasn't used before.
      msxml3: Store document url in properties so every instance could see it.
      server: Return key name info for KeyNameInformation class.

Sebastian Lackner (4):
      crypt32: Set correct return value if CryptMemAlloc fails.
      ntdll: Fix incorrect value added to out->used in pf_output_stringA.
      ntdll: Handle error if RtlAllocateHeap fails in printf functions.
      ntdll: Don't do further calls to pf_output_stringA if previous call failed.

Stefan Dösinger (19):
      d3d9/tests: Test user memory with D3DPOOL_SCRATCH.
      d3d9: Volume and cube textures do not support user memory.
      d3d9: Buffers do not support user memory.
      d3d9: Implement user memory for offscreen plain surfaces.
      d3d9: shared_handle must be NULL in non-ex d3d9.
      wined3d: Support getdc with user memory.
      ddraw/tests: Test user memory and getdc interaction.
      wined3d: Use surface_get_memory in surface_download_data.
      wined3d: Call buffer_get_memory in surface_load_pbo.
      wined3d: Rename surface_load_pbo to surface_create_pbo.
      d3d9/tests: Test user memory and getdc interaction.
      ddraw: SetSurfaceDesc does not work on primaries.
      ddraw: Sysmem overlays are not allowed.
      ddraw/tests: Use correct ddraw COM macros.
      wined3d: Don't check for render target usage in wined3d_surface_set_mem.
      wined3d: Don't store user memory in allocatedMemory.
      libport: Include stdlib.h on MSVC for getenv.
      tools: Define getopt in make_xftmpl.c.
      d3dx9_36: Add missing f suffixes.

Stefan Leichter (2):
      setupapi: Support signature $Windows NT$ in SetupDiGetINFClassA/W too.
      setupapi/tests: Test signature $Windows NT$ in SetupDiGetINFClassA too.

--
Alexandre Julliard
julliard@winehq.org
