The Wine development release 1.3.30 is now available.

What's new in this release (see below for details):
  - DirectSound reimplemented on top of MMDevAPI.
  - Support for StretchBlt in the DIB engine.
  - User interface improvements in HTML help.
  - Some MSXML fixes.
  - Performance improvements in cmd.
  - Various bug fixes.

The source is available from the following locations:

  http://ibiblio.org/pub/linux/system/emulators/wine/wine-1.3.30.tar.bz2
  http://prdownloads.sourceforge.net/wine/wine-1.3.30.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.3.30:

    201  Igowin: masking problem - image is not transparent
   4140  Emu48 with HP49 ROM: parts of emulated screen stays black
   5180  vb6 ide can't run a simple test case
   5181  vb6 can't compile a simple file
   5322  Both MSVC6 and MSVB6 installers die very early
   5623  GetAsyncKeyState wrong if querying process doesn't have focus
   5841  XML database manipulation through ADO nonfunctional (support for MSXML2.XMLPARSER.3.0 -> CLSID {F5078F31-C551-11D3-89B9-0000F81FE221} needed)
   6620  ALEPH500 crashes with X11DRV_DIB_DeleteDIBSection
   7182  Arabic letters not positioned correctly
   7563  neoragex 0.6b does not run
   9400  Panzer General III Scorched Earth random hang, threading-related
   9454  Panzer General III Scorched Earth hang with seh:setup_exception nested exception
  12450  Adobe Acrobat Pro 6 & 7 / Acrobat Reader 6 & 7 -- "Detect and Repair" does nothing (MsiReinstallProduct)
  13383  Firefox 3.0rc1 crashes on startup on 64bit Kubuntu 8.04 [dogfood]
  13502  BRenBot application fails to start
  13564  VeohTV beta login window is improperly drawn
  13885  Visio 2003 crash on digit entry or paste
  13985  Skype 4 crashes
  14118  wine needs its own dxdiag
  14316  Elona is really slow
  15186  Grand Theft Auto crashes on game engine start
  15187  Combos changes in Win16 dialogs not noticed by TopDraw
  15218  Microsoft Office 2007: Exiting Groove Manager/Server crashes in kernel32
  15258  Program for programming HAM radios exits with 541 error
  15760  Wrong window size in QIP
  15945  WinSnap can't capture screen.
  16216  Arturia Minimoog VST: Interface controls doesn't draw well
  16270  ratDVD installer has (non-fatal) crash in winmm/time
  16491  Pindersoft DotNet Test hangs when advancing months (monthcal day state/notification data handling)
  16590  Audiosurf: Lines not breaking properly
  16594  Oberon game launcher does not show the buttons to launch the game.
  17068  HDR not correctly rendered (Counter-Strike: Source)
  17864  ipstats.c:1427: warning: 'append_udp_row' defined but not used on FreeBSD/OS X
  18086  Wine should provide a Tango compliant Icon
  18415  MarketMaker Crash during install
  18582  DVDFab: changing window focus causes window to shrink and can't bring back properly
  18651  Microsoft Reader hangs in full screen mode
  18979  Installation of Microsoft SQL Server Express crashes
  19196  XIII: no textures and fonts
  19310  Rosetta Stone crashes
  19645  Lotus 123 97 causes a page fault
  19740  Google Earth: "View in Google Maps" doesn't work (dogfood)
  19755  Open Watcom 1.8's binw/wcc.exe complains "Not enough memory on exec"
  19975  runasdate: child processes do not receive (adjusted) time
  19976  runasdate: running without /immediate causes a crash
  20009  Scrabble Online failed assertion
  20030  game, Taikodom doesn't run
  20364  The Dig (from STEAM) doesn't run on Arch Linux x86_64
  20462  Unable to uninstall Caesar IV
  20565  Emu42: change in StretchBlt causes black display background
  20600  City of Heroes crashes when disabling 3D sound in preferences
  20688  FIFA 2010: Sound does not work in multiplayer (Internet Game) match
  20778  Open Office Writer crash when press on Hebrew letters
  20872  Sim City 4 Deluxe: No texture in the minimap while loading a city
  20873  SimCity 4 Deluxe crash while loading the game
  20966  Everquest 1 crashes on startup
  20980  Tiny globe in Google Earth in DirectX mode [dogfood]
  21144  cmd missing newline in output?
  21409  Progecad 2009 Pro crashes on save - save as
  21533  Civilization II 16-bit crashes when showing the main menu.
  21647  Random hang in Europa Universalis III
  21685  ICQ 7 exits on load
  21686  ICQ 7 page fault
  21710  MotorM4X menu background image is not shown
  21885  uTorrent: inactive toolbar buttons have non-transparent icons
  22787  Irfanview: Crashes after clicking on website link
  22982  SyncToy help links always lead to the default overview page
  23113  winrar 3.93 installer displays garbage instead of licensing agreement
  23619  GTA San Andreas doesn't find widescreen video modes
  23850  Aliens vs Predator (2010) silently exits during startup, needs IGameExplorer::VerifyAccess (parental controls)
  24153  Adobe Audition 3 parts of interface not drawn
  24278  Transparent PNG are shown inverted by applications compiled with Lazarus
  24297  Google Earth Plugin install via BITS quits with an error message
  24859  EnhanceMySe7en: Fails to start
  25293  Starcraft II cursor on-game is blank
  25448  Filemaker Pro 11 can't be started from Linux main menu icon - Invalid or incorrect link
  25524  Hexplore installer complains about not being able to open a tmp file.
  25549  Mega Games Pack fails to draw bitmap graphics
  25552  winecfg audio test under-run errors
  25591  MS Office Pro 2010 Trial: garbled display on ribbon and file tab
  25714  All tool buttons in CHM viewer are displayed as printer
  25948  explorerframe/nstc tests shows some a leak in comctl32 under valgrind
  26009  Adventure games from Kheops Studio have wrong text alignment
  26053  urlmon/sec_mgr tests show some invalid writes under valgrind
  26601  The Void: audio stutters badly (when using ALSA full hardware acceleration)
  26640  Disciples II: sound artifacts during music playback
  26816  native msi2 installer exits with status 20, can't get version of mspatcha.dll
  27283  can not start  IBankWizard.msi installer
  27301  Space Empires: Star Fury doesn't display text in-game (orm=backbuffer)
  27382  WinRAR 4.x installer crashes when being run from certain filesystems
  27449  "pause" command behaviour differs from windows
  27540  Typing of the Dead demo: Crashes upon launch when directsound is set to emulation
  27542  Iexplore can't open url regression 2
  27557  Alice: Madness Returns - Securom Matroschka doesn't work out of the box
  27928  Program SIMPLO installer crashes
  27981  Ems Mysql manager and Ems Sql Manager do not start anymore wine 1.3.25
  27998  IE7 & IE8 have black back ground where page tabs should be and .GIF's no longer render
  28024  icy tower: installer wont launch
  28094  pwsafe 3.26: login box logo is replaced by a black square
  28112  Missing mouse cursor in menus of Atlantis Evolution
  28130  CamelSystems Power Post crashes
  28255  d3dx9/shader.ok fails with WINEDEBUG=warn+heap
  28262  mshtml/style.ok crashes when WINEDEBUG=warn+heap
  28284  HoverAce: audio becomes distorted then it cuts out during races (Alsa=emulation)
  28286  Backyard Baseball 2001 won't start
  28294  XPR108258.exe (csf player installer) crash
  28348  Age of Empires 2 rendering broken with OpenGL renderer
  28351  Hundred Swords demo: Fails to initialize Direct3D
  28369  WinRar 3.93 installer crashes after starting
  28376  djdecks for DX does not work
  28383  secur32/schannel test consistently fails on 32-bit debian testing
  28408  vbscript gc test crashes with WINEDEBUG=warn+heap
  28415  MIDI Broken (in, at least, the program VSTHost)
  28449  GnuTLS internal error in wine test case
  28466  Copy-Paste bug
  28484  .NET Framework 4.0: Crash after extracting files - unimplemented wer.WerReportAddDump
  28494  Purple areas in MS Word 2003's horizontal ruler
  28499  Enterprise Architect docked window icons fail no longer have a transparent background
  28502  Everest Poker and Casino crash when loading through proxy
  28517  Pikachu Volleyball stops playing sound effects
  28521  Black box around the mouse cursor
  28525  Wine doesn't start Dosbox if $PWD = ~/.wine
  28526  HTML-Kit 292's small icons have a white background
  28534  Igowin: miscolored shadows
  28561  crash while installing Vixi Freecorder with mono28/mono210 installed and without gecko-dbg installed
  28565  Mask color showing as background in toolbar buttons
  28566  winedbg crashes on gdb command remote file get
  28567  gdiplus/image.ok crashes on win64
  28568  secur32/schannel test often hangs with gnutls 2.12.10-2
  28587  League Of Legends PVP.net client can't retrieve profile information
  28591  Guild Wars: the audio track includes loud static bursts while playing the background music
  28606  Gnome-screensaver cannot lock screen while runing full-screen games
  28610  SystemParametersInfo(SPI_GETNONCLIENTMETRICS) should tolerate larger ncm.cbSize values
  28630  Crash on start of ahnenblatt

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

