The Wine development release 1.7.33 is now available.

What's new in this release (see below for details):
  - Support for copy/paste commands in MSHTML.
  - Some more font support in DirectWrite.
  - Better handling for loss of focus in Direct3D windows.
  - Several more API Sets DLLs.
  - Various bug fixes.

The source is available from the following locations:

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

  23824  Starcraft II: Installer doesn't always launch
  26657  cannot paste text into wine iexplore.exe when browswing
  28937  YouSendIt shows blank GUI
  30471  powersim constructor 2.5 cannot save file (requires ole2.dll16.WRITECLASSSTG)
  32175  installer of PPTV: titlebar duplicated
  32438  winhttp:winhttp conformance test WinHttpGetProxyForUrl() failure
  33623  Unimplemented function ole2disp.dll16.VARIANTCHANGETYPEEX
  34207  Microsoft .NET Framework 2.0 service pack installers fail 'NGEN service version check' custom action (service not stopped before binary update)
  34888  OriginPro 8 freezes in a new installation of Wine (via MacPorts) after Lion->Mavericks upgrade
  34943  Visual C++ 2010 Express web installer exits silently during download of prerequisites
  35069  Patrol Falcon runs without sound
  35105  Ableton Live 9.1 crashes, needs MFReadWrite.dll
  36257  Gears of War fails on startup, reporting 'binkw32.dll: You cannot run the game with modified executable code. Please reinstall the game.'
  36472  Application ArdourXchange will not run in Wine
  36486  Age of Wushu: frequent display of in-game "Don't speed up!" dialog tip disrupts gameplay (Wine fails kernel32.GetTickCount API entry hook check)
  36569  TM.exe crashes at a certain time and native usp10 fixes it
  36642  IWinHttpRequest::Send returns immediately even when in synchronous mode
  36650  Winhttprequest authentication doesn't work anymore
  36938  Reason needs MFPlat.DLL and MFReadWrite.dll
  37159  valgrind shows a few uninitialized variables in riched20/tests/editor.c (test_EM_FINDWORDBREAK_A)
  37376  Visual C++ 2005 Express SP1 installer displays in French instead of English
  37424  Path of Exile: Graphical Glitches with GLSL Disabled
  37596  Sketchup 2015 fails on unimplemented function SHELL32.dll.SHAssocEnumHandlers
  37635  Explicit environment variables passed to spawn/exec are corrupted
  37653  valgrind shows a definite leak in comctl32/tests/imagelist.c
  37679  Puritan Hard Drive (PHD) KnowledgeBase Demo crashes on startup
  37690  Propellerhead Reason 8 needs kernel32.GetUserPreferredUILanguages
  37695  joySetCapture fails with uPeriod==0
  37704  K-Lite installer complains about regsvr32 version being wrong

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

Changes since 1.7.32:

Alexandre Julliard (2):
      taskschd/tests: Don't depend on the directory lookup order.
      kernel32/tests: Allow the parent directory to receive a modified event.

Alistair Leslie-Hughes (2):
      winetest: Skip over stub dll if detected.
      d3dx9: Make ID3DXFont_PreloadCharacters return S_OK.

Andrew Eikum (2):
      Revert "winmm: Increase mmdevapi buffer sizes.".
      dsound: Report buffer notifications in offset order.

André Hentschel (42):
      d3dx9_36/tests: Remove unused function (Clang).
      kernel32/tests: Remove unused strings (Clang).
      mshtml/tests: Remove unused variable (Clang).
      localspl: Remove unused strings (Clang).
      msi/tests: Remove unused variables (Clang).
      msi: Remove unused strings (Clang).
      ole32: Remove unused string (Clang).
      oleaut32: Remove unused code (Clang).
      msxml3/tests: Remove unused code (Clang).
      ole32/tests: Remove unused variable (Clang).
      quartz: Remove unused code (Clang).
      qmgr/tests: Remove unused code (Clang).
      oleaut32/tests: Remove unused code (Clang).
      fusion: Add implementation for CreateAssemblyCacheItem.
      winedbg: Remove unused code (Clang).
      wintrust: Remove unused variable (Clang).
      user32/tests: Remove unused variables (Clang).
      windowscodecs: Remove unused strings (Clang).
      wineoss.drv: Remove unused string (Clang).
      winex11.drv: Remove unused code (Clang).
      winspool.drv: Remove unused strings (Clang).
      kernel32/tests: Remove unused code (Clang).
      secur32: Declare debug channels only when needed (Clang).
      shell32: Remove unused string (Clang).
      shell32/tests: Remove unused variables (Clang).
      urlmon/tests: Remove unused strings (Clang).
      wininet: Remove unused strings (Clang).
      usp10: Remove unused function (Clang).
      sxs/tests: Remove unused string (Clang).
      winhttp/tests: Remove unused string (Clang).
      fusion/tests: Add tests for CreateAssemblyCacheItem.
      qmgr/tests: Remove unused macro.
      ntdll: Remove unused macros.
      widl: Fix compiler warnings with flag -Wunused-macros.
      dbghelp: Fix compiler warnings with flag -Wunused-macros.
      gdiplus: Fix compiler warnings with flag -Wunused-macros.
      atl: Fix compiler warnings with flag -Wunused-macros.
      msrle32: Remove superfluous defines.
      itss/tests: Fix compiler warnings with flag -Wunused-macros.
      iccvid: Fix compiler warnings with flag -Wunused-macros.
      gdiplus/tests: Fix compiler warnings with flag -Wunused-macros.
      kernel32: Make GetTickCount and GetTickCount64 hotpatchable.

