The Wine development release 1.7.43 is now available.

What's new in this release (see below for details):
  - Improved support for Shell Browser windows.
  - Some more API Sets libraries. 
  - Read/write operations support with built-in devices.
  - Major Catalan translation update.
  - Support for WoW64 mode on ARM64.
  - Various bug fixes.

The source is available from the following locations:

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

   8330  WinBoard console window stops working after 32767 chars
  25885  Legions Overdrive: crashes when starting a game
  25892  Mini Racing Online: Cars are invisible
  29337  Starcraft Campaign Editor shows Wine icon instead of map icon
  30628  Battlefield Bad Company 2 audio doesn't work in-game
  31489  C&C - Red Alert 2 can not enter campaign when fullscreen
  31726  JScript Date.parse doesn't work
  34351  AsystentCRM installer needs Shell folder object Folder::ParseName method implemented
  34560  Finale/Finale Notepad 2012: Operations are painfully slow
  34566  qq international 2.0 crashes with native riched20 and builtin ctf
  34814  wineconsole truncates argument string in 256 bytes
  34862  Mars: War Logs crashes at start
  35831  Age of Mythology games with more than 2 players don't work (interface bound sockets do not return the correct address in getsockname)
  36408  Child of Light 1.0 Demo Steam exit after launch
  37013  Evernote 5.5.x - Options window is too small and unresizeable
  37838  Chessmaster 10/11: Absent chess piece lighting with Direct3D
  38241  Open General crashes when exiting.
  38358  Chessmaster X/XI dynamic lighting no longer present in wine-1.7.40 (regression)
  38399  Voobly fails to connect to lobby (threaded app close socket in the middle of other thread select call)
  38454  valgrind shows several uninitialized variables in dlls/winmm/tests/wave.c
  38532  Uru: Ages Beyond Myst demo (Myst Online: Uru Live) hangs with a black screen
  38547  Tropico 2: rendering issues (pink rectangles)
  38548  Strong Bad's Cool Game: missing music and voices
  38556  AsystentCRM installer needs Shell folder object FolderItem::Verbs method implemented
  38557  Wings of Vi: Hangs when window is moved.
  38569  PES2015 won't connect to online services (GetIpAddrTable needs to fill wType parameter)

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

Changes since 1.7.42:

Aaryaman Vasishta (3):
      d3drm: Fix IDirect3DRMDevice declaration.
      d3drm: Fix refcounting for IDirect3DRM{1-3}.
      d3drm/tests: Remove TODO's from test_qi and TODO field from test tables.

Akihiro Sagawa (3):
      winmm/tests: Fix uninitialized memory access (Valgrind).
      mciqtz32: Guarantee that CoInitialize and CoUninitialize run on the same thread.
      mciqtz32: Simplify null parameter checks.

Alex Henrie (10):
      wineps: Make printer setup dialog caption translatable.
      po: Update Catalan translation.
      po: Follow GNU specification for Language and Language-Team headers.
      po: Update Catalan translation.
      user32: Do not return the class icon when ICON_SMALL2 is requested.
      user32: Use the window class icon if the MDI child doesn't have its own.
      user32: Load hIconSmIntern from the best-matching resource.
      user32: Free internal icon when freeing the rest of the window class.
      user32: Simplify GCLP_HICON and GCLP_HICONSM boolean logic.
      user32: Fall back to downscaling the big icon for ICON_SMALL2.

Alexandre Julliard (24):
      winex11: Remove unnecessary CLIPBOARDINFO structure.
      server: Rename ioctl to irp to allow supporting various types of I/O requests.
      server: Retrieve ioctl data directly from the request.
      server: Return irp size separately from the output data.
      server: Add read and write fd member functions.
      server: Add an async structure to the flush request to follow the common pattern.
      server: Add read and write requests on file objects.
      server: Implement read and write requests for device files.
      server: Add a common structure to store irp parameters.
      server: Add a trace for the supported socket ioctl.
      server: Allow cancelling async I/O for all object types.
      server: Make the APC callback optional in async calls.
      server: Implement flush requests for device files.
      ntdll: Fallback to server calls for read and write on objects without a file descriptor.
      ntoskrnl: Flesh out IoBuildSynchronousFsdRequest implementation.
      ntoskrnl: Add support for read and write requests.
      ntoskrnl: Add support for flush requests.
      ntdll: Don't run user APCs in NtCancelIoFile.
      ntdll: Fix handling of async cancellation for directory changes.
      user32/tests: Update some todos for changed test failure behavior.
      server: Make async objects waitable.
      server: Use the async queue for pipe flush requests.
      shell32/tests: Avoid duplicate const.
      jscript: Avoid UINT32_MAX.

Andrew Eikum (4):
      mmdevapi: Always use 64-bit registry keys.
      kernel32: Support extended pathnames in GetShortPathName.
      dsound: Don't set very low limits on HW buffers.
      kernel32: Implement CheckNameLegalDOS8Dot3.