Changes since 1.3.29:

Akihiro Sagawa (2):
      ddraw: Use the same device name as Windows for the Direct3D HAL device.
      po: Update Japanese translation.

Alexander Lakhin (1):
      po: Update Russian translation.

Alexandre Julliard (11):
      winex11: Force the alpha channel to zero for mono->color blits.
      winex11: Avoid recomputing the DC format when it hasn't changed.
      winex11: Remove redundant pixmap prefix in X_PHYSBITMAP field names.
      winex11: Pre-compute the color shifts for the supported XRender formats.
      winecfg: Set the background color for the web link.
      winex11: Get rid of the client-side DIB optimization in StretchBlt.
      winex11: Fall back to the DIB engine for client-side stretching.
      makedep: Ensure that error messages contain "error".
      winex11: Remove no longer needed support for a source DIB color map in XRender StretchBlt.
      winex11: Remove no longer needed support for a source DIB color map in X11 StretchBlt.
      winex11: Force alpha channel to 0 when doing color conversion in PutImage.

Alistair Leslie-Hughes (7):
      msxml3: Support creating IXMLParser Interface.
      mshtml: IID_IHTMLCurrentStyle4 isn't supported on IE6.
      mscoree: Add ICorDebug interface support.
      mscoree: Return S_OK from ICorDebug Initialize.
      mscoree: Define ICorDebugManagedCallback2 and ICorDebugMDA interfaces.
      mpr: Remove DllCanUnloadNow and DllGetClassObject.
      mscoree: Implement ICorDebug SetManagedHandler.