Austin English (5):
      ole2disp: Add a stub for VariantChangeTypeEx.
      ole2: Add a stub for WriteClassStg.
      mfplat: Add stub dll.
      kernel32: Add a stub for GetUserPreferredUILanguages.
      mfreadwrite: Add stub dll.

Bruno Jesus (9):
      ws2_32/tests: Add SO_BSP_STATE tests.
      ws2_32: Filter unset bits when argument is smaller than 32 bits.
      ws2_32: Implement getsockopt(SO_BSP_STATE).
      winmm: Handle NULL parameter in joyGetPos/joyGetPosEx.
      winmm: Allow calling joyReleaseCapture multiple times.
      winmm: The dwSize paramater of JOYINFOEX must be set correctly.
      winmm: Allow any period value for setJoyCapture.
      winmm: Handle invalid threshold values in joySetThreshold.
      winmm/tests: Add joystick tests.

Erich Hoover (1):
      ddraw: Fix inverted logic for enumerating secondary devices.

François Gouget (4):
      Assorted spelling fixes.
      msvcr120/tests: Make test_lconv*() static.
      dwrite: Add a trailing '\n' to a FIXME().
      dwrite: Fix compilation on systems that don't support nameless unions.

Gerald Pfeifer (1):
      wordpad: Check for array index before using it in registry_set_filelist.

Hans Leidekker (11):
      msi: Properly handle service control events in Start/StopService.
      cryptnet: Add support for base64 encoded certificates, CRLs and CTLs in CryptRetrieveObjectByUrl.
      winhttp/tests: Handle more potential connection failures.
      winhttp: Enable automatic authentication by default in the request object.
      winhttp: Fill the read buffer first in drain_content.
      winhttp: Convert the async parameter to VT_BOOL if necessary in IWinHttpRequest::Open.
      winhttp: Don't report data pending in the socket.
      winhttp: Double the size of the internal read buffer.
      winhttp: Check the return value of send_request.
      winhttp: Don't try to read data when the server response is HTTP_STATUS_NO_CONTENT or HTTP_STATUS_NOT_MODIFIED.
      winhttp/tests: Close the connection immediately after authentication.

Henri Verbeet (15):
      wined3d: Assign the name to the correct signature in pixelshader_init().
      wined3d: Unbind shader resource views in state_unbind_resources().
      wined3d: Keep a reference to the resource in shader resource views.
      d2d1: Make "transform" in d2d_d3d_render_target_Clear() const.
      d2d1: Implement d2d_d3d_render_target_CreateBitmapBrush().
      wined3d: Validate register indices for WINED3DSIH_DCL instructions.
      wined3d: Store resource types instead of sampler types in struct wined3d_shader_reg_maps.
      wined3d: Handle SM4 resource declarations.
      wined3d: Record the data type of shader resources.
      wined3d: Take the resource data type into account in shader_glsl_gen_sample_code().
      wined3d: Use __builtin_clz() in wined3d_log2i() when available.
      ddraw: Use wined3d_log2i() to calculate the level count in ddraw_surface_create().
      d3d8: Calculate texture levels in d3d8 instead of wined3d.
      d3d9: Calculate texture levels in d3d9 instead of wined3d.
      d3d10core: Calculate the texture level count before texture creation.

Iván Matellanes (1):
      msvcrt: Call the _nolock variant when the file is already locked.

Jacek Caban (12):
      mshtml: Added "indent" command support to execCommand.
      mshtml: Added support for flag 2 in getAttribute.
      mshtml: Allow setting fontWeight to empty string.
      mshtml: Mark mousedown event as cancelable.
      mshtml: Added support for copy, paste and cut commands in execCommand.
      mshtml: Added support for IDM_PASTE command in browser mode.
      mshtml: Added support for IDM_CUT command in browser mode.
      mshtml: Pass HTMLPluginContainer to create_plugin_host.
      mshtml: Create ActiveX object inside create_plugin_host.
      mshtml: Do more initialization in create_plugin_host.
      mshtml: Added IHTMLObjectElement2::put_classid semi-stub implementation.
      dxgi1_2.idl: Added IDXGISwapChain1 declaration.

Joachim Priesner (1):
      ws2_32: Use qsort() to order routes by metric in WS_get_local_ips.

Marc Bessières (1):
      riched20/tests: Use SendMessageA with char buffer (Valgrind).

Marcus Meissner (6):
      dwrite: Avoid leaking filemapping (Coverity).
      dwrite: Remove unused hresult assignment (Coverity).
      dwrite: Initialize a variable (Coverity).
      oleacc: Free the mapping on error (Coverity).
      server: Initialize the _len parts to 0 (Coverity).
      ntoskrnl.exe: Added IoBuildSynchronousFsdRequest and IoGetAttachedDevice stubs.