André Hentschel (4):
      winedump: Add ARM64 string.
      server: Allow 32-bit connections on ARM64.
      ntdll: Enable wow64 on ARM64.
      winebuild: Use a 64k page size on ARM64.

Aric Stewart (2):
      setupapi: Restore close brace before using guid string as reg key.
      server: Fixup input windows on thread_detach.

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

Bruno Jesus (4):
      iphlpapi: Set MIB_IPADDR_PRIMARY as wType for GetIpAddrTable entries.
      ws2_32/tests: Fix a couple of wrong traces.
      ws2_32: Trace connect() success.
      iphlpapi/tests: Improve IcmpSendEcho trace.

François Gouget (12):
      ddraw/tests: Fix compilation on systems that don't support nameless union.
      wined3d: Add a trailing '\n' to a generated shader line.
      ole32: Fix some storage32 comments.
      ole32: Reorder storage32 functions to avoid forward declarations.
      ole32: Make some storage32 functions static.
      urlmon/tests: Silence some protocol traces that generate too many lines.
      gdi32/tests: Silence some font traces that generate too many lines.
      ddraw/tests: Silence some ddrawmodes traces that generate too many lines.
      kernel32/tests: Silence some loader and locale traces that generate too many lines.
      shlwapi/tests: Silence some istream traces that generate too many lines.
      user32/tests: Silence some clipboard traces that generate too many lines.
      ole32/tests: Silence some clipboard traces that generate too many lines.

Grazvydas Ignotas (3):
      port.h: Make use of compiler support for 32bit atomic ops.
      port.h: Make use of compiler support for 64bit atomic ops.
      port.h: Make use of compiler support for pointer atomic ops.

Hans Leidekker (3):
      rpcrt4: Use the Unicode version of InternetReadFileEx.
      rpcrt4: Also set the Content-Length header explicitly on the in pipe request.
      rpcrt4: Allow all HTTP read requests to be cancelled.

Henri Verbeet (2):
      d3drm: Also validate face indices against the vertex count in load_mesh_data() (Valgrind).
      d3drm/tests: Release the material after a GetGroupMaterial() call in test_MeshBuilder() (Valgrind).

Hugh McMaster (1):
      cmd.exe: Remove redundant call to SetConsoleMode.

Huw D. M. Davies (2):
      ntdll/tests: Wait for pending file operations to complete.
      ntdll/tests: Fix incorrect prototype.

Jacek Caban (13):
      mshtml: Split getAttribute into helper function and use it in IHTMLDOMAttribute::get_nodeValue implementation.
      mshtml: Added IHTMLDOMAttribute2::get_value implementation.
      mshtml: Added IHTMLEventObj::get_returnValue implementation.
      mshtml: Added new EventTarget struct representing event targets.
      mshtml: Moved getting event target data pointer to DispatchEx vtbl.
      mshtml: Make HTMLInnerWindow inherit from EventTarget.
      mshtml: Pass EventTarget to set_event_handler.
      mshtml: Pass EventTarget to get_event_handler.
      mshtml: Pass EventTarget to attach_event.
      mshtml: Pass EventTarget to detach_event.
      mshtml: Pass EventTarget to update_cp_events.
      mshtml: Get rid of get_node_event_target.
      mshtml: Initialize output value before passing it to VariantCopy.

Josh DuBois (3):
      ntdll: Avoid movs between rcx, rdx and xmm registers.
      oleaut32: Avoid movs between rcx, rdx and xmm registers.
      rpcrt4: Avoid movs between rcx, rdx and xmm registers.

Ken Thomases (2):
      configure: Set the page zero size to 4KiB on OS X to fix building 64-bit Wine.
      winemac: Don't process WM_EXITSIZEMOVE through filters in macdrv_window_drag_begin().

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

Marcus Meissner (5):
      dmime: Check return code of create_dmgraph (Coverity).
      wined3d: Remove superflous check (Coverity).
      oleaut32: Avoid a library handle leak (Coverity).
      winedbg: Initialize type.module (Coverity).
      winedbg: Close filehandle on one exit branch (Coverity).

Mark Harmstone (2):
      kernel32: Add GetFileMUIInfo stub.
      uxtheme: Stub out buffered animation functions.

Martin Storsjo (13):
      api-ms-win-core-debug-l1-1-0: Add stub dll.
      api-ms-win-core-errorhandling-l1-1-0: Add stub dll.
      api-ms-win-core-file-l1-1-0: Add stub dll.
      api-ms-win-core-heap-l1-1-0: Add stub dll.
      api-ms-win-core-interlocked-l1-1-0: Add stub dll.
      api-ms-win-core-libraryloader-l1-1-0: Add stub dll.
      api-ms-win-core-memory-l1-1-0: Add stub dll.
      api-ms-win-core-namedpipe-l1-1-0: Add stub dll.
      api-ms-win-core-processenvironment-l1-1-0: Add stub dll.
      api-ms-win-core-rtlsupport-l1-1-0: Add stub dll.
      api-ms-win-core-synch-l1-1-0: Add stub dll.
      api-ms-win-core-sysinfo-l1-1-0: Add stub dll.
      advapi32: Add a stub implementation of EventSetInformation.