Andrew Eikum (21):
      winealsa.drv: Remove wave, mixer, and dsound driver code.
      wineoss.drv: Remove wave, mixer, and dsound driver code.
      winecoreaudio.drv: Remove wave, mixer, and dsound driver code.
      dsound: Remove hardware acceleration support.
      dsound: Validate buffer pointers in Unlock methods.
      winecfg: Replace DirectSound settings with Driver Diagnostics.
      dsound: Reimplement rendering devices on mmdevapi.
      dsound: Reimplement capturing devices on mmdevapi.
      dsound: Reimplement PropertySet on mmdevapi.
      dsound: Eliminate leftover driver structures.
      mmdevapi: Don't fail if dwChannelMask is not set correctly.
      wineoss.drv: Use a temporary OSS device to check format support.
      winealsa.drv: Fix default device creation logic.
      mmdevapi: Don't use invalid This pointer on static object.
      winmm: Handle DRV_QUERYMAPPABLE in waveXxxMessage.
      audio: Change winmm import to delayed import.
      winecfg: Reload winmm for each sound test.
      mmdevapi: Attempt to determine default devices from the registry.
      winecfg: Allow user to select default audio devices.
      dsound: Remove a few unused variables.
      dsound: Fix fragment position calculations.

Andrew Talbot (21):
      cabinet: Mark some fall-throughs in switch statements.
      comdlg32: Add a break statement to mark a semantic separation.
      d3d10: Mark a fall-through in a switch statement.
      d3dcompiler_43: Mark fall-throughs in switch statement.
      ddeml.dll16: Move break outside of if statement.
      dbghelp: Mark a fall-through in a switch statement.
      gdi32: Mark a fall-through in a switch statement.
      mapi32: Mark some fall-throughs in a switch statement.
      msacm32: Mark fall-through in switch statement.
      mshtml: Mark some fall-throughs in switch statements.
      mshtml: Mark fall-through in switch statement.
      msi: Add a break to a switch statement.
      msi: Mark fall-throughs in switch statements.
      msvcrt: Mark some fall-throughs in a switch statement.
      msvcrt: Remove a superfluous semicolon.
      msxml3: Add a break to a switch statement.
      ntdll: Mark some fall-throughs in a switch statement.
      oleaut32: Mark some fall-throughs in a switch statement.
      jscript: Mark a fall-through in a switch statement.
      jscript: Add breaks to some switch statements.
      dsound: Remove unneeded address-of operator from function name.