Mark Harmstone (2):
      mmdevapi: Allow GetPropValue function in audio drivers.
      winealsa: Implement GetPropValue and return device path.

Martin Storsjo (20):
      api-ms-win-core-file-l2-1-1: Add stub dll.
      api-ms-win-core-sysinfo-l1-2-1: Add stub dll.
      api-ms-win-core-processthreads-l1-1-2: Add stub dll.
      api-ms-win-core-winrt-l1-1-0: Add stub dll.
      api-ms-win-core-fibers-l1-1-1: Add stub dll.
      api-ms-win-core-file-l2-1-0: Add stub dll.
      api-ms-win-core-localization-l1-2-1: Add stub dll.
      api-ms-win-core-datetime-l1-1-1: Add stub dll.
      api-ms-win-core-errorhandling-l1-1-2: Add stub dll.
      msvcr120: Implement the _vacopy function.
      msvcr120: Implement more C99 math functions.
      wrc: Declare the data buffer as unsigned char.
      api-ms-win-core-winrt-string-l1-1-0: Fix a typo in a function stub name.
      msvcr120: Implement the _dclass/_fdclass/_ldclass functions.
      combase: Add stub dll.
      include: Add a roapi.h header.
      api-ms-win-core-winrt-l1-1-0: Move implementations into combase.
      msvcr120_app: Add forwarding dll.
      include: Add hstring.idl and winstring.h.
      msvcp120_app: Add forwarding dll.

Michael Müller (4):
      api-ms-win-core-fibers-l1-1-0: Add dll.
      api-ms-win-core-datetime-l1-1-0: Add dll.
      api-ms-win-core-xstate-l2-1-0: Add stub dll.
      api-ms-win-core-winrt-error-l1-1-1: Add stub dll.

Michael Stefaniuc (5):
      joy.cpl: Avoid pointers to out of scope variables (PVS-Studio).
      comctl32: Merge two if blocks with identical condition (PVS-Studio).
      jscript: Merge two if blocks with identical condition (PVS-Studio).
      comctl32: Remove a stray unused GetFocus() statement (PVS-Studio).
      msi: Remove no-op toupperW() statement (PVS-Studio).

Nikolay Sivov (11):
      comctl32/tests: Fix imagelist leak (Valgrind).
      dwrite: Make fonts installed in Fonts dir accessible through system collection.
      shell32: Added a stub for SHAssocEnumHandlers().
      dwrite: Set font style to oblique when oblique simulation, was requested.
      dwrite: Partially implement GetDesignGlyphMetrics().
      dwrite: Implement IsMonospacedFont().
      dwrite: Implement GetDesignGlyphAdvances().
      dwrite: Update to IDWriteFactory2.
      dwrite: Block creation of unsupported face types.
      regsvr32: Update program version.
      dwrite_2.idl: Protect from D3DCOLORVALUE redefinition.

Piotr Caban (6):
      msvcrt: Call CreateProcess with CREATE_UNICODE_ENVIRONMENT flag in exec functions family.
      msvcrt: Use fd critical section in _eof.
      msvcrt: Use fd critical section in _locking.
      msvcrt: Use fd critical section in _lseeki64.
      msvcrt: Use fd critical section in _chsize_s.
      msvcrt: Use fd critical section in _fstat64.

Qian Hong (1):
      usp10: Make sure fallbackFont is NULL terminated.

Sebastian Lackner (3):
      ws2_32/tests: Fix several copy and paste errors.
      wintrust: Reset data->pWintrustData->u.pFile->hFile after closing handle.
      ws2_32: Improve implementation of get_poll_results.

Stefan Dösinger (11):
      d3d9: Refuse to reset a lost device.
      d3d8: Refuse to reset a lost device.
      wined3d: Add a comment about reset during focus change.
      d3d9/tests: Test focus loss message filtering.
      d3d9/tests: Test focus loss message filtering in d3d9ex.
      d3d8/tests: Test focus loss message filtering.
      d3d9/test: Test WM_SYSCOMMAND handling.
      d3d8/tests: Test WM_SYSCOMMAND handling.
      ddraw/tests: Fix window deactivation in test_coop_level_activateapp.
      ddraw/tests: Test WM_SYSCOMMAND handling.
      wined3d: Filter messages generated by focus handling.

Stefan Leichter (1):
      kernel32: Add stubs for CreateSymbolicLinkA/W.

Vincent Povirk (3):
      cabinet/tests: Add test for calling FDIIsCabinet with hf == 0.
      cabinet: Accept hf == 0 in FDIIsCabinet.
      wbemprox: Implement Win32_OperatingSystem::TotalVisibleMemorySize.

Yifu Wang (1):
      msvcr120: Added wchar_t* fields to struct MSVCRT_lconv.

Łukasz Wojniłowicz (1):
      po: Update Polish translation.

--
Alexandre Julliard
julliard@winehq.org