Matteo Bruni (5):
      wined3d: Rename *emission* as *emissive*.
      wined3d: Check all the ffp_material fields.
      ddraw/tests: Accept broken testbot result for test_clear_rect_count().
      ddraw/tests: Add a ddraw2 specular lighting test.
      wined3d: Fix the TIMESTAMP_DISJOINT query.

Nikolay Sivov (45):
      explorer: Added IDispatch support for ShellBrowserWindow instance.
      explorer: Implement Application property.
      explorer: Added stub IServiceProvider support for shell browser window.
      explorer: Return IShellBrowser in response to SID_STopLevelBrowser.
      shell32: Better handle creation/destruction of shellview window.
      dwrite/tests: Test character spacing applied to cluster metrics.
      shell32/tests: Fix test crashes when running with wine.
      msdmo: Reg* API does not use HRESULT return codes.
      shell32/tests: A test for shellview QI for IOleWindow.
      shell32: Fix multiline trace message and some magic numbers.
      shell32: Forward AutoArrange() to IFolderView2.
      shell32: Forward SetRedraw to IFolderView2.
      shell32: Implement GetSelectedCount() using IFolderView2::GetSelection().
      explorer: Added IDispatch support for IShellWindows.
      atl100/tests: Fixed some leaks (Valgrind).
      oleacc: Added proxies for oleacc.idl.
      dwrite: Initial implementation of Draw().
      shell32: Implement Application property of IShellFolderViewDual.
      shell32: Update to IShellDispatch6.
      include: Fix IAccessible definition.
      oleaut32: Simplify connection point creation.
      oleaut32: Cleanup connection point methods a bit.
      oleaut32: Implement proxy/stub for IEnumConnections::Next().
      rpcrt4: Added missing marshalling calls for FC_INT3264/FC_UINT3264 types.
      include: Update msctf.idl.
      ole32/tests: Added a test for OleRun().
      shell32: Added IDispatch support for IShellFolderViewDual3.
      explorer: Return desktop shellview interface.
      kernel32: Fixed couple of comments regarding atom calls.
      kernel32: Implement GetDynamicTimeZoneInformation().
      shell32: Forward couple of IKnownFolder methods to regular API equivalents.
      shell32: Silence IMarshal requests to IKnownFolder and IKnownFolderManager.
      shell32: Partially implement SHGetKnownFolderIDList().
      shell32: Implement ParseName().
      shell32: Added FolderItemVerbs stub.
      shell32: Implement FolderItemVerbs_get_Count().
      shell32: Added FolderItemVerb stub.
      shell32: Implement FolderItemVerbs::Item().
      po: Update Russian translation.
      wininet: Make sure we pass strictly 0/1 to a helper as BOOL value.
      ieframe: Properly trace variant arguments.
      oledlg: Forward OleUIAddVerbMenuA to OleUIAddVerbMenuW.
      oledlg: Partially implement OleUIAddVerbMenuW(), with basic tests.
      ole32: Implement SNB marshalling.
      oleaut32: Added IEnumConnectionPoints::Next proxy/stub.

Piotr Caban (1):
      ws2_32: Fix ai_canonname buffer allocation in addrinfo_AtoW.

Qian Hong (2):
      server: Remove useless trailing comma in array.
      ntdll/tests: Fixed typo.

Sebastian Lackner (13):
      ntdll: Use lockfree implementation for get_cached_fd.
      kernel32/tests: Add tests for calling VirtualProtect with NULL as last argument.
      kernel32: Do not omit mandatory argument for VirtualProtect.
      krnl386.exe16: Do not omit mandatory argument for VirtualProtect.
      ntdll: Do not omit mandatory argument for VirtualProtect.
      winedevice: Do not omit mandatory argument for VirtualProtect.
      ntdll: Return failure in NtProtectVirtualMemory when last argument is omitted.
      wbemprox/tests: Actually test the return value of IEnumWbemClassObject_Next.
      wbemprox/tests: Fix memory leak when tests are skipped.
      ws2_32: Properly handle closing sockets during a select call.
      ntdll/tests: Add/remove todo_wine to avoid test failures.
      server: Fix leak of async handle in pipe_server_flush.
      dmime: Properly set primary dsound buffer in IDirectMusicPerformance8Impl_CreateStandardAudioPath.

Stefan Dösinger (1):
      wined3d: Fix a copy / paste mistake.

Thomas Faber (1):
      advapi32/tests: Add tests for RegQueryInfoKey.

Thomas Faller (1):
      jscript: Date.parse: long date with '/' or '-'.

Vincent Povirk (1):
      winex11.drv: Report failure when we can't convert a selection.

--
Alexandre Julliard
julliard@winehq.org