André Hentschel (13):
      gdi32: Add traces for the gamma functions.
      wer: Add stub for WerReportAddDump.
      d3d9/tests: Don't test function directly when reporting GetLastError().
      shell32/tests: Don't test function directly when reporting GetLastError().
      user32/tests: Don't test function directly when reporting GetLastError().
      kernel32/tests: Don't test function directly when reporting GetLastError().
      ntdll/tests: Don't test function directly when reporting GetLastError().
      wininet: Fix UrlComponents initialisation.
      winevdm: Don't give up if we can't shorten the current directory.
      po: Update German translation.
      ole32: Return if out of memory (Coverity).
      tools: Upgrade the config.guess/config.sub scripts.
      ntdll: Map ETIME to STATUS_IO_TIMEOUT.

Aric Stewart (2):
      usp10: Correct ScriptStringGetLogicalWidths to be based on char not glyph.
      usp10: Handle the SSA_PASSWORD flag in ScriptStringAnalyse.

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

Bernhard Loos (7):
      server: Store sharing state for named pipes.
      server: Only the sharing parameter of two instances of the same pipe have to match.
      server: Sharing 0 is not allowed for named pipes.
      server: It's possible to call NtQueryInformationFile on a pipe if it was opened with access 0.
      server: Correctly implement permission checking for named pipes.
      ntdll: Implement the NamedPipeConfiguration value for the FilePipeLocalInformation class of NtQueryInformationFile.
      server: If a debugger is attached to a process, child processes shouldn't get debugged.

Bruno Jesus (1):
      ws2_32: Fix UDP LINGER support in getsockopt.

Charles Davis (7):
      libwine: Fix resetting the install_name on Mac OS.
      winegcc: On Mac OS, turn -s into -Wl,-x.
      loader: Fix constant address warning on Mac OS.
      iphlpapi: Implement GetUdpTable() on Mac OS and the BSDs.
      server: Use syscall(2) instead of inline assembly on Mac OS, too.
      winemenubuilder: Don't define crc16() on Mac OS.
      wldap32: Silence a compiler warning.

Damjan Jovanovic (1):
      windowscodecs: Read PNGs sequentially.

Dmitry Timoshkov (5):
      kernel32: Add a bunch of VirtualProtect tests.
      ntdll: Use STATUS_INVALID_PAGE_PROTECTION as return value for invalid protections.
      kernel32: Fix a typo in the LoadLibrary return value testing.
      user32: Add support for iPaddedBorderWidth in NONCLIENTMETRICS.
      user32: Fix the logic deciding when to write to the destination structure.

Dylan Smith (4):
      richedit: Return number of bytes read for EM_STREAMIN with SF_TEXT.
      richedit: Return number of chars inserted for EM_STREAMIN with SF_RTF.
      riched20/tests: Avoid using flaky method of simulating typing.
      riched20/tests: Remove unnecessary SetFocus calls.

Eric Pouech (1):
      winedbg: Don't assert() on unsupported v-packets, but rather report an error.

Erich Hoover (7):
      hhctrl.ocx: Use the STD_PROPERTIES icon for the 'Options' toolbar button.
      hhctrl.ocx: Use a modified (two color) refresh icon for the 'Sync' toolbar button.
      hhctrl.ocx: Use separate icons for 'Hide' and 'Show' toolbar buttons based on the HIST_VIEWTREE icon.
      hhctrl.ocx: Use the correct values for current_tab when some tabs are disabled.
      hhctrl.ocx: Default to the correct tab for different HH_DISPLAY_* values.
      hhctrl.ocx: Open a specific topic when requested.
      hhctrl.ocx: When called as a program, quit when HtmlHelp call fails.

Francois Gouget (21):
      po: Mark a number of obviously incomplete cmd help messages as fuzzy in the Turkish translation.
      oleview: Separate the file filters with a space.
      winecfg: Separate the file filters with a semi-colon and a space.
      wordpad: Use a lowercase extension in a file filter.
      comctl32/tests: Add basic tests for the SysLink control.
      comctl32: Send a WM_CTLCOLORSTATIC message and erase the background while painting.
      gdi32/tests: Use if(0) instead of #if 0 to make sure code still compiles.
      msi/tests: Avoid #if 0 to make sure code still compiles.
      d3drm/tests: Remove an unneeded assert.h include.
      shell32: Add definitions for the IEnumACString interface.
      gdi32: The GetKerningPairsA() test should pass on all the platforms we care about now.
      tests: Remove unneeded assert.h includes.
      Assorted spelling fixes & co.
      po: Mark translations with mismatched printf format directives as fuzzy.
      browseui/tests: Skip some tests if IEnumACString is not supported.
      kernel32: Reset LastError if GetModuleFileName() succeeds.
      kernel32/tests: Check what happens if QueryDosDeviceA() is given an insufficient buffer.
      kernel32/tests: Test K32GetProcessImageFileNameA() and improve the QueryFullProcessImageNameA() tests.
      kernel32/tests: Better check the NT path returned by QueryFullProcessImageName().
      kernel32: Fix the NT path returned by QueryFullProcessImageName().
      ntdll: ETIME is not defined on FreeBSD.

Frédéric Delanoy (20):
      cmd: Use helper function to return file io buffer.
      cmd: Add WCMD_output_stderr function to output error messages to stderr.
      cmd: Output error messages to stderr where appropriate.
      cmd: Fix WCMD_fgets documentation.
      cmd: Fix comments in WCMD_color.
      msvcrt/tests: Remove dead assignments (Clang).
      cmd: Avoid reading char by char from console.
      cmd: Avoid checking whether we're in console mode for every read.
      cmd: Get rid of unused parameter in WCMD_ReadFile.
      cmd/tests: Don't convert lines with DOS endings in convert_input_data.
      cmd: Output error messages to stderr instead of stdout where appropriate.
      cmd: Improve WCMD_fgets documentation.
      cmd: Handle truncation for console reads.
      cmd: Avoid dead assignments (Clang).
      cmd: Improve handle type recognition in WCMD_ReadFile.
      cmd: Rename a parameter in WCMD_fgets.
      cmd: Infer handle type from handle value in WCMD_fgets and WCMD_ReadAndParseLine.
      cmd: Avoid reading char by char from files.
      cmd: Consistently use infinitive forms in commands help summary.
      cmd: Make PAUSE accept any keypress instead of a full input line.

Hans Leidekker (7):
      wtsapi32: Return success from WTSRegisterSessionNotification.
      explorer: Add a version resource.
      wininet: Ignore the accept types array in HttpOpenRequestA if there are invalid pointers.
      msi/tests: Properly preserve pending file renames.
      include: Add patchapi.h.
      mspatcha: Forward ApplyPatchToFileA to ApplyPatchToFileW.
      mspatcha: Add a stub implementation of GetFilePatchSignatureA/W.

Henri Verbeet (10):
      secur32: Use gnutls_record_get_max_size() to get the maximum message size.
      secur32: Return failure if chan_EncryptMessage() can't encrypt the entire buffer.
      secur32: Properly handle GNUTLS_E_AGAIN in (GnuTLS) schan_imp_send().
      secur32: Properly handle GNUTLS_E_AGAIN in (GnuTLS) schan_imp_recv().
      wined3d: Make the device parameter to wined3d_device_present() const.
      secur32: Handle the schan_buffers limit field in schan_get_buffer() instead of schan_pull().
      wined3d: Return WINED3DERR_NOTFOUND if the render target is NULL in wined3d_device_get_render_target().
      d3d9/tests: Add a test for IDirect3DDevice9::GetRenderTarget().
      winex11: Print the GL renderer and version when complaining about software / indirect rendering.
      wined3d: Make the device parameter to wined3d_device_get_primitive_type() const.

Huw Davies (15):
      gdi32: Make clip_line external.
      gdi32: stretch_bitmapinfo may need to adjust the dst visrect.
      gdi32: Implement stretch_bitmapinfo.
      gdi32: Forward StretchBlt calls from the dib driver to the null driver.
      gdi32: Use a separate variable to indicate the default has been retrieved.
      winex11: Remove some unused function ptrs.
      winex11: Initialise the dib color table.
      gdi32: Display the depth of a bitmap rather than the total number colors.
      gdi32: Keep track of the english family name if there's a localised name as well.
      gdi32: Move the font list initialisation to a separate function.
      gdi32: Cache the loaded font list properties.
      gdi32: Load the font properties from the cache if it exists.
      gdi32: Move some common default fonts to the head of the font list.
      gdi32: Require that we have freetype's FT_Load_Sfnt_Table function and remove the hacky fallback.
      wineps: The truetype metrics should now be obtained from gdi32, so remove obsolete code.

Hwang YunSong (3):
      po: Updated Korean translation.
      po: Updated Korean translation.
      winecfg: Updated Korean translation.

Jacek Caban (2):
      mshtml: Set frame interface to NULL after releasing it in IOleInPlaceObjectWindowless::InPlaceDeactivate.
      mshtml: Properly release body element in basic_style_test.

Jörg Höhle (6):
      winealsa: Simplify the test for 8bit linear PCM.
      wineoss: Simplify the test for 8bit linear PCM.
      winmm: Fix sum of available samples.
      winmm: Separate WINMM_Pause and WINMM_Reset.
      winmm: waveOutReset returns all buffers.
      winmm: Mark headers WHDR_DONE at the last possible time.

Louis Lenders (6):
      dpnet: Fill the DPN_SP_CAPS structure in IDirectPlay8Peer_GetSPCaps with some sane values + tests.
      gdiplus: Return zero properties in stubbed GdipGetPropertyCount.
      include: Add lmat.h.
      netapi32: Add stub for NetScheduleJobEnum.
      wine.inf: Add key for InstallDate under CurrentVersionNT.
      dwmapi: Add stub for DwmRegisterThumbnail.

Luca Bennati (1):
      po: Update Italian translation.

Maarten Lankhorst (2):
      quartz: Fix support for mpeg layer 1 and 2.
      winemp3: Add support for WAVE_FORMAT_MPEG.

Marcus Meissner (13):
      dpnet: Fixed bad pointer addition (Coverity).
      wpp: Add semicolons at end of code rules.
      dibdrv: Mark get_rop_codes as hidden.
      mscoree: Mark cordebug_init as hidden.
      mshtml: Mark replace_node_by_html as hidden.
      vbscript: Mark some symbols as hidden.
      msdaps: Mark create_* functions as hidden.
      dsound: Mark enum_callback and search_callback static.
      winex11.drv: Mark xrenderdrv_ExtTextOut as static.
      winmm: Mark two functions as hidden.
      ole32: Mark two functions as hidden.
      dsound: Make a function static, remove a no longer used array.
      kernel32: Fixed QueryDosDeviceNameW size (chars not bytes).

Marko Nikolic (3):
      comctl32/tests: Removed sign comparison warning in dpa tests.
      advapi32: Removed sign comparison warning.
      comctl32/tests: Removed sign comparison warning in datetime tests.

Matteo Bruni (5):
      wined3d: When creating a new shader, check shader type and version.
      d3d10core: Fixup HRESULT in a bunch of error cases.
      d3d8/tests: Test creating shaders with wrong type or version.
      d3d9/tests: Test creating shaders with wrong type or version.
      d3d10core/tests: Add some shader creation tests.

Michael Mc Donnell (1):
      d3dx9_36/tests: Fixed adjacency double free (valgrind).

Michael Stefaniuc (28):
      wineqtdecoder: Use FAILED instead of !SUCCEEDED.
      oleaut32/tests: Use FAILED instead of !SUCCEEDED.
      wshom.ocx: Don't bother with a FIXME in DllCanUnloadNow().
      ieframe: Don't open code CONTAINING_RECORD().
      krnl386.exe16: Don't open code CONTAINING_RECORD().
      shell32: COM cleanup in shellpath.c.
      shell32: Pass the object instead of the iface to helper functions.
      d3dx9_36/tests: Avoid using fmaxf.
      comctl32/tests: Standardize COM in imagelist.c.
      comctl32/tests: Don't accept Win95 behavior.
      gameux: Don't compare with TRUE.
      sane.ds: Don't compare with TRUE.
      wordpad: Don't compare with TRUE.
      msxml3: Use SUCCEEDED instead of !FAILED.
      oleaut32: Fix some VarCyFrom* tests.
      oleaut32/tests: Make the EXPECT_* macros that take no args more robust.
      oleaut32/tests: Cleanup the EXPECTRES macros.
      include: Remove 'l' modifier from numeric constants in winerror.h.
      quartz: Free two assert calls from having side effects.
      dsound: COM cleanup for the IDirectSoundCapture iface.
      shell32: Merge enumidlist.h into the main header file.
      shell32: Pass an object instead of an iface to a helper function.
      shell32: Basic COM cleanup for the IEnumIDList iface.
      shell32: Avoid the forward declaration of the IEnumIDList vtbl.
      shell32: Get rid of a local typedef for a struct.
      shell32: Simplify RecycleBin_EnumObjects() a little.
      shell32: Return the IEnumIDList object on its creation.
      shell32: Avoid an unsafe iface to object cast in AddToEnumList().

Nikolay Sivov (20):
      comctl32/monthcal: Fix week numbers background color.
      comctl32/monthcal: Also invalidate today label while setting new today date.
      comctl32/monthcal: After notification safely free buffer allocated on heap.
      comctl32/tests: Fix a test that depends on control size.
      comctl32/treeview: Free checkbox imagelist when control is about to be killed.
      kernel32/tests: Move CompareStringA data to a table.
      msxml3: Accept disabling of external entities loading.
      msxml3: Accept disabled parameter entities feature.
      msxml3: Accept lexical handler parameter entities switch.
      msxml3: Accept DTD prohibition feature.
      msxml3: Support setting unlimited xml stream length for a reader.
      msxml3: Support setting unlimited nesting depth for a reader.
      msxml3: Support setting namespaces feature to default value.
      msxml3: Use provided qualified name length while writing end element tag.
      advapi32/tests: Add one more QueryServiceStatusEx() test.
      msxml3: Add some useful traces and demangle some parameter names.
      msxml3: Use helper to set properties.
      msxml3: Use a helper to get property values.
      oleaut32/typelib: Properly handle allocation failure on creation.
      oleaut32/typelib: Use BSTR for filename.

Peter Schellenbach (1):
      comctl32/statusbar: Fixed missing icon in owner draw panels.

Piotr Caban (4):
      msvcrt: Fix wcsncpy_s implementation.
      msvcrt: Fix __pioinfo block size.
      msvcrt: Free fd entries with incorrect HANDLE value.
      msvcrt: Added _iswdigit_l implementation.

Ričardas Barkauskas (9):
      ddraw: Use unsafe_impl_from_IDirectDrawPalette for application provided interfaces.
      ddraw: COM cleanup for the IDirectDrawPalette interface.
      ddraw/tests: IDirect3DViewport3, IDirect3DViewport2 and IDirect3DViewport use same implementation.
      ddraw: Use unsafe_impl_from_IDirect3DViewport3 for application provided interfaces.
      ddraw: Use impl_from_IDirect3DViewport3 instead of cast to IDirect3DViewportImpl*.
      ddraw: Compare IDirect3DViewport3 interface instead of IDirect3DViewportImpl.
      ddraw: COM cleanup for IDirect3DViewport3 interface.
      ddraw: Use unsafe_impl_from_IDirect3DViewport for application provided interfaces.
      ddraw: Use unsafe_impl_from_IDirect3DViewport2 for application provided interfaces.

Stefan Dösinger (4):
      ddraw/tests: Use sizeof instead of a magic number.
      ddraw/tests: Use the variable instead of the type in sizeof().
      d3d9: Implement FPUSETUP for msvc.
      d3d8: Implement FPUSETUP for msvc.

Thomas Faber (5):
      shell32/tests: Fix build with MSVC.
      gdi32/tests: Fix MSVC build in icm.c.
      gdi32/tests: Fix MSVC build in bitmap.c.
      kernel32/tests: Fix MSVC build in file.c and pipe.c.
      kernel32/tests: Fix MSVC build in console.c.

Thomas Mullaly (5):
      urlmon: Added custom security manager support to MapUrlToZoneEx2.
      urlmon: Improved MapUrlToZone{Ex2} and GetSecurityId support.
      urlmon: Improved IUri support for wildcard URLs.
      urlmon/tests: Added tests for GetSecurityIdEx2.
      urlmon: Added basic GetSecurityIdEx2 implementation.

Vincent Povirk (2):
      gdiplus: Include an alpha channel in HBITMAPs created from Bitmaps.
      gdiplus: Fix pointer math for the 64-bit tests.

--
Alexandre Julliard
julliard@winehq.org
