From 0ad5ec0d82bf56ad6c0c6eea2e213de6b1d6fd18 Mon Sep 17 00:00:00 2001 From: Jan Zerebecki Date: Fri, 15 Jun 2007 17:46:14 +0200 Subject: [PATCH] push a3069cb3bfd71d4719e515a5e2d9729e18e3f983 --- ANNOUNCE | 1078 ++++++++--------- ChangeLog | 1670 +++++++++++++++++++++++++++ VERSION | 2 +- configure | 18 +- dlls/comctl32/propsheet.c | 5 + dlls/gdiplus/Makefile.in | 1 + dlls/gdiplus/{gdiplus_private.h => brush.c} | 50 +- dlls/gdiplus/gdiplus.spec | 6 +- dlls/gdiplus/gdiplus_private.h | 11 +- dlls/gdiplus/tests/Makefile.in | 1 + dlls/gdiplus/tests/brush.c | 76 ++ dlls/mshtml/olewnd.c | 14 +- dlls/mshtml/tests/htmldoc.c | 122 +- dlls/mshtml/view.c | 13 +- dlls/msi/action.c | 24 +- dlls/msi/custom.c | 64 +- dlls/msrle32/msrle32.c | 60 +- dlls/ntdll/cdrom.c | 40 +- dlls/setupapi/install.c | 2 +- dlls/setupapi/tests/Makefile.in | 3 +- dlls/setupapi/tests/install.c | 179 +++ dlls/user32/tests/edit.c | 5 +- dlls/winex11.drv/opengl.c | 2 +- dlls/winex11.drv/settings.c | 4 +- dlls/ws2_32/socket.c | 33 + dlls/ws2_32/tests/sock.c | 10 + include/wine/port.h | 2 +- programs/cmd/wcmdmain.c | 40 +- server/fd.c | 15 +- tools/widl/client.c | 10 +- tools/widl/parser.y | 17 +- tools/widl/proxy.c | 12 +- tools/widl/server.c | 34 +- tools/widl/typegen.c | 112 +- tools/widl/typegen.h | 4 +- 35 files changed, 2929 insertions(+), 810 deletions(-) rewrite ANNOUNCE (95%) copy dlls/gdiplus/{gdiplus_private.h => brush.c} (52%) create mode 100644 dlls/gdiplus/tests/brush.c create mode 100644 dlls/setupapi/tests/install.c diff --git a/ANNOUNCE b/ANNOUNCE dissimilarity index 95% index 657ca28e8cf..bf850561078 100644 --- a/ANNOUNCE +++ b/ANNOUNCE @@ -1,574 +1,504 @@ -This is release 0.9.38 of Wine, a free implementation of Windows on Unix. - -What's new in this release: - - Beginnings of support for copy protection kernel drivers. - - More MSI automation support. - - Many 64-bit compilation fixes. - - A number of OLE fixes. - - Lots of bug fixes. - -Because of lags created by using mirrors, this message may reach you -before the release is available at the public sites. The sources will -be available from the following locations: - - http://ibiblio.org/pub/linux/system/emulators/wine/wine-0.9.38.tar.bz2 - http://prdownloads.sourceforge.net/wine/wine-0.9.38.tar.bz2 - -Binary packages for various distributions will be available from: - - http://www.winehq.org/site/download - -You will find documentation on - - http://www.winehq.org/site/documentation - -You can also get the current source directly from the git or CVS -repositories. Check respectively http://www.winehq.org/site/git or -http://www.winehq.org/site/cvs for details. - -If you fix something, please submit a patch; instructions on how to do -this can be found at http://www.winehq.org/site/sending_patches - -Wine is available thanks to the work of many people. See the file -AUTHORS in the distribution for the complete list. - ----------------------------------------------------------------- - -Changes since 0.9.37: - -Alexander Nicolaysen Sørnes (8): - wordpad: Add program icon. - shell32: Update Norwegian Bokmål resources. - msi: Update Norwegian Bokmål resources. - regedit: Update Norwegian Bokmål resources. - credui: Add Norwegian Bokmål resources. - localui: Add Norwegian Bokmål resources. - shdoclc: Update Norwegian Bokmål resources. - cmd: Update Norwegian Bokmål resources. - -Alexandre Julliard (41): - ntoskrnl.exe: Initial stub version with forwards to existing functions. - hal: Added an initial stub. - include: Add a few definitions in wdm.h. - ntoskrnl.exe: Implemented IoCreateDevice and IoDeleteDevice. - ntoskrnl.exe: Implemented IoCreateSymbolicLink. - ntoskrnl.exe: Export KeServiceDescriptorTable and KeTickCount. - ntoskrnl.exe: Added IofCompleteRequest. - ntdll: Reimplement LdrGetDllHandle to use the same search algorithm as LdrLoadDll. - ntdll: Implemented LdrAddRefDll. - kernel32: Support incrementing the module refcount in GetModuleHandleEx. - kernel32: Check for already loaded module also for LOAD_LIBRARY_AS_DATAFILE. - ntoskrnl.exe: Implemented a number of memory allocation functions. - ntoskrnl.exe: Export a Wine-internal function to run the device request handling loop. - ntoskrnl.exe: Implemented PsGetVersion and added stubs for a couple of other Ps functions. - winedevice: Add a service process that loads and runs a kernel driver. - advapi32: Launch winedevice.exe when asked to start a kernel driver service. - ntoskrnl.exe: Reuse the kernel32 instruction emulation support for kernel-mode drivers. - ntoskrnl.exe: Implemented a couple of time-related APIs. - ntdll: Setup the shared user data structure at 0x7ffe0000. - ntdll: Avoid overflows in heap allocations. Based on a patch by Rob Shearman. - Fix a couple of overflowing heap allocations revealed by the previous change. - server: Don't allow a waitable timer to be set to expire in the past. - winebuild: Set the IMAGE_FILE_EXECUTABLE_IMAGE flag for all modules. - msxml3: Fixed compilation without libxml. - schannel: Use FIELD_OFFSET instead of offsetof. - wininet: Fixed compilation without SSL. - libwine: Add support for glyph chars mapping in OEM codepage tables. - kernel32: Remove the fixme about MB_USEGLYPHCHARS. - dmusic: Fix license headers that mistakenly use GPL instead of LGPL. - winedos: Merge a number of tiny source files into interrupts.c. - kernel32: Store global arena base as a pointer. - ws2_32: Avoid memory allocations for sockaddr conversion. - ws2_32: Reimplement WSARecvFrom along the lines of NtReadFile. - ws2_32: Store the local iosb in the ws2_async structure to avoid a memory allocation. - include: Fix the definition of MSG_MAXIOVLEN. - ws2_32: Allocate iovec buffers statically using MSG_MAXIOVLEN. - ntdll: Report end of file instead of broken pipe on char devices. - ws2_32: Re-enable FD_READ also when returning EWOULDBLOCK from WSARecvFrom(). - ws2_32: Don't modify last error in async I/O callback. - ntdll: Preserve errno across system calls done in the suspend handler. - user32: Fix a printf format warning. - -Anatoly Lyutin (1): - user32: mdi: Fix switch with wParam in WM_SYSCOMMAND processing. - -Andrew Riedi (1): - wined3d: Add hardware cursor support. - -Andrew Talbot (45): - advapi32: Fix a typo. - msvcrt20: Exclude unused header. - msvfw32: Exclude unused header. - msvcrt: Exclude unused headers. - msxml3: Exclude unused headers. - ntdll: Exclude unused headers. - netapi32: Exclude unused headers. - ole32: Exclude unused headers. - oledlg: Exclude unused header. - oleaut32: Exclude unused headers. - opengl32: Exclude unused header. - quartz: Exclude unused headers. - quartz: Exclude unused headers. - qcap: Exclude unused headers. - rpcrt4: Exclude unused headers. - rsaenh: Exclude unused header. - riched20: Exclude unused headers. - secur32: Exclude unused headers. - setupapi: Exclude unused headers. - shell32: Exclude unused headers. - shell32: Exclude unused headers. - shell32: Exclude unused headers. - user32: Exclude unused headers. - user32: Exclude unused headers. - user32: Exclude unused headers. - user32: Exclude unused headers. - vmm.vxd: Exclude unused headers. - version: Exclude unused headers. - uxtheme: Exclude unused headers. - winealsa.drv: Exclude unused headers. - ws2_32: Exclude unused headers. - winmm: Exclude unused headers. - mciwave: Constify a variable. - mpr: Constify some variables. - msdmo: Constify some variables. - mscms: Constify some variables. - msg711.acm: Constify some variables. - wineps.drv: Exclude unused headers. - wininet: Exclude unused headers. - winex11.drv: Exclude unused headers. - msacm32: Constify some variables. - msacm32.drv: Constify some variables. - msadp32.acm: Constify some variables. - mshtml: Constify some variables. - msi: Constify some variables. - -Aric Stewart (1): - comctl32: Trying to blend an image without a mask causes problem, especially if the background is white. - -Damjan Jovanovic (2): - ws2_32: Simplify some socket tests by adding a function that generates a pair of connected sockets. - ws2_32: gethostbyname("") should work. - -Dan Hipschman (11): - widl: Remove an unnecessary assignment in write_pointers. - widl: Handle pointers fields that point to structures. - widl: Improve handling of offsets in the type format string. - widl: Write some structures to the type format string on the fly. - widl: Replace erroneously removed current_func assignment. - widl: Lay framework for unions with simple unions working. - rpcrt4: Fix test typo. - widl: Handle pointers in unions. - widl: Shrink type_t structure. - widl: Allow types that reference themselves. - rpcrt4: Fix build of test on Solaris by renaming a variable. - -David Adam (6): - d3drm: Implement D3DRMColorGetRed. - d3drm: Implement D3DRMColorGetGreen. - d3drm: Implement D3DRMColorGetBlue. - d3drm: Implement D3DRMColorGetAlpha. - d3drm: Implement D3DRMCreateColorRGBA. - d3drm: Implement D3DRMCreateColorRGB. - -Detlef Riekenberg (5): - localui/tests: Add tests for ConfigurePortUI. - serialui/tests: Remove unused string. - localui/tests: Add tests for AddPortUI. - localui/tests: Handle different results from XP. - ddraw: Do not crash when Clipper is NULL. - -Dmitry Timoshkov (38): - user32: Add a test for CheckMenuRadioItem and make it pass under Wine. - user32: Add a test for the menu resource loader, make it pass under Wine. - kernel32: Add a test for LoadLibraryEx(LOAD_LIBRARY_AS_DATAFILE). - user32: Remove duplicated code. - kernel32: Print last error value as unsigned, printing error in hex is useless. - kernel32: Add an overflow test for MultiByteToWideChar. - widl: Fix compilation warnings in 64-bit mode. - winebuild: Fix compilation warnings in 64-bit mode. - winedump: Fix compilation warnings in 64-bit mode. - include/wine/debug.h: Fix compilation warning in 64-bit mode. - winex11.drv: Synchronize debug output between X11DRV_KeyEvent and X11DRV_ToUnicodeEx. - basetsd.h: Add a bunch of PSDK compatible macros/inline functions for 64-bit safe type conversions. - kernel32: Fix the size of ThreadAffinityMask to match PSDK. - basetsd.h: Fix a typo in the parameter name. - winternl.h: Make the fields of the PROCESS_BASIC_INFORMATION structure use same type width as a PSDK one. - widl: Fix compilation warnings in 64-bit mode. - ntdll: Fix compilation warnings in 64-bit mode. - kernel32: Fix compilation warnings in 64-bit mode. - comctl32/tests: Fix some problems revealed by compilation in 64-bit mode. - kernel32/tests: Fix a problem revealed by compilation in 64-bit mode. - user32/tests: Fix a problem revealed by compilation in 64-bit mode. - winedbg: Fix a problem revealed by compilation in 64-bit mode. - wine: Switch to using 'long' for INT_PTR type for 64-bit compatibility. - gdi32: Perform consistency checks when loading an EMF, add a test case. - oleaut32: Add support for loading and drawing metafiles. - winebuild: Mark builtin DLLs as IMAGE_FILE_LARGE_ADDRESS_AWARE on a 64-bit platform. - gdi32: Make SetDCHook 64-bit safe. - gdi32: Fix compilation warnings in 64-bit mode. - winex11.drv: Fix compilation warnings in 64-bit mode. - kernel32: Fix some compilation warnings in 64-bit mode. - user32: Fix some compilation warnings in 64-bit mode. - atl: Fix compilation warnings in 64-bit mode. - mcicda: Fix compilation warnings in 64-bit mode. - mciseq: Fix compilation warnings in 64-bit mode. - mciwave: Fix compilation warnings in 64-bit mode. - midimap: Fix compilation warnings in 64-bit mode. - mciavi32: Fix compilation warnings in 64-bit mode. - comctl32: Fix a compilation warning in 64-bit mode. - -Emmanuel Maillard (7): - winecoreaudio: Initial mixer support on Mac OS X. - winecoreaudio: Implement MIX_Open and MIX_GetNumDevs. - winecoreaudio: Implement MIX_GetDevCaps. - winecoreaudio: Initial implementation of MIX_GetLineInfo. - winecoreaudio: Initial implementation of MIX_GetLineControls. - winecoreaudio: Initial implementation of MIX_GetControlDetails. - winecoreaudio: Initial implementation of MIX_SetControlDetails. - -Erez Volk (1): - ntdll: Added IDT Timezone (Israel daylight savings time). - -Evan Stade (1): - gdiplus: Added stub implementation of gdiplus.dll. - -Francois Gouget (49): - ddraw/tests: Fix compilation on systems that don't support nameless unions. - winscard: Adding the missing SCARD_E_XXX and SCARD_W_XXX error codes. - winscard: Add headers for the upcoming implementation of the winscard dll. - mshtml: Fix '\n' typo. - Assorted spelling fixes. - ntdll: Fix compilation on systems that don't support nameless unions. - direct3d: Remove misspelled constants as they exist correctly spelled. - user32/tests: Fix compilation with gcc 2.95. - msvcrt/tests: When compiling with Visual C++ 2005, one must define _CRT_NON_CONFORMING_SWPRINTFS otherwise swprintf() takes an extra parameter. - msvcrt: Remove the S_ISXXX() macros as they are not present in the Visual C++ headers. - msvcrt: When operating on a closed pipe, read() should return 0, not -1. - port.h: Issue an error if port.h is included after the regular Wine headers. - usp10/tests: Fix a signed/unsigned int mismatch. - kernel32/tests: Fix a signed/unsigned int mismatch. - msi/tests: Fix a signed/unsigned int mismatch. - msvcrt/tests: Fix a signed/unsigned int mismatch. - user32/tests: SWP_STATECHANGED is an undocumented flag so define it ourselves. Fixes compilation with the PSDK. - shell32/tests: We need NTDDI_VERSION >= NTDDI_WINXPSP1 to get SEE_MASK_NOZONECHECKS with the PSDK. - d3d9/tests: Fix compilation with Visual C++ 2005. - kernel32/tests: src[i] is a char so there is no point trying to stuff 0xcafedead into it. - comctl32/tests: The PSDK does not define ListView_InsertItemA() so don't use it. - ddraw: Fix the name of DDSPD_IUNKNOWNPOINTER. - In the PSDK HRESULT_FROM_WIN32() is now an inline function, and it is __HRESULT_FROM_WIN32() which is a macro. - shell32/tests: With recent PSDKs, CSIDL_MYDOCUMENTS is a synonym for CSIDL_PERSONAL. So define our own constant. - shlwapi/tests: The PSDK does not define IID_IDelayedRelease anymore. - include: The PSDK does not define the DEFINE_SHLGUID() macro anymore. - schannel: The PSDK defines no SECPKG_FUNCTION_TABLE_SIZE_* macro. - schannel: Fix the name of the SetContextAttributes field of SECPKG_FUNCTION_TABLE. - ddraw/tests: Fix compilation with Visual C++ 2005. - rpcrt4/tests: Fix signed/unsigned and 32/64bit issues with the wiredatalen parameter. - rpcrt4/tests: Fix a Visual C++ double to float conversion warning. - setupapi/tests: There is no strncasecmp() on Windows. So use CompareString() instead. - ntdll/tests: Remove an inappropriate const qualifier. - gdi32/tests: Fix a signed/unsigned int mismatch. - psapi/tests: Fix a signed/unsigned int mismatch. - d3d8/tests: Fix the Visual C++ double to float conversion warnings. - d3d9/tests: Fix the Visual C++ double to float conversion warnings. - ddraw/tests: Fix the Visual C++ double to float conversion warnings. - dsound/tests: Fix the Visual C++ double to float conversion warnings. - oleaut32/tests: Fix the Visual C++ double to float conversion warnings. - Assorted spelling fixes. - oleaut32/tests: Remove redundant semi-colons. - oleaut32/tests: Remove unneeded parentheses. - oleaut32/tests: Fix the EQ_DOUBLE() and EQ_FLOAT() macros so they work no matter how large the values to compare are. - oleaut32/tests: Convert some macros to functions. - version: Fix the VerQueryValueA/W() prototypes. - d3drm/tests: Fix the Visual C++ double to float conversion warnings. - shell32/tests: Remove unneeded cast. - oleaut32/tests: Improve vtstr() and variantstr(). - -Frank Richter (5): - shdoclc: Update German translation. - credui: Add German translation. - shell32: Update German resources. - cmd: Updated German translation. - wordpad: Update German translation. - -Hans Leidekker (4): - setupapi: Implement pSetup{Get, Set}QueueFlags. - setupapi: Correctly handle an empty filename in SetupGetSourceFileLocationA. - setupapi: Add a partial implementation for SetupScanFileQueue{A, W}. - setupapi: Don't require a valid version section for INF_STYLE_OLDNT files. - -Huw Davies (14): - oleaut32: Type references are global to the typelib. - oleaut32: Typelib inheritance tests. - oleaut32: Fix return value in the element not found case. - oleaut32: GetRefTypeOfImplType(0) on TKIND_DISPATCH typeinfos should always return an href to IDispatch. - oleaut32: Tests for more 'syntax 2' dispinterfaces. - oleaut32: Test for interface that derives from IUnknown. - oleaut32: Move the proxy thunk creation code to a separate function. - oleaut32: non-dual dispinterfaces should be marshaled via IDispatch. - oleaut32: Fix CreateDispTypeInfo to store the correct number of functions. - oleaut32: Recurse through the impltype list so that dispinterfaces get the correct parents. - oleaut32: SLTG references are only unique at the typeinfo level, so convert them to be unique to the typelib. - winex11.drv: Merge some common code. - winex11.drv: Use XRenderCompositeText instead of XRenderCompositeString. - gdi32: Pass an lpDx array to the driver if the escapement is non-zero, so that the driver has access to the unrotated advance widths. - -Hwang YunSong(황윤성) (1): - xcopy: New Korean resource. - -Jacek Caban (6): - mshtml: Wrap nsIExternalProtocolHandler. - mshtml: Don't call start_binding if we use necko to load the page. - mshtml: Improve some exec command stubs. - mshtml: Fixed AsyncOpen implementation for channels without associated document. - mshtml: Added missing WINAPI in window proc. - urlmon: There is no need to make slash conversion in BindToStorage as URL is already canonized in the constructor. - -James Hawkins (15): - msi: Remove a misleading ERR, as this fails if a file doesn't exist, which is common. - msi: Add the ability to deformat the component's source. - msxml3: Add initial implementation of IXMLElement and IXMLElementCollection. - msxml3: Add initial implementation of IXMLDocument. - msxml3: Add tests for IXMLElement and IXMLElementCollection. - msxml3: Add tests for IXMLDocument. - msi: Create the destination directory if it doesn't exist when duplicating files. - msi: Fall back to checking if the cab exists if the volume name doesn't match. - msi: Set the MsiNTProductType property. - msi: Perform a forced reboot if a custom action returns ERROR_INSTALL_SUSPEND. - msi: Implement the WriteEnvironmentStrings standard action. - wintrust: Add stub implementations for CryptCATAdminAddCatalog and CryptCATAdminReleaseCatalogContext. - msi: Add handling for MsiBreak. - msi: Implement Installer::OpenDatabase. - msi: Implement SummaryInfo::Property get. - -Jeff Latimer (2): - hnetcfg: Define icftypes.idl. - hnetcfg: Add netfw.idl - Network Firewall interface. - -Jeremy White (1): - wininet: Mark Proxy Authorization header as a request header, so it actually gets sent. - -José Manuel Ferrer Ortiz (2): - winecfg: Updated Spanish translation. - Some Spanish translations updated. - -Juan Lang (9): - crypt32: Don't set ret to TRUE when it already is. - crypt32: Implement CertGetStoreProperty and CertSetStoreProperty. - crypt32: Use public functions to get store access state. - crypt32: Remove last error checks on success. - wintrust: Implement WintrustGetRegPolicyFlags and WintrustSetRegPolicyFlags. - oleaut32: Don't mix allocation routines. - crypt32: Statically initialize static lists and critical sections. - crypt32: Remove wrong test and parameter check. - wincrypt: Fix typo. - -Julien Muchembled (1): - msvfw32: Fix enumeration of VFW video codecs that are registered in the registry. - -Kai Blin (2): - secur32: Downgrade WARN to TRACE, fix another TRACE. - ws2_32: Make WS2_send trace more readble. - -Kolbjoern Fredheim (1): - wined3d: Implemented converting X1R5G5B5 format to R5G5B5A1 to emulate color-keying. - -Louis Lenders (2): - shell32: Update Dutch resource. - comctl32: Add stub for DrawShadowText. - -Maarten Lankhorst (6): - winealsa: Remove dead code. - dsound: Primary buffer isn't an IDirectSoundBuffer8. - dsound: IDirectSound_Compact should return DS_OK on priolevel >= DSSCL_PRIORITY. - mpr: Small fixes to WNetGetConnection. - dsound: Block align SetCurrentPosition and add test for it. - dsound: Fix stupid mistake. - -Marcus Meissner (7): - wined3d: Fixed swapchain context NULL ptr checks. - ddraw/tests: Check for failing to create surfaces. - shell32: Avoid potential 1 byte overflow. - kernel32: Skip modem status tests if GetModemStatus failed. - oleau32: Fix one entry overflow (Coverity). - ntdll: Initialize pointers to NULL (Coverity). - quartz: ppinsplitter might be used uninitialized (Coverity). - -Markus Amsler (4): - dbghelp: Speed up vector_add by avoiding pool_realloc calls. Remove no longer needed pool_realloc. - dbghelp: Speed up pool_alloc. Patch by Eric Pouech. - dbghelp: Speed up vector iteration by directly using for(). - dbghelp: Late init hash_table. - -Michael Karcher (1): - user32: Reduce the PeekMessage timeout to zero for USER16_AlertableWait. - -Michael Stefaniuc (3): - winhelp: Fix some comparisons between signed and unsigned. - winedump: '$' isn't a valid character in an identifier regardless that gcc accepts it without warning. - msi: A signed 1-bit bitfield doesn't make much sense; use unsigned. - -Mikołaj Zalewski (10): - localui: Add Polish translation. - msxml3: Implement IXMLDOMDocument2::setProperty("SelectionLanguage", ...). - comctl32: status: Send a NMMOUSE in mouse notifications, not a NMHDR. - comctl32: toolbar: TB_SETIMAGELIST should try to preserve button width. - msxml3: Improve the XPath queries handling. - msxml3: For queries the get_item should change the current position. - msxml3: Add tests for XPath queries with namespaces. - msxml3: Implement IXMLDOMElement::getElementsByTagName. - xcopy: Add Polish translation. - kernel32: Clear the extra memory in LocalReAlloc16(h, bigger_size, LMEM_ZEROINIT). - -Misha Koshelev (44): - msi/tests: automation: Add tests for Session::EvaluateCondition. - msi: automation: Implement Session::EvaluateCondition. - msi/tests: automation: Test for Installer::CreateRecord error. - msi: automation: Implement Installer::CreateRecord. - msi/tests: automation: Test invoking methods as properties & vice versa. - msi: automation: Return DISP_E_MEMBERNOTFOUND if flags are incorrect. - msi: automation: Implement Record::FieldCount. - msi/tests: automation: Correct expected Record::StringData PROPERTYPUT return variant type. - msi/tests: automation: Add tests for Record::IntegerData. - msi/tests: automation: Add test for View::Modify. - msi: automation: Implement View::Modify. - msi: automation: Implement Record::IntegerData. - msi/tests: automation: Add test for Installer::InstallProduct. - msi: automation: Implement Installer::InstallProduct. - msi/tests: automation: Add tests for Installer::RelatedProducts. - msi: automation: Implement Installer::RelatedProducts. - msi: Make MsiEnumRelatedProducts enumerate registry value names, not subkeys. - msi: automation: Installer::Products, verify HeapAlloc return value. - msi: automation: Simplify counting products/related products. - msi: automation: Condense a few loops. - msi/tests: automation: Remove unnecessary if (SUCCEEDED(hr)) statements. - msi/tests: automation: Add tests for Installer::ProductInfo. - msi/tests: Add test for empty MsiGetProductInfo parameters not referencing default registry values. - msi: Return appropriate values for empty MsiProductInfo parameters. - msi: automation: Implement Installer::ProductInfo. - msi/tests: automation: Change non-const LPCWSTR parameters to LPWSTR. - msi/tests: automation: Check for NULL source string before calling lstrcpyW. - msi: automation: Change all tabs to spaces to conform to msi formatting. - msi: script: Change all tabs to spaces to conform to msi formatting. - msi/tests: automation: Change SUCCEEDED(hr) to more specific hr == S_OK. - msi/tests: automation: Fix Installer_ProductInfo ok message to correctly state function. - msi/tests: automation: Add tests for StringList::_NewEnum. - msi: automation: Generalize list implementation. - msi: automation: Implement StringList::_NewEnum. - msi/tests: automation: Installer::InstallProduct, remove a registry key set by Wine but not native. - msi/tests: automation: Test Installer::Products before and after InstallProduct, check product is not/is installed. - msi: Make MsiEnumProducts enumerate products, not features. - msi: automation: Append copyright notice. - shell32/tests: Add tests for ShellExecute DDE behavior. - shell32: Fix execute_from_key to conform to native behavior. - shell32/tests: Add tests for default DDE application name. - shell32: Handle default DDE application names. - shell32/tests: Remove duplicate code. - comctl32: imagelist: Fix simultaneous selection of one bitmap into two device contexts. - -Mounir IDRASSI (6): - crypt32: Fix crash in CertGetCertificateContextProperty when querying length of a hash property. - crypt32: Stub implementation of CryptFindLocalizedName. - crypt32: Stub implementation of CertGetCertificateChain. - rsaenh: Fix crash in RSAENH_CPVerifySignature if pbSignature is set to NULL or if dwSigLen is lesser than the expected value. - crypt32: Fix CertAddCertificateContextToStore when called with CERT_STORE_ADD_USE_EXISTING. - winscard: Small initial stub implementation. - -Nigel Liang (1): - shlwapi: Stub implementation for SHSetTimerQueueTimer. - -Paul Vriens (2): - ole32/tests: Check for correct return value. - advpack/tests: Don't hardcode the system directory. - -Peter Oberndorfer (4): - dbghelp: Minor cleanup. - ntdll: Fix up instruction pointer in context inside raise_exception. - winedbg: Show some info for msvcrt C++ exceptions. - winedbg: Only check for break/watch points on first chance exceptions. - -Ralf Beck (2): - winealsa.drv: Add midi realtime and midi common messages on midi input. - winealsa.drv: Add missing offset of pitch bender in midi input. - -Rob Shearman (43): - ole32: Fix CoUninitialize to only free libraries that return S_OK from DllCanUnloadNow. - ole32: Don't lookup the address for the DllGetClassObject function for ole32.dll in the apartment loaded dll list. - server: Add the logon SID to the default admin token's groups. - ole32: Create host apartments to enable isolation of objects of incompatible threading models. - ole32: Fix reading from an HGLOBALStreamImpl with an invalid HGLOBAL. - ole32: Fix hosting in main apartments. - wininet: Add support for SSPI authentication for HTTP. - wininet: Implement basic non-proxy authentication. - ole32: Handle MSHLFLAGS_TABLEWEAK and MSHLFLAGS_TABLESTRONG when marshaling a proxy. - ole32: Make proxy_manager_get_remunknown AddRef the return IRemUnknown object. - ole32: The identity functions can be used from apartments other than the one the proxy was unmarshaled into. - ole32: Remove a useless trace. - ole32: Add spec entry for CoRegisterSurrogateEx. - ole32: Fix some races in the global interface table implementation. - ole32: Add more tests for global interface table functions. - ole32: Allow the getting of different interfaces from the global interface table than that with what the object was registered with. - ole32: Remove spurious AddRef of returned object on retrieval of an interface from the global interface table. - hlink: Fix HlinkCreateFromString to create a URL moniker if the input target is a URL. - urlmon: Fix a typo in URLMonikerImpl_Save. - urlmon: The persisted version of URL monikers should be size of URL - shlwapi: Add a slash to the URL if there is no path component. - hlink: Improve the saving of hlinks by documenting the unknown header values and saving out more data. - hlink: Improve the loading of hlinks. - mlang: Implement ConvertINetString. - secur32: Fix the dwVersion field in the security function tables returned by InitSecurityInterfaceA/W. - secur32: Fix the wrapper InitializeSecurityContextA/W functions to handle phContext and phNewContext parameters being optional for some SSPs. - secur32: Make the NTLM SSP cope with a NULL phCredential parameter when InitializeSecurityContext is called more than once. - secur32: Don't set the output buffer type in NTLM's IntializeSecurityContextA/W. - secur32: Fix NTLM's InitializeSecurityContextA/W to be flexible with the index of the token buffer in both the input and output buffer descriptions. - setupapi: Add a FIXME in SetupCopyOEMInfW for when we should be copying a catalog file. - wininet: Pass context to InitializeSecurityContext in second parameter. - wininet: Fix basic authentication by putting Basic directing into the scheme field, as the pszAuthValue can have an optional realm string appended. - wininet: Cope with non-nul-terminated header strings being passed to HttpSendRequestW. - wininet: Don't close the connection if the caller passes in zero for the number of bytes to be read. - wininet: Add a new NETCON_query_data_available function. - server: Move most of the duplicate_token request to a new function, token_duplicate, to enable the code to be used inside wineserver. - server: When starting a new process, use the token from the calling process, if one exists. - oleaut32: For automatic-value-getting in ITypeInfo::Invoke, it doesn't matter what flag(s) the function was executed with, just what type of function is being invoked. - include: Fix a typo in wincred.h. - oleaut32: Fix the references in function descriptions returned for dual IDispatch interfaces. - widl: A structure with variance, but without conformance should be a complex struct instead of a conformant, varying struct. - widl: RPC_FC_BIND_PRIMITIVE is a base type so reverse an if statement - widl: Set current_structure when writing out structure members to - -Robert Reif (1): - dsound: Add missing interface ID. - -Rolf Kalbermatter (4): - advapi32: Add service state request definitions. - advapi32: Add access flags to service handle data. - advapi32: Fix return value to indicate error when NULL string is passed in. - advapi32: Return error on NULL service name to GetServiceDisplayNameA/W. - -Stefan Dösinger (8): - ddraw: Make the ddraw list lock a global dll lock. - ddraw: Hold the lock in creation functions. - ddraw: Hold the dll lock in IDirectDraw methods. - ddraw: Hold the lock in IDirectDrawSurface methods. - ddraw: Check the validy of IDirectDrawSurface::BltFast parameters. - ddraw: Hold the lock in IDirect3DX methods. - wined3d: Don't mess with nv texture shaders if its not supported. - wined3d: Keep GL_TEXTURE_2D enabled when using dummy textures. - -Stefan Leichter (1): - advapi32: Added implementation of RegDeleteTreeA/W. - -Thomas Spear (1): - wine.inf: Add uninstall key. - -Tim Schwartz (1): - net.exe: Add NET START command. - -Vitaliy Margolen (4): - dinput: Prevent race between destroying the hook window and unloading the dll. - ntdll: Implement RtlWriteRegistryValue and forward ntoskrnl to it. - wine.inf: Create fake dll for iexplore.exe. - user32/test: Add few tests for messages sent from SetForegroundWindow(). - --- -Alexandre Julliard -julliard@winehq.org +This is release 0.9.39 of Wine, a free implementation of Windows on Unix. + +What's new in this release: + - Many MSHTML improvements. + - Several improvements to the sound support. + - A number of Winsock fixes. + - Several new supported constructs in the IDL compiler. + - Many Direct3D threading fixes. + - Lots of bug fixes. + +Because of lags created by using mirrors, this message may reach you +before the release is available at the public sites. The sources will +be available from the following locations: + + http://ibiblio.org/pub/linux/system/emulators/wine/wine-0.9.39.tar.bz2 + http://prdownloads.sourceforge.net/wine/wine-0.9.39.tar.bz2 + +Binary packages for various distributions will be available from: + + http://www.winehq.org/site/download + +You will find documentation on + + http://www.winehq.org/site/documentation + +You can also get the current source directly from the git or CVS +repositories. Check respectively http://www.winehq.org/site/git or +http://www.winehq.org/site/cvs for details. + +If you fix something, please submit a patch; instructions on how to do +this can be found at http://www.winehq.org/site/sending_patches + +Wine is available thanks to the work of many people. See the file +AUTHORS in the distribution for the complete list. + +---------------------------------------------------------------- + +Changes since 0.9.38: + +Alex Villacís Lasso (6): + oleaut32: Support for VT_DISPATCH in VarAbs. + oleaut32: Support for VT_DISPATCH in VarNot. + oleaut32: Support for VT_DISPATCH in VarFix. + oleaut32: Support for VT_DISPATCH in VarInt. + oleaut32: Support for VT_DISPATCH in VarNeg. + oleaut32: Support for VT_DISPATCH in VarRound. + +Alexander Nicolaysen Sørnes (12): + wordpad: Split code into set_caption function. + wordpad: Store file name globally. + wordpad: Add file saving support. + wordpad: Improve file reading code. + wordpad: Convert open file dialog to Unicode. + wordpad: Add file saving dialog. + wordpad: Add missing dots to Open menu item. + wordpad: Fix potential buffer overflow. + wordpad: Allow toggling of toolbar. + wordpad: Allow toggling of statusbar. + wordpad: Split toolbar into tool- and formatbar. + wordpad: Use Unicode functions in more places. + +Alexandre Julliard (39): + ws2_32: Reimplement WSASendTo along the lines of NtWriteFile. + ws2_32: Call the I/O completion routine as a user APC. + ws2_32: Simplify the async shutdown handling, and remove a bunch of no longer used code. + ntdll: Queue an intermediate user APC routine to free the async info. + server: Remove the extra apc_arg parameter now that user APCs all require the same arg as the kernel APC. + ws2_32: Queue a proper user APC also on immediate success in WSARecvFrom/WSASendTo. + server: Run async I/O APCs from the SIGUSR1 handler. + ntdll: Get rid of the num_async_io counter in the TEB. + kernel32: Rewrite GetOverlappedResult for the new async I/O behavior. + ws2_32: Rewrite WSAGetOverlappedResult for the new async I/O behavior. + advapi32: Convert the service list to a standard list. + server: Add support for system processes, that can be signaled to exit when all non-system processes are done. + explorer.exe: Mark explorer as a system process. + advapi32: Mark service processes as system processes, and exit when all user processes are done. + winedevice: Accept the shutdown service control. + widl: Get rid of the SIGSEGV handler, this only makes things harder to debug. + winmm: Fix computation of sleep time until next timeout. + winmm: Get rid of the WINE_MM_IDATA global structure, there's only one instance anyway. + cmd.exe: Silence a FIXME. + msvcrt: Set the correct ebp value before calling the local unwind handler. + include: Add DO_NO_IMPORTS ifdefs where needed. + libwine: Set install name to an absolute path for the installed library on Mac OS. + configure: Replace some obsolete macros to avoid warnings. + tools: Upgrade the config.guess/config.sub scripts. + msxml: Don't use VariantClear on an uninitialized variant. + winmm: Convert the timer list to a standard Wine list. + winmm: Maintain the timer list sorted by expiration time. + winmm: Initialize the timer critical section statically. + shell32: Fix contents of string returned in load_path. + shell32: Remove a redundant include. + winecfg: Fix potential null pointer access (spotted by Yaroslav Skorokhodov). + winex11.drv: Glyph width is rounded to 32 bits, make sure to provide enough null data. + comctl32: Remove useless pointer check. + wintrust/tests: Fix the WintrustGetRegPolicyFlags to work right the first time. + widl: Add typecasts for user marshalling routines to avoid compiler warnings. + localspl: Make some functions static. + server: Enable kqueue support on Mac OS >= 10.5 now that it's fixed. + ntdll: Implemented reading of the CDROM TOC on Mac OS. + user32/tests: Avoid strlen in trace. + +Anatoly Lyutin (2): + cmd.exe: Update Russian translation. + user32: tests:msg Add test for switching MDI children. + +Andrew Talbot (7): + msi: Constify some variables. + oleaut32: Fix some typos. + wined3d: Void functions should not return a value. + msi: Constify a variable. + msi: Constify some variables. + msi: Constify some variables. + msrle32: Constify some variables. + +Andrey Turkin (4): + pdh: Stub implementation of pdh.dll. + ntdll: Stub and document IoCompletion APIs. + kernel32: Factor out all kernel32 timeout-conversion snippets to one helper functions. + kernel32: Implement IO completion functions on top of the NT IoCompletion API. + +Aric Stewart (1): + ole32: Implementation of state bits for IStorage. + +Chris Robinson (3): + wined3d: Add a few missing checkGLcall calls. + quartz: Don't return S_FALSE for failed connections. + wined3d: Add missing table entry value. + +Christian Costa (3): + wineoss.drv: Mark every buffer being added. + winealsa.drv: Use correct tests for synthesizer/port enumeration order. + winealsa.drv: Fix compilation with old alsa headers. + +Damjan Jovanovic (1): + ws2_32: getsockname should fail on unbound socket. + +Dan Hipschman (14): + list.h: Add macros for reverse iteration. + widl: Replace get_name with a field reference. + widl: Represent arrays with type_t. + widl: Implement conformant structure handling. + widl: Check for NULL in set_tfswrite. + widl: Fix incomplete struct/union typedef bug. + widl: Simplify correlation descriptor code. + widl: Handle wire_marshal types. + widl: Test structure argument marshalling. + widl: Handle wire_marshal pointer attributes. + widl: Handle embedded interface pointers. + widl: Handle encapsulated unions. + widl: Factor the output functions. + widl: Fix a write_parameters_init bug. + +Detlef Riekenberg (4): + include/winspool: Add more flags for printer drivers. + winspool: Implement AddPortEx. + winspool: Remove outdated comment. + localspl: Implement AddPortEx. + +Dmitry Timoshkov (4): + include/msvcrt: Make sure that __int64 is properly defined on a 64-bit platform. + user32: Do not hardcode cp1252 for an icon/title font. + gdi32: Make BITMAPINFOHEADER biSize check match what other parts of code do. + msi: Simplify the code. + +Evan Stade (9): + gdiplus: Added public headers. + gdiplus: Added beginnings of memory and startup functions. + gdiplus: First pen implementation. + gdiplus: First pen test. + gdiplus: Added first GDI+ graphics implementation. + gdiplus: Implemented GdipDrawLineI. + gdiplus: Implemented GdipDrawRectangleI. + gdiplus: Brush implementation. + gdiplus: Brush tests. + +Francois Gouget (28): + ws2_32: Improve the prototypes Win64 compatibility by replacing long with LONG. + winspool.drv: Fix the AddPortExA/W() export to match the implementation. + programs/cmd: Add missing '\n' to Wine trace. + wined3d: Fix spelling of the state_separateblend() function. + Assorted spelling fixes. + ntdll: Improve the prototypes Win64 compatibility by replacing long with LONG. + winapi_check: Also warn about 'unsigned long's Win64 compatibility problems. + advapi32: Update win32.api to fix the winapi_check warnings. + wined3d: Pass the D3DCB_CreateAdditionalSwapChain() error code to the upper layers (needed for d3d9). + gdiplus: Add missing '\n' in Wine trace. + winapi_check: .exe and .ocx files can also export APIs. + hhctrl.ocx: winapi_check expects the module name to be all uppercase in the documentation. + msdmo: dmoreg.h should include mediaobj.h. + msdmo: Improve the prototypes Win64 compatibility by replacing long with LONG. + secur32: Update win32.api to fix the winapi_check warnings. + Add API documentation stubs to make winapi_check happy. + wintrust/tests: Simplify the code and improve consistency by removing unneeded function typedefs. + wintrust/tests: Fix checks to be more informative when they fail. + gdiplus: Add missing '\n' to ok() calls, Wine traces. + regedit: Move PerformRegAction() and get_file_name() around to eliminate forward references. Make them static. + crypt32: Add missing '\n' to ok() call. + regedit: Remove setAppName() as the application name is hardcoded anyway. + regedit: Remove cruft and make functions static, reordering where necessary to avoid forward declarations. + regedit: If the data for a given value is in an unknown format, then print an error and don't modify the value. + regedit: Make the dword and binary data parsing both more flexible and stricter. + regedit: The registry functions return standard error codes, not HRESULTs. + regedit: Having garbage after the dash in '"foo"=-' is not valid. + regedit: Modify getRegClass() to avoid dubious comparisons and casts between HKEYs and error codes. + +Glenn Wurster (1): + sfc_os: Add stub implementation for SfcIsKeyProtected. + +H. Verbeet (15): + wined3d: Return WINED3DERR_INVALIDCALL in DrawIndexedPrimitive if no index buffer is set. + d3d9: Add a test for calling DrawIndexedPrimitive with a NULL index buffer. + wined3d: TRACE the Color parameter in IWineD3DDeviceImpl_Clear. + wined3d: Rename IWineD3DDeviceImpl_SetBasevertexIndex to IWineD3DDeviceImpl_SetBaseVertexIndex. + wined3d: Make sure the color buffer is not modified by depth_blt(). + wined3d: Get rid of the BaseVertexIndex parameter to IWineD3DDeviceImpl_SetIndices, use SetBaseVertexIndex instead. + wined3d: Add IWineD3DDevice_GetBaseVertexIndex to retrieve the base vertex index. + wined3d: Get rid of the pBaseVertexIndex parameter to IWineD3DDeviceImpl_GetIndices, use GetBaseVertexIndex instead. + wined3d: Turn off filtering for FBO attachments, update the texture's states array. + wined3d: Fix GLSL definitions. + wined3d: Pass NULL for the stateBlock parameter to shader_get_registers_used() in IWineD3DVertexShaderImpl_SetFunction. + wined3d: For ps_2_0 and higher, call shader_get_registers_used() in IWineD3DPixelShaderImpl_SetFunction. + wined3d: Take the texUnitMap into account when loading shader_glsl_load_psamplers(). + wined3d: Call IWineD3DDeviceImpl_FindTexUnitMap() when activating the context. + wined3d: Add wined3d vertex sampler definitions. + +Hans Leidekker (3): + mlang: Implement IMultiLanguage::GetLcidFromRfc1766. + wininet: More lenient parsing of the passive mode server response. + gdi32: Add some tests for BITMAPINFOHEADER biSize checks. + +Huw Davies (4): + mshtml: Don't release the factory if we failed to get it. + oleaut32: Fixes for the PICTYPE_UNINITIALIZED case. + riched20: Don't mess with the caret if we don't have focus. + winex11.drv: XRenderCompositeText has a problem with 0x0 glyphs, so we'll pretend they're 1x1. + +Hwang YunSong(황윤성) (2): + credui: New Korean resource. + shell32: Updated Korean resource. + +Jacek Caban (58): + urlmon: Don't pass query part of URL to CreateUrlCacheEntryW. + mshtml: Added support for coexisting different Gecko versions installation. + mshtml: Switch to Wine Gecko 0.1.0. + mshtml: Fix debug trace. + mshtml: Added command table for CGID_MSHTML commands. + mshtml: Move IDM_FONTSIZE, IDM_FONTNAME and IDM_FORECOLOR to edit state command table. + mshtml: Move more commands to command table. + mshtml: Move more commands to editor command table. + mshtml: Move remaining commands to tables. + mshtml: Use command table for IDM_COPY, IDM_CUT and IDM_PASTE query. + mshtml: Move justify queries to command table. + mshtml: Move edit command queries to the command table. + mshtml: Move remaining status queries to command tables. + mshtml: Make [get|set]_font_size static. + mshtml: Move setup_ns_editing to nsembed.c. + mshtml: Forward all IsDirty implementations to one function. + mshtml: Don't crash in load_stream if Gecko is not available. + mshtml: Don't do anything in exec_editmode if edit mode is already set. + mshtml: Use IOleCommandTarget::Exec to implement context menu. + mshtml: Call UpdateUI and Exec(OLECMDID_UPDATECOMMANDS) from timer callback. + mshtml: Move Exec(OLECMDID_SETTITLE) call to separated function and use it in on_timer. + mshtml: Call update_doc in exec_editmode. + mshtml: Added test of callbacks called from document timer. + mshtml: Pump messages of all windows in test_download. + mshtml: Improve IDM_JUSTIFYLEFT query status. + mshtml: Push TASK_PARSECOMPLETE in load event if Gecko is available. + mshtml: Set FALSE useCapture for editor's keypress event listener. + mshtml: Don't check out variant type in exec_fontname. + mshtml: Set default fontname to 'Times New Roman'. + mshtml: Added Exec(IDM_FONTNAME) tests. + mshtml: Added more command tests. + mshtml: Call update_doc in editor commands. + mshtml: Call update_doc in init_editor. + mshtml: Store editor controller in NSContainer. + mshtml: Added editor mode up key implementation. + mshtml: Added editor mode down key implementation. + mshtml: Reimplement editor mode right key using command controller. + mshtml: Reimplement editor mode left key using command controller. + mshtml: Set default scrollbar preferences. + mshtml: Added IDM_RESPECTVISIBILITY_INDESIGN command stub implementation. + mshtml: Silence invalid FIXME for ELEMENT_DOCUMENT_FRAGMENT_NODE in nsnode_to_nsstring_rec. + mshtml: Added COMMENT_NODE implementation in nsnode_to_nsstring_rec. + mshtml: Added IHTMLStyle::get_fontFamily implementation. + mshtml: Added IDM_COMPOSESETTINGS implementation. + mshtml: Added semi stub IsDirty implementation. + mshtml: Added IsDirty tests. + mshtml: Added edit mode IDM_COPY implementation. + mshtml: Added edit mode IDM_PASTE implementation. + mshtml: Added edit mode IDM_CUT implementation. + mshtml: Call Exec(CGID_ShellDocView, 37) in exec_editmode. + mshtml: Move createing URL moniker to separated function. + mshtml: Move Exec(CGID_ShellDocView, 37) call to match native. + mshtml: Store current moniker in HTMLDocument. + mshtml: Added GetCurMoniker implementation. + mshtml: Don't crash in set_font_size if range_cnt is 0. + mshtml: Added get_URL implementation. + mshtml: Use IOleInPlaceSiteEx if available. + mshtml: Added IOleInPlaceSiteEx tests. + +James Hawkins (8): + msi: Use fetch_int to reduce code duplication and access to table data. + msi: Reduce the amount of code that directly accesses table data. + msi: Represent table data as bytes instead of shorts. + msi: Add support for large string tables. + msi: Set the MsiNetAssemblySupport property. + msi: Protect custom actions with a structured exception handler. + msi: Fixed the WriteEnvironmentStrings action. + msi: Set the UserSID and ProductCode properties for deferred custom actions. + +Jason Edmeades (10): + cmd.exe: Move English constants into NLS files. + cmd.exe: Move writing to console into a single function. + cmd.exe: Handle command line as Unicode. + cmd.exe: Convert cmd to Unicode. + cmd.exe: Fix 'help garbage' command post-unicode support. + cmd.exe: Fix handling of malformed environment variable expansion. + cmd.exe: Change from main to wmain. + cmd.exe: Fix dir /w. + xcopy.exe: Convert from main to wmain. + cmd.exe: Add support for cmd.exe /u (Unicode from internal pgms). + +Jeff Latimer (2): + shell32: Fix possible dereference of NULL ptr. + msi: Use the langbuff len rather than the versionbuff len when allocating the langbuff. + +John Klehm (1): + include: Allow port.h to build on gcc4. + +Juan Lang (10): + comdlg32: Initialize file dialog controls before creating dialog. + comdlg32: Check file dialog's FOIShellView before accessing it. + crypt32: Add CryptMsg* stubs. + crypt32: Implement CERT_AUTHORITY_KEY_ID2_INFO encoding/decoding. + crypt32: Implement PKCS_CONTENT_INFO encoding/decoding. + crypt32: Separate set encoding into a separate function. + crypt32: Implement PKCS_ATTRIBUTE encoding/decoding. + crypt32: Use CRYPT_EncodeEnsureSpace to allocate memory when necessary. + crypt32: Implement PKCS_ATTRIBUTES encoding/decoding. + crypt32: Implement PKCS7_SIGNER_INFO encoding/decoding. + +Kai Blin (1): + ws2_32: Add mapping for STATUS_OBJECT_TYPE_MISMATCH to WSAENOTSOCK. + +Kolbjørn Fredheim (1): + winex11.drv: Echo the video mode requested in the error message when not finding a matching mode. + +Lei Zhang (7): + wined3d: Various spelling fixes. + include: Add missing definitions to shlobj.h. + shell32: Start implementing BIF_USENEWUI. + user32: Improve cut/copy/paste behavior of password edit boxes. + comdlg32: Move file dialog resizing code into its own function. + user32: Remove a unused variable from ES_PASSWORD test. + comctl32: Make modal property sheets modal. + +Louis Lenders (1): + shell32: Add stub for SHUpdateRecycleBinIcon. + +Maarten Lankhorst (8): + dsound: Fix buffer caps. + dsound: Recalculate 3d buffer on SetVolume. + dsound: Disable property sets if hardware doesn't support it. + winmm: Use unix fd's instead of win32 events to sync internal events in timer. + dsound: Unset variable on failure in IKsBufferPropertySetImpl_Create. + rsaenh: Allow CRYPT_NEWKEYSET and CRYPT_VERIFYCONTEXT at same time when acquiring context. + winealsa: Detach directsound implementation from waveout implementation. + dsound: Use TIME_KILL_SYNCHRONOUS on sound timer. + +Marcus Meissner (1): + quartz: Added some error checking on failure to CreateClassEnumerator. + +Markus Goemmel (1): + comctl32/listview.c: Ownerdraw font problem during focus change fixed. + +Michael Stefaniuc (8): + wingdi.h: Multi-character character constants are implementation specific according to the C standard. Use a hex number instead. + capi2032: Fix non-ANSI function declaration. Found by sparse. + gphoto2.ds: Fix non-ANSI function declaration. Found by sparse. + wrc: Fix non-ANSI function declaration. Found by sparse. + winedos: Fix printf format warnings introduced by the TEB change in thread.h. + psapi: GetPerformanceInfo() calls down to the wrong ntdll function. Found by sparse. + psapi: GetWsChanges() calls down to the wrong ntdll function. Found by sparse. + wrc: Fix redundant checks for NULL before free(). Found by Smatch. + +Mikołaj Zalewski (2): + kernel: Fix clearing of memory in LocalReAlloc16(..., LMEM_ZEROMEMORY). + comctl32: listview: Make LVM_GETCOLUMNWIDTH query the header control instead of using cached data. + +Misha Koshelev (29): + msi: automation: Remove duplicate error messages on unknown dispid. + msi: automation: Add missing operand for evaluation. + msi: msiserver.idl: Maintain spacing as spaces, not tabs. + msi: automation: Remove redundant VariantClear(pVarResult). + msi: automation: Database::SummaryInformation is a propget, not a method. + msi/tests: automation: Add tests for SummaryInfo::Property, get. + msi: automation: Fix SummaryInfo::Property get to conform to native. + msi/tests: suminfo: Add tests for MsiSummaryInfoGetProperty for unknown property values. + msi: suminfo: Return ERROR_UNKNOWN_PROPERTY as native. + msi: automation: SummaryInfo::Property, remove all specific instances to PIDs. + msi/tests: automation: Add test for Installer::OpenDatabase. + msi: automation: Add MsiOpenDatabaseMode enum. + msi/tests: automation: Add tests for SummaryInfo::Property, put. + msi: automation: Implement SummaryInfo::Property, put. + msi/tests: automation: Add tests for SummaryInfo::PropertyCount. + msi: automation: Implement SummaryInfo::PropertyCount. + widl: Add support for vararg attribute. + oleaut32/tests: Add tests for IDispatch::Invoke of vararg function. + oleaut32: Add support for vararg functions in ITypeInfo::Invoke. + winebrowser: Add DDE support. + wine.inf: Use DDE for winebrowser as native. + shell32/tests: Simplify DDE thread and message loop. + shell32/tests: Save threadid from CreateThread as required by winme/98/95. + shell32/tests: Use ShellExecuteEx with SEE_MASK_FLAG_DDEWAIT and SEE_MASK_FLAG_NO_UI for DDE tests. + shell32/tests: Expand default DDE application name tests to conform to win98. + shell32/tests: Allow testing for arbitrary number of command line arguments in DDE tests. + shell32/tests: Add test for unquoted %1 in command and ddeexec keys. + setupapi/tests: Add basic tests for InstallHinfSectionA/W command line processing. + setupapi: Handle unquoted paths in InstallHinfSection as native. + +Nigel Liang (1): + shell32: Conformance tests for unicode filenames and fix a bug for file deletion. + +Paul Vriens (6): + wintrust/tests: Start of some crypt tests for wintrust. + wintrust/tests: Use A instead of W-calls. + comdlg32/tests: Skip some not implemented functions on win98. + crypt32/tests: Skip tests if we don't have enough rights. + crypt32/tests: Skip tests if we don't have enough rights. + crypt32/tests: Vista uses a different error code. + +Phil Costin (6): + wined3d: Add GL_EXT_texture_sRGB constants and corresponding CheckDeviceFormat query. + wined3d: Extend the D3DFMT table to include gamma corrected formats. + wined3d: Add support for loading gamma corrected textures. + wined3d: Enable the loading and reloading of gamma corrected textures. + wined3d: Add gamma linerization support for D3DFMT_A4R4G4B4. + wined3d: Remove a duplication in device.c. + +Ralf Beck (1): + winealsa.drv: Mark every sysex buffer being added. + +Rob Shearman (6): + wininet: Send the correct callbacks during InternetReadFileExA calls. + wininet: Implement NTLM support for proxy authentication. + uuid: Add hlink CLSIDs. + mshtml: Add some error handling to hlink_frame_navigate. + mshtml: Use the implementation of IHlink in hlink.dll instead of duplicating it. + include: Add HTMLTextContainerEvents dispinterface and necessary dispids. + +Stefan Dösinger (31): + wined3d: Do not enable GL_APPLE_client_storage for the dummy textures. + ddraw: Hold the lock in IDirect3DDevice methods. + ddraw: Hold the lock in IDirectDrawClipper methods. + ddraw: Hold the lock in IDirectDrawGammaControl methods. + ddraw: Hold the lock in IDirect3DMaterial methods. + ddraw: Hold the lock in IDirectDrawPalette methods. + ddraw: Hold the lock in IDirect3DLight methods. + ddraw: Hold the lock in IDirect3DTexture methods. + ddraw: Hold the lock in IDirect3DVertexBuffer methods. + ddraw: Hold the Lock in IDirect3DViewport methods. + d3d8: Add a dll global critical section. + d3d8: Hold the DLL lock in IDirect3D8 methods. + wined3d: Store the gl information in a per adapter structure and initialize it only once. + wined3d: Store the adapter driver and description in the adapter. + wined3d: Find possible fbconfis on dll load time, use them in CheckDepthStencilMatch. + d3d8: Hold the lock in IDirect3DDevice8 methods. + wined3d: Some render target->texture blit context handling. + wined3d: Do not set the dynlock flag on all created surfaces. + d3d8: Hold the lock in cubetexture methods. + d3d8: Hold the lock in IDirect3DIndexBuffer8 methods. + d3d8: Hold the lock in IDirect3DSurface8 methods. + d3d8: Hold the lock in swapchain methods. + d3d8: Hold the lock in IDirect3DVertexBuffer methods. + d3d8: Hold the lock in volume methods. + d3d8: Hold the lock in IDirect3DVolumeTexture8 methods. + d3d8: Hold the lock in IDirect3Dtexture8 methods. + wined3d: Only swap system memory resources of front and back buffer if they have the same size. + wined3d: Implement vertical refresh sync. + wined3d: Present does not clear the depth stencil. + wined3d: DDraw surfaces are QWORD aligned. + d3d9: Add a dll global critical section. + +Stefan Leichter (3): + crypt32: Replace CRYPT_RecurseDeleteKey with RegDeleteTreeW. + qcap: Replace DeleteEntireSubKey with RegDeleteTreeW. + winspool.drv: Replace WINSPOOL_SHDeleteKeyW with RegDeleteTreeW. + +Ulrich Czekalla (2): + ole32: Remove stack-based string buffer inFileMonikerImpl_DecomposePath. + opengl: Use get_glxdrawable to grab the drawable. + +Vedran Rodic (1): + winmm: Fix PlaySound so it doesn't block when another sound is already playing. + +Vitaliy Margolen (3): + dinput: Make sure to unacquire device before freeing it. + dinput: Acquire device only if specified window has focus in foreground coop level. + atl: Use CallWindowProc instead of calling old window proc directly. + +-- +Alexandre Julliard +julliard@winehq.org diff --git a/ChangeLog b/ChangeLog index a15af7b2ff3..2b947c71325 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,1673 @@ +2007-06-14 Evan Stade + + * dlls/gdiplus/tests/Makefile.in, dlls/gdiplus/tests/brush.c: + gdiplus: Brush tests. + + * dlls/gdiplus/Makefile.in, dlls/gdiplus/brush.c, + dlls/gdiplus/gdiplus.spec, dlls/gdiplus/gdiplus_private.h: + gdiplus: Brush implementation. + +2007-06-14 Jason Edmeades + + * programs/cmd/wcmdmain.c: + cmd.exe: Add support for cmd.exe /u (Unicode from internal pgms). + +2007-06-15 Kolbjørn Fredheim + + * dlls/winex11.drv/settings.c: + winex11.drv: Echo the video mode requested in the error message when not + finding a matching mode. + +2007-06-14 Lei Zhang + + * dlls/comctl32/propsheet.c: + comctl32: Make modal property sheets modal. + +2007-06-14 Misha Koshelev + + * dlls/setupapi/install.c, dlls/setupapi/tests/install.c: + setupapi: Handle unquoted paths in InstallHinfSection as native. + + * dlls/setupapi/tests/Makefile.in, dlls/setupapi/tests/install.c: + setupapi/tests: Add basic tests for InstallHinfSectionA/W command line + processing. + +2007-06-15 Alexandre Julliard + + * dlls/user32/tests/edit.c: + user32/tests: Avoid strlen in trace. + + * dlls/ntdll/cdrom.c: + ntdll: Implemented reading of the CDROM TOC on Mac OS. + + * server/fd.c: + server: Enable kqueue support on Mac OS >= 10.5 now that it's fixed. + +2007-06-15 Dmitry Timoshkov + + * dlls/msi/action.c: + msi: Simplify the code. + +2007-06-14 James Hawkins + + * dlls/msi/custom.c: + msi: Set the UserSID and ProductCode properties for deferred custom actions. + +2007-06-14 Andrew Talbot + + * dlls/msrle32/msrle32.c: + msrle32: Constify some variables. + +2007-06-14 Jacek Caban + + * dlls/mshtml/tests/htmldoc.c: + mshtml: Added IOleInPlaceSiteEx tests. + + * dlls/mshtml/olewnd.c, dlls/mshtml/view.c: + mshtml: Use IOleInPlaceSiteEx if available. + +2007-06-14 Lei Zhang + + * dlls/user32/tests/edit.c: + user32: Remove a unused variable from ES_PASSWORD test. + +2007-06-14 Ulrich Czekalla + + * dlls/winex11.drv/opengl.c: + opengl: Use get_glxdrawable to grab the drawable. + +2007-06-14 Damjan Jovanovic + + * dlls/ws2_32/socket.c, dlls/ws2_32/tests/sock.c: + ws2_32: getsockname should fail on unbound socket. + +2007-06-14 John Klehm + + * include/wine/port.h: + include: Allow port.h to build on gcc4. + +2007-06-14 Dan Hipschman + + * tools/widl/proxy.c, tools/widl/server.c, tools/widl/typegen.c, + tools/widl/typegen.h: + widl: Fix a write_parameters_init bug. + + * tools/widl/client.c, tools/widl/proxy.c, tools/widl/server.c, + tools/widl/typegen.c, tools/widl/typegen.h: + widl: Factor the output functions. + + * tools/widl/parser.y, tools/widl/typegen.c: + widl: Handle encapsulated unions. + + * tools/widl/parser.y, tools/widl/typegen.c: + widl: Handle embedded interface pointers. + +2007-06-13 Alexander Nicolaysen Sørnes + + * programs/wordpad/wordpad.c: + wordpad: Use Unicode functions in more places. + +2007-06-14 Francois Gouget + + * programs/regedit/regproc.c: + regedit: Modify getRegClass() to avoid dubious comparisons and casts between + HKEYs and error codes. + + * programs/regedit/regproc.c: + regedit: Having garbage after the dash in '"foo"=-' is not valid. + Don't complain if the value already does not exist. + + * programs/regedit/regproc.c: + regedit: The registry functions return standard error codes, not HRESULTs. + + * programs/regedit/regproc.c: + regedit: Make the dword and binary data parsing both more flexible and stricter. + Make sure it does not modify the value if the data is invalid. + + * programs/regedit/regproc.c: + regedit: If the data for a given value is in an unknown format, then print an + error and don't modify the value. + Note that '"foo"=' is not valid. + + * programs/regedit/listview.c, programs/regedit/regedit.c, + programs/regedit/regproc.c, programs/regedit/regproc.h: + regedit: Remove cruft and make functions static, reordering where necessary + to avoid forward declarations. + Remove the command parameter of processRegLines() as it can only be used with + processRegEntry(). + + * programs/regedit/regedit.c, programs/regedit/regproc.c, + programs/regedit/regproc.h: + regedit: Remove setAppName() as the application name is hardcoded anyway. + +2007-06-14 Francois Gouget + + * dlls/crypt32/tests/encode.c: + crypt32: Add missing '\n' to ok() call. + +2007-06-14 Lei Zhang + + * dlls/comdlg32/filedlg.c: + comdlg32: Move file dialog resizing code into its own function. + +2007-06-13 Lei Zhang + + * dlls/user32/edit.c, dlls/user32/tests/edit.c: + user32: Improve cut/copy/paste behavior of password edit boxes. + +2007-06-13 James Hawkins + + * dlls/msi/action.c: + msi: Fixed the WriteEnvironmentStrings action. + +2007-06-10 Stefan Dösinger + + * dlls/d3d9/d3d9_main.c, dlls/d3d9/d3d9_private.h: + d3d9: Add a dll global critical section. + +2007-06-08 Stefan Dösinger + + * dlls/wined3d/context.c, dlls/wined3d/device.c, dlls/wined3d/directx.c, + dlls/wined3d/surface.c, dlls/wined3d/wined3d_private.h: + wined3d: DDraw surfaces are QWORD aligned. + +2007-06-14 Stefan Dösinger + + * dlls/d3d8/tests/visual.c, dlls/d3d9/tests/visual.c, + dlls/wined3d/swapchain.c: + wined3d: Present does not clear the depth stencil. + +2007-06-03 Stefan Dösinger + + * dlls/wined3d/directx.c, dlls/wined3d/surface.c, + dlls/wined3d/swapchain.c, dlls/wined3d/wined3d_private.h, + include/ddraw.h, include/wine/wined3d_gl.h, + include/wine/wined3d_types.h: + wined3d: Implement vertical refresh sync. + +2007-05-28 Stefan Dösinger + + * dlls/wined3d/swapchain.c: + wined3d: Only swap system memory resources of front and back buffer if they + have the same size. + +2007-06-13 Andrew Talbot + + * dlls/msi/msipriv.h, dlls/msi/query.h, dlls/msi/table.c, + dlls/msi/update.c, dlls/msi/where.c: + msi: Constify some variables. + +2007-06-13 Maarten Lankhorst + + * dlls/dsound/dsound.c: + dsound: Use TIME_KILL_SYNCHRONOUS on sound timer. + +2007-06-14 Alexandre Julliard + + * dlls/localspl/localmon.c: + localspl: Make some functions static. + +2007-06-14 Detlef Riekenberg + + * dlls/localspl/localmon.c: + localspl: Implement AddPortEx. + +2007-06-13 Michael Stefaniuc + + * tools/wrc/parser.y: + wrc: Fix redundant checks for NULL before free(). Found by Smatch. + +2007-06-13 James Hawkins + + * dlls/msi/Makefile.in, dlls/msi/custom.c: + msi: Protect custom actions with a structured exception handler. + +2007-06-13 Rob Shearman + + * include/mshtmdid.h, include/mshtml.idl: + include: Add HTMLTextContainerEvents dispinterface and necessary dispids. + +2007-06-13 Phil Costin + + * dlls/wined3d/device.c: + wined3d: Remove a duplication in device.c. + +2007-06-14 Paul Vriens + + * dlls/crypt32/tests/sip.c: + crypt32/tests: Vista uses a different error code. + +2007-06-13 Paul Vriens + + * dlls/crypt32/tests/sip.c: + crypt32/tests: Skip tests if we don't have enough rights. + +2007-06-13 Hans Leidekker + + * dlls/gdi32/tests/bitmap.c: + gdi32: Add some tests for BITMAPINFOHEADER biSize checks. + +2007-06-13 Francois Gouget + + * programs/regedit/regedit.c, programs/regedit/regproc.c, + programs/regedit/regproc.h: + regedit: Move PerformRegAction() and get_file_name() around to eliminate + forward references. Make them static. + +2007-06-13 Francois Gouget + + * dlls/gdiplus/pen.c, dlls/gdiplus/tests/pen.c: + gdiplus: Add missing '\n' to ok() calls, Wine traces. + +2007-06-14 Alexandre Julliard + + * tools/widl/typegen.c: + widl: Add typecasts for user marshalling routines to avoid compiler warnings. + +2007-06-13 Dan Hipschman + + * dlls/rpcrt4/tests/server.c, dlls/rpcrt4/tests/server.idl, + tools/widl/typegen.c: + widl: Handle wire_marshal pointer attributes. + + * dlls/rpcrt4/tests/server.c, dlls/rpcrt4/tests/server.idl: + widl: Test structure argument marshalling. + + * dlls/rpcrt4/tests/server.c, dlls/rpcrt4/tests/server.idl, + tools/widl/client.c, tools/widl/header.c, tools/widl/parser.y, + tools/widl/proxy.c, tools/widl/server.c, tools/widl/typegen.c, + tools/widl/typegen.h, tools/widl/widltypes.h: + widl: Handle wire_marshal types. + +2007-06-06 Anatoly Lyutin + + * dlls/user32/tests/msg.c: + user32: tests:msg Add test for switching MDI children. + +2007-06-13 Paul Vriens + + * dlls/crypt32/tests/oid.c: + crypt32/tests: Skip tests if we don't have enough rights. + +2007-06-13 Dmitry Timoshkov + + * dlls/gdi32/dib.c: + gdi32: Make BITMAPINFOHEADER biSize check match what other parts of code do. + +2007-06-12 Rob Shearman + + * dlls/mshtml/hlink.c, dlls/mshtml/mshtml_private.h, + dlls/mshtml/navigate.c: + mshtml: Use the implementation of IHlink in hlink.dll instead of duplicating it. + +2007-06-02 Maarten Lankhorst + + * dlls/winealsa.drv/dsoutput.c, dlls/winealsa.drv/waveout.c: + winealsa: Detach directsound implementation from waveout implementation. + +2007-06-13 Maarten Lankhorst + + * dlls/rsaenh/rsaenh.c, dlls/rsaenh/tests/rsaenh.c: + rsaenh: Allow CRYPT_NEWKEYSET and CRYPT_VERIFYCONTEXT at same time when + acquiring context. + +2007-06-13 Alexandre Julliard + + * dlls/wintrust/tests/register.c: + wintrust/tests: Fix the WintrustGetRegPolicyFlags to work right the first time. + +2007-06-12 Francois Gouget + + * dlls/wintrust/tests/register.c: + wintrust/tests: Fix checks to be more informative when they fail. + + * dlls/wintrust/tests/register.c: + wintrust/tests: Simplify the code and improve consistency by removing unneeded + function typedefs. + +2007-06-12 Francois Gouget + + * dlls/atl/atl_main.c, dlls/gdiplus/gdiplus.c: + Add API documentation stubs to make winapi_check happy. + +2007-06-12 Juan Lang + + * dlls/crypt32/decode.c, dlls/crypt32/encode.c, + dlls/crypt32/tests/encode.c: + crypt32: Implement PKCS7_SIGNER_INFO encoding/decoding. + + * dlls/crypt32/decode.c, dlls/crypt32/encode.c, + dlls/crypt32/tests/encode.c: + crypt32: Implement PKCS_ATTRIBUTES encoding/decoding. + + * dlls/crypt32/encode.c: + crypt32: Use CRYPT_EncodeEnsureSpace to allocate memory when necessary. + + * dlls/crypt32/decode.c, dlls/crypt32/encode.c, + dlls/crypt32/tests/encode.c: + crypt32: Implement PKCS_ATTRIBUTE encoding/decoding. + + * dlls/crypt32/encode.c: + crypt32: Separate set encoding into a separate function. + + * dlls/crypt32/decode.c, dlls/crypt32/encode.c, + dlls/crypt32/tests/encode.c: + crypt32: Implement PKCS_CONTENT_INFO encoding/decoding. + + * dlls/crypt32/decode.c, dlls/crypt32/encode.c, + dlls/crypt32/tests/encode.c: + crypt32: Implement CERT_AUTHORITY_KEY_ID2_INFO encoding/decoding. + +2007-06-12 H. Verbeet + + * include/wine/wined3d_types.h: + wined3d: Add wined3d vertex sampler definitions. + + * dlls/wined3d/context.c, dlls/wined3d/device.c, + dlls/wined3d/wined3d_private.h: + wined3d: Call IWineD3DDeviceImpl_FindTexUnitMap() when activating the context. + + * dlls/wined3d/glsl_shader.c: + wined3d: Take the texUnitMap into account when loading + shader_glsl_load_psamplers(). + +2007-06-12 Phil Costin + + * dlls/wined3d/directx.c, dlls/wined3d/utils.c: + wined3d: Add gamma linerization support for D3DFMT_A4R4G4B4. + +2007-06-12 Evan Stade + + * dlls/gdiplus/gdiplus.spec, dlls/gdiplus/graphics.c: + gdiplus: Implemented GdipDrawRectangleI. + + * dlls/gdiplus/gdiplus.spec, dlls/gdiplus/graphics.c: + gdiplus: Implemented GdipDrawLineI. + +2007-06-13 Alexandre Julliard + + * dlls/comctl32/tab.c: + comctl32: Remove useless pointer check. + +2007-06-12 James Hawkins + + * dlls/msi/package.c: + msi: Set the MsiNetAssemblySupport property. + +2007-06-12 Andrew Talbot + + * dlls/msi/msipriv.h, dlls/msi/query.h, dlls/msi/select.c, dlls/msi/sql.y, + dlls/msi/string.c, dlls/msi/suminfo.c: + msi: Constify some variables. + +2007-06-12 Francois Gouget + + * tools/winapi/win32.api: + secur32: Update win32.api to fix the winapi_check warnings. + + * dlls/msdmo/dmoreg.c, include/dmoreg.h, tools/winapi/win32.api: + msdmo: Improve the prototypes Win64 compatibility by replacing long with LONG. + + * include/dmoreg.h: + msdmo: dmoreg.h should include mediaobj.h. + + * dlls/hhctrl.ocx/hhctrl.c: + hhctrl.ocx: winapi_check expects the module name to be all uppercase in the + documentation. + + * tools/winapi/winapi_documentation.pm: + winapi_check: .exe and .ocx files can also export APIs. + + * dlls/gdiplus/gdiplus.c: + gdiplus: Add missing '\n' in Wine trace. + +2007-06-12 Francois Gouget + + * dlls/wined3d/device.c: + wined3d: Pass the D3DCB_CreateAdditionalSwapChain() error code to the upper + layers (needed for d3d9). + +2007-05-27 Stefan Dösinger + + * dlls/d3d8/texture.c: + d3d8: Hold the lock in IDirect3Dtexture8 methods. + + * dlls/d3d8/volumetexture.c: + d3d8: Hold the lock in IDirect3DVolumeTexture8 methods. + + * dlls/d3d8/volume.c: + d3d8: Hold the lock in volume methods. + + * dlls/d3d8/vertexbuffer.c: + d3d8: Hold the lock in IDirect3DVertexBuffer methods. + +2007-05-26 Stefan Dösinger + + * dlls/d3d8/swapchain.c: + d3d8: Hold the lock in swapchain methods. + +2007-06-12 Alexandre Julliard + + * dlls/winex11.drv/xrender.c: + winex11.drv: Glyph width is rounded to 32 bits, make sure to provide enough + null data. + +2007-06-12 Rob Shearman + + * dlls/mshtml/navigate.c: + mshtml: Add some error handling to hlink_frame_navigate. + + * dlls/hlink/hlink_main.c, dlls/uuid/uuid.c: + uuid: Add hlink CLSIDs. + +2007-06-11 Evan Stade + + * dlls/gdiplus/Makefile.in, dlls/gdiplus/gdiplus.spec, + dlls/gdiplus/gdiplus_private.h, dlls/gdiplus/graphics.c: + gdiplus: Added first GDI+ graphics implementation. + + * .gitignore, Makefile.in, configure, configure.ac, dlls/Makefile.in, + dlls/gdiplus/tests/Makefile.in, dlls/gdiplus/tests/pen.c, + programs/winetest/Makefile.in, programs/winetest/winetest.rc: + gdiplus: First pen test. + + * dlls/gdiplus/Makefile.in, dlls/gdiplus/gdiplus.c, + dlls/gdiplus/gdiplus.spec, dlls/gdiplus/gdiplus_private.h, + dlls/gdiplus/pen.c: + gdiplus: First pen implementation. + +2007-06-06 Maarten Lankhorst + + * dlls/dsound/propset.c: + dsound: Unset variable on failure in IKsBufferPropertySetImpl_Create. + +2007-06-11 Andrew Talbot + + * dlls/msi/format.c: + msi: Constify a variable. + +2007-06-06 Alexander Nicolaysen Sørnes + + * .gitignore, programs/wordpad/De.rc, programs/wordpad/En.rc, + programs/wordpad/Fr.rc, programs/wordpad/Hu.rc, + programs/wordpad/Ko.rc, programs/wordpad/Makefile.in, + programs/wordpad/Nl.rc, programs/wordpad/No.rc, + programs/wordpad/Pl.rc, programs/wordpad/Ru.rc, + programs/wordpad/Tr.rc, programs/wordpad/resource.h, + programs/wordpad/rsrc.rc, programs/wordpad/wordpad.c: + wordpad: Split toolbar into tool- and formatbar. + + * programs/wordpad/De.rc, programs/wordpad/En.rc, programs/wordpad/Fr.rc, + programs/wordpad/Hu.rc, programs/wordpad/Ko.rc, + programs/wordpad/Nl.rc, programs/wordpad/No.rc, + programs/wordpad/Pl.rc, programs/wordpad/Ru.rc, + programs/wordpad/Tr.rc, programs/wordpad/resource.h, + programs/wordpad/wordpad.c: + wordpad: Allow toggling of statusbar. + + * programs/wordpad/De.rc, programs/wordpad/En.rc, programs/wordpad/Fr.rc, + programs/wordpad/Hu.rc, programs/wordpad/Ko.rc, + programs/wordpad/Nl.rc, programs/wordpad/No.rc, + programs/wordpad/Pl.rc, programs/wordpad/Ru.rc, + programs/wordpad/Tr.rc, programs/wordpad/resource.h, + programs/wordpad/wordpad.c: + wordpad: Allow toggling of toolbar. + +2007-05-26 Stefan Dösinger + + * dlls/d3d8/surface.c: + d3d8: Hold the lock in IDirect3DSurface8 methods. + + * dlls/d3d8/indexbuffer.c: + d3d8: Hold the lock in IDirect3DIndexBuffer8 methods. + + * dlls/d3d8/cubetexture.c: + d3d8: Hold the lock in cubetexture methods. + + * dlls/wined3d/device.c: + wined3d: Do not set the dynlock flag on all created surfaces. + +2007-06-11 Dan Hipschman + + * dlls/rpcrt4/tests/server.c, dlls/rpcrt4/tests/server.idl, + tools/widl/parser.y, tools/widl/typegen.c, tools/widl/widltypes.h: + widl: Simplify correlation descriptor code. + +2007-06-11 Jacek Caban + + * dlls/mshtml/htmldoc.c, dlls/mshtml/mshtml_private.h, + dlls/mshtml/persist.c, dlls/mshtml/tests/htmldoc.c: + mshtml: Added get_URL implementation. + + * dlls/mshtml/editor.c: + mshtml: Don't crash in set_font_size if range_cnt is 0. + + * dlls/mshtml/persist.c, dlls/mshtml/tests/htmldoc.c: + mshtml: Added GetCurMoniker implementation. + + * dlls/mshtml/htmldoc.c, dlls/mshtml/mshtml_private.h, dlls/mshtml/nsio.c, + dlls/mshtml/persist.c: + mshtml: Store current moniker in HTMLDocument. + + * dlls/mshtml/persist.c: + mshtml: Move Exec(CGID_ShellDocView, 37) call to match native. + + * dlls/mshtml/nsio.c: + mshtml: Move createing URL moniker to separated function. + + * dlls/mshtml/olecmd.c: + mshtml: Call Exec(CGID_ShellDocView, 37) in exec_editmode. + +2007-06-11 Alexandre Julliard + + * programs/winecfg/appdefaults.c: + winecfg: Fix potential null pointer access (spotted by Yaroslav Skorokhodov). + + * dlls/shell32/shell32_En.rc: + shell32: Remove a redundant include. + + * dlls/shell32/xdg.c: + shell32: Fix contents of string returned in load_path. + +2007-06-11 Hwang YunSong(황윤성) + + * dlls/shell32/shell32_Ko.rc: + shell32: Updated Korean resource. + + * dlls/credui/credui.rc, dlls/credui/credui_Ko.rc: + credui: New Korean resource. + +2007-06-11 Francois Gouget + + * tools/winapi/win32.api: + advapi32: Update win32.api to fix the winapi_check warnings. + + * tools/winapi/winapi.pm: + winapi_check: Also warn about 'unsigned long's Win64 compatibility problems. + + * dlls/ntdll/misc.c, dlls/ntdll/string.c, dlls/ntdll/wcstring.c, + tools/winapi/win32.api: + ntdll: Improve the prototypes Win64 compatibility by replacing long with LONG. + +2007-06-09 Vedran Rodic + + * dlls/winmm/playsound.c: + winmm: Fix PlaySound so it doesn't block when another sound is already playing. + +2007-06-11 Alexandre Julliard + + * dlls/winmm/time.c: + winmm: Initialize the timer critical section statically. + + * dlls/winmm/time.c: + winmm: Maintain the timer list sorted by expiration time. + + * dlls/winmm/time.c, dlls/winmm/winemm.h: + winmm: Convert the timer list to a standard Wine list. + +2007-06-11 Jacek Caban + + * dlls/mshtml/editor.c, dlls/mshtml/mshtml_private.h, + dlls/mshtml/olecmd.c: + mshtml: Added edit mode IDM_CUT implementation. + + * dlls/mshtml/editor.c, dlls/mshtml/mshtml_private.h, + dlls/mshtml/olecmd.c: + mshtml: Added edit mode IDM_PASTE implementation. + + * dlls/mshtml/editor.c, dlls/mshtml/mshtml_private.h, + dlls/mshtml/olecmd.c: + mshtml: Added edit mode IDM_COPY implementation. + + * dlls/mshtml/tests/htmldoc.c: + mshtml: Added IsDirty tests. + + * dlls/mshtml/persist.c: + mshtml: Added semi stub IsDirty implementation. + + * dlls/mshtml/editor.c: + mshtml: Added IDM_COMPOSESETTINGS implementation. + +2007-06-10 Jacek Caban + + * dlls/mshtml/htmlstyle.c: + mshtml: Added IHTMLStyle::get_fontFamily implementation. + + * dlls/mshtml/nsembed.c, dlls/mshtml/nsiface.idl: + mshtml: Added COMMENT_NODE implementation in nsnode_to_nsstring_rec. + + * dlls/mshtml/nsembed.c: + mshtml: Silence invalid FIXME for ELEMENT_DOCUMENT_FRAGMENT_NODE in + nsnode_to_nsstring_rec. + + * dlls/mshtml/olecmd.c: + mshtml: Added IDM_RESPECTVISIBILITY_INDESIGN command stub implementation. + + * dlls/mshtml/nsembed.c, dlls/mshtml/nsiface.idl: + mshtml: Set default scrollbar preferences. + + * dlls/mshtml/editor.c: + mshtml: Reimplement editor mode left key using command controller. + + * dlls/mshtml/editor.c: + mshtml: Reimplement editor mode right key using command controller. + + * dlls/mshtml/editor.c: + mshtml: Added editor mode down key implementation. + + * dlls/mshtml/editor.c: + mshtml: Added editor mode up key implementation. + + * dlls/mshtml/mshtml_private.h, dlls/mshtml/nsembed.c, + dlls/mshtml/nsiface.idl: + mshtml: Store editor controller in NSContainer. + + * dlls/mshtml/editor.c, dlls/mshtml/tests/htmldoc.c: + mshtml: Call update_doc in init_editor. + + * dlls/mshtml/editor.c, dlls/mshtml/tests/htmldoc.c: + mshtml: Call update_doc in editor commands. + + * dlls/mshtml/tests/htmldoc.c: + mshtml: Added more command tests. + + * dlls/mshtml/tests/Makefile.in, dlls/mshtml/tests/htmldoc.c: + mshtml: Added Exec(IDM_FONTNAME) tests. + + * dlls/mshtml/editor.c, dlls/mshtml/mshtml_private.h, dlls/mshtml/task.c: + mshtml: Set default fontname to 'Times New Roman'. + + * dlls/mshtml/editor.c: + mshtml: Don't check out variant type in exec_fontname. + + * dlls/mshtml/nsembed.c: + mshtml: Set FALSE useCapture for editor's keypress event listener. + + * dlls/mshtml/navigate.c, dlls/mshtml/nsembed.c: + mshtml: Push TASK_PARSECOMPLETE in load event if Gecko is available. + + * dlls/mshtml/editor.c: + mshtml: Improve IDM_JUSTIFYLEFT query status. + + * dlls/mshtml/tests/htmldoc.c: + mshtml: Pump messages of all windows in test_download. + We have to pump Gecko windows' messages to correctly support loading documents. + + * dlls/mshtml/tests/htmldoc.c: + mshtml: Added test of callbacks called from document timer. + + * dlls/mshtml/olecmd.c: + mshtml: Call update_doc in exec_editmode. + + * dlls/mshtml/mshtml_private.h, dlls/mshtml/persist.c, dlls/mshtml/task.c, + dlls/mshtml/view.c: + mshtml: Move Exec(OLECMDID_SETTITLE) call to separated function and use it + in on_timer. + + * dlls/mshtml/mshtml_private.h, dlls/mshtml/view.c: + mshtml: Call UpdateUI and Exec(OLECMDID_UPDATECOMMANDS) from timer callback. + + * dlls/mshtml/mshtml_private.h, dlls/mshtml/nsembed.c, + dlls/mshtml/olecmd.c, dlls/mshtml/olewnd.c: + mshtml: Use IOleCommandTarget::Exec to implement context menu. + + * dlls/mshtml/olecmd.c, dlls/mshtml/tests/htmldoc.c: + mshtml: Don't do anything in exec_editmode if edit mode is already set. + + * dlls/mshtml/navigate.c: + mshtml: Don't crash in load_stream if Gecko is not available. + + * dlls/mshtml/persist.c: + mshtml: Forward all IsDirty implementations to one function. + + * dlls/mshtml/mshtml_private.h, dlls/mshtml/nsembed.c, + dlls/mshtml/olecmd.c: + mshtml: Move setup_ns_editing to nsembed.c. + + * dlls/mshtml/editor.c, dlls/mshtml/mshtml_private.h: + mshtml: Make [get|set]_font_size static. + + * dlls/mshtml/olecmd.c: + mshtml: Move remaining status queries to command tables. + + * dlls/mshtml/editor.c, dlls/mshtml/olecmd.c: + mshtml: Move edit command queries to the command table. + + * dlls/mshtml/editor.c, dlls/mshtml/olecmd.c: + mshtml: Move justify queries to command table. + + * dlls/mshtml/olecmd.c: + mshtml: Use command table for IDM_COPY, IDM_CUT and IDM_PASTE query. + + * dlls/mshtml/editor.c, dlls/mshtml/olecmd.c: + mshtml: Move remaining commands to tables. + + * dlls/mshtml/editor.c, dlls/mshtml/olecmd.c: + mshtml: Move more commands to editor command table. + + * dlls/mshtml/olecmd.c: + mshtml: Move more commands to command table. + + * dlls/mshtml/editor.c, dlls/mshtml/mshtml_private.h, + dlls/mshtml/olecmd.c: + mshtml: Move IDM_FONTSIZE, IDM_FONTNAME and IDM_FORECOLOR to edit state + command table. + This patch temporary adds code duplication. + + * dlls/mshtml/mshtml_private.h, dlls/mshtml/olecmd.c: + mshtml: Added command table for CGID_MSHTML commands. + +2007-06-08 Juan Lang + + * dlls/crypt32/Makefile.in, dlls/crypt32/crypt32.spec, dlls/crypt32/msg.c: + crypt32: Add CryptMsg* stubs. + +2007-06-11 Alexandre Julliard + + * dlls/msxml3/xmlelem.c: + msxml: Don't use VariantClear on an uninitialized variant. + +2007-06-08 Evan Stade + + * dlls/gdiplus/gdiplus.c, dlls/gdiplus/gdiplus.spec: + gdiplus: Added beginnings of memory and startup functions. + + * include/Makefile.in, include/gdiplus.h, include/gdiplusenums.h, + include/gdiplusflat.h, include/gdiplusgpstubs.h, + include/gdiplusinit.h, include/gdiplusmem.h, + include/gdipluspixelformats.h, include/gdiplustypes.h: + gdiplus: Added public headers. + +2007-06-09 Stefan Dösinger + + * dlls/wined3d/device.c, dlls/wined3d/surface.c: + wined3d: Some render target->texture blit context handling. + + * dlls/d3d8/device.c: + d3d8: Hold the lock in IDirect3DDevice8 methods. + +2007-06-08 Stefan Dösinger + + * dlls/wined3d/directx.c, dlls/wined3d/wined3d_private.h: + wined3d: Find possible fbconfis on dll load time, use them in + CheckDepthStencilMatch. + + * dlls/wined3d/directx.c, dlls/wined3d/wined3d_private.h: + wined3d: Store the adapter driver and description in the adapter. + +2007-06-09 Stefan Dösinger + + * dlls/wined3d/arb_program_shader.c, dlls/wined3d/basetexture.c, + dlls/wined3d/context.c, dlls/wined3d/cubetexture.c, + dlls/wined3d/device.c, dlls/wined3d/directx.c, + dlls/wined3d/drawprim.c, dlls/wined3d/glsl_shader.c, + dlls/wined3d/indexbuffer.c, dlls/wined3d/pixelshader.c, + dlls/wined3d/query.c, dlls/wined3d/state.c, + dlls/wined3d/stateblock.c, dlls/wined3d/surface.c, + dlls/wined3d/texture.c, dlls/wined3d/utils.c, + dlls/wined3d/vertexbuffer.c, dlls/wined3d/vertexshader.c, + dlls/wined3d/volume.c, dlls/wined3d/volumetexture.c, + dlls/wined3d/wined3d_main.c, dlls/wined3d/wined3d_private.h: + wined3d: Store the gl information in a per adapter structure and initialize + it only once. + +2007-06-10 Louis Lenders + + * dlls/shell32/recyclebin.c, dlls/shell32/shell32.spec: + shell32: Add stub for SHUpdateRecycleBinIcon. + +2007-06-10 Christian Costa + + * dlls/winealsa.drv/midi.c: + winealsa.drv: Fix compilation with old alsa headers. + +2007-06-10 Dmitry Timoshkov + + * dlls/user32/sysparams.c: + user32: Do not hardcode cp1252 for an icon/title font. + +2007-06-10 Jeff Latimer + + * dlls/msi/msi.c: + msi: Use the langbuff len rather than the versionbuff len when allocating + the langbuff. + + * dlls/shell32/shelllink.c: + shell32: Fix possible dereference of NULL ptr. + +2007-06-09 Misha Koshelev + + * dlls/shell32/tests/shlexec.c: + shell32/tests: Add test for unquoted %1 in command and ddeexec keys. + + * dlls/shell32/tests/shlexec.c: + shell32/tests: Allow testing for arbitrary number of command line arguments + in DDE tests. + + * dlls/shell32/tests/shlexec.c: + shell32/tests: Expand default DDE application name tests to conform to win98. + + * dlls/shell32/tests/shlexec.c: + shell32/tests: Use ShellExecuteEx with SEE_MASK_FLAG_DDEWAIT and + SEE_MASK_FLAG_NO_UI for DDE tests. + + * dlls/shell32/tests/shlexec.c: + shell32/tests: Save threadid from CreateThread as required by winme/98/95. + + * dlls/shell32/tests/shlexec.c: + shell32/tests: Simplify DDE thread and message loop. + +2007-06-08 Nigel Liang + + * dlls/shell32/tests/shlfileop.c, dlls/shell32/xdg.c: + shell32: Conformance tests for unicode filenames and fix a bug for file deletion. + +2007-06-08 Alexandre Julliard + + * tools/config.guess, tools/config.sub: + tools: Upgrade the config.guess/config.sub scripts. + + * aclocal.m4, configure, configure.ac: + configure: Replace some obsolete macros to avoid warnings. + + * configure, configure.ac, libs/wine/Makefile.in: + libwine: Set install name to an absolute path for the installed library on + Mac OS. + + * include/activscp.idl, include/comcat.idl, include/dispex.idl, + include/mlang.idl, include/msxml.idl, include/oaidl.idl, + include/objidl.idl, include/objsafe.idl, include/ocidl.idl, + include/oleidl.idl, include/propidl.idl, include/unknwn.idl: + include: Add DO_NO_IMPORTS ifdefs where needed. + +2007-06-02 Andrey Turkin + + * dlls/kernel32/sync.c: + kernel32: Implement IO completion functions on top of the NT IoCompletion API. + + * dlls/kernel32/sync.c: + kernel32: Factor out all kernel32 timeout-conversion snippets to one helper + functions. + + * dlls/ntdll/ntdll.spec, dlls/ntdll/sync.c, include/winternl.h: + ntdll: Stub and document IoCompletion APIs. + +2007-06-08 Alexandre Julliard + + * dlls/msvcrt/except.c, dlls/msvcrt/msvcrt.spec: + msvcrt: Set the correct ebp value before calling the local unwind handler. + + * programs/cmd/builtins.c: + cmd.exe: Silence a FIXME. + +2007-06-08 Chris Robinson + + * dlls/wined3d/utils.c: + wined3d: Add missing table entry value. + +2007-06-07 James Hawkins + + * dlls/msi/database.c, dlls/msi/msipriv.h, dlls/msi/string.c, + dlls/msi/table.c: + msi: Add support for large string tables. + + * dlls/msi/table.c: + msi: Represent table data as bytes instead of shorts. + + * dlls/msi/table.c: + msi: Reduce the amount of code that directly accesses table data. + + * dlls/msi/table.c: + msi: Use fetch_int to reduce code duplication and access to table data. + +2007-06-07 Lei Zhang + + * dlls/shell32/brsfolder.c, dlls/shell32/shell32_En.rc, + dlls/shell32/shresdef.h: + shell32: Start implementing BIF_USENEWUI. + +2007-06-07 H. Verbeet + + * dlls/wined3d/pixelshader.c: + wined3d: For ps_2_0 and higher, call shader_get_registers_used() in + IWineD3DPixelShaderImpl_SetFunction. + + * dlls/wined3d/vertexshader.c: + wined3d: Pass NULL for the stateBlock parameter to shader_get_registers_used() + in IWineD3DVertexShaderImpl_SetFunction. + +2007-06-08 Jacek Caban + + * dlls/mshtml/nsio.c: + mshtml: Fix debug trace. + + * dlls/mshtml/nsembed.c, dlls/mshtml/nsiface.idl: + mshtml: Switch to Wine Gecko 0.1.0. + +2007-06-07 Dan Hipschman + + * tools/widl/parser.y, tools/widl/typegen.c, tools/widl/widltypes.h: + widl: Fix incomplete struct/union typedef bug. + + * tools/widl/typegen.c: + widl: Check for NULL in set_tfswrite. + +2007-06-07 Christian Costa + + * dlls/winealsa.drv/midi.c: + winealsa.drv: Use correct tests for synthesizer/port enumeration order. + +2007-06-07 Juan Lang + + * dlls/comdlg32/filedlg.c: + comdlg32: Check file dialog's FOIShellView before accessing it. + + * dlls/comdlg32/filedlg.c: + comdlg32: Initialize file dialog controls before creating dialog. + +2007-06-07 Aric Stewart + + * dlls/ole32/storage32.c, dlls/ole32/storage32.h: + ole32: Implementation of state bits for IStorage. + +2007-06-07 Ulrich Czekalla + + * dlls/ole32/filemoniker.c: + ole32: Remove stack-based string buffer inFileMonikerImpl_DecomposePath. + +2007-06-07 H. Verbeet + + * include/wine/wined3d_gl.h: + wined3d: Fix GLSL definitions. + + * dlls/wined3d/device.c: + wined3d: Turn off filtering for FBO attachments, update the texture's states + array. + +2007-06-07 Misha Koshelev + + * tools/wine.inf: + wine.inf: Use DDE for winebrowser as native. + + * programs/winebrowser/Makefile.in, programs/winebrowser/main.c: + winebrowser: Add DDE support. + +2007-06-07 Francois Gouget + + * dlls/comctl32/commctrl.c, dlls/comctl32/tests/toolbar.c, + dlls/dbghelp/type.c, dlls/localspl/tests/localmon.c, + dlls/mciavi32/info.c, dlls/odbccp32/tests/misc.c, + dlls/riched20/editor.c, dlls/shell32/tests/shlexec.c, + dlls/shlwapi/tests/shreg.c, dlls/version/info.c, + dlls/version/tests/info.c, dlls/wined3d/device.c, + dlls/wined3d/state.c, dlls/wined3d/surface.c, dlls/winedos/int10.c, + include/wine/wined3d_interface.h: + Assorted spelling fixes. + + * dlls/wined3d/state.c: + wined3d: Fix spelling of the state_separateblend() function. + +2007-06-07 Hans Leidekker + + * dlls/wininet/ftp.c: + wininet: More lenient parsing of the passive mode server response. + +2007-06-07 Vitaliy Margolen + + * dlls/atl/atl_ax.c: + atl: Use CallWindowProc instead of calling old window proc directly. + +2007-06-07 Paul Vriens + + * dlls/comdlg32/tests/filedlg.c: + comdlg32/tests: Skip some not implemented functions on win98. + +2007-06-07 Alexandre Julliard + + * dlls/winmm/mci.c, dlls/winmm/mmio.c, dlls/winmm/mmsystem.c, + dlls/winmm/playsound.c, dlls/winmm/time.c, dlls/winmm/winemm.h, + dlls/winmm/winmm.c: + winmm: Get rid of the WINE_MM_IDATA global structure, there's only one instance + anyway. + +2007-06-05 Maarten Lankhorst + + * dlls/winmm/time.c: + winmm: Use unix fd's instead of win32 events to sync internal events in timer. + +2007-06-07 Alexandre Julliard + + * dlls/winmm/time.c: + winmm: Fix computation of sleep time until next timeout. + +2007-06-06 Phil Costin + + * dlls/wined3d/cubetexture.c, dlls/wined3d/device.c, + dlls/wined3d/stateblock.c, dlls/wined3d/texture.c, + dlls/wined3d/volumetexture.c, dlls/wined3d/wined3d_private.h: + wined3d: Enable the loading and reloading of gamma corrected textures. + + * dlls/wined3d/cubetexture.c, dlls/wined3d/surface.c, + dlls/wined3d/surface_gdi.c, dlls/wined3d/texture.c, + dlls/wined3d/volume.c, dlls/wined3d/volumetexture.c, + include/wine/wined3d_interface.h: + wined3d: Add support for loading gamma corrected textures. + + * dlls/wined3d/utils.c, dlls/wined3d/wined3d_private.h: + wined3d: Extend the D3DFMT table to include gamma corrected formats. + + * dlls/wined3d/directx.c, include/wine/wined3d_gl.h: + wined3d: Add GL_EXT_texture_sRGB constants and corresponding CheckDeviceFormat + query. + +2007-06-07 Alexandre Julliard + + * tools/widl/widl.c: + widl: Get rid of the SIGSEGV handler, this only makes things harder to debug. + +2007-06-06 Misha Koshelev + + * dlls/oleaut32/tests/tmarshal.c, dlls/oleaut32/typelib.c: + oleaut32: Add support for vararg functions in ITypeInfo::Invoke. + + * dlls/oleaut32/tests/tmarshal.c, dlls/oleaut32/tests/tmarshal.idl, + dlls/oleaut32/tests/tmarshal_dispids.h: + oleaut32/tests: Add tests for IDispatch::Invoke of vararg function. + + * tools/widl/write_msft.c: + widl: Add support for vararg attribute. + +2007-05-21 Lei Zhang + + * include/shlobj.h: + include: Add missing definitions to shlobj.h. + +2007-06-06 Andrew Talbot + + * dlls/wined3d/basetexture.c, dlls/wined3d/cubetexture.c, + dlls/wined3d/indexbuffer.c, dlls/wined3d/texture.c, + dlls/wined3d/volume.c, dlls/wined3d/volumetexture.c: + wined3d: Void functions should not return a value. + +2007-06-06 Hans Leidekker + + * dlls/mlang/mlang.c, dlls/mlang/tests/mlang.c: + mlang: Implement IMultiLanguage::GetLcidFromRfc1766. + +2007-06-06 Anatoly Lyutin + + * programs/cmd/Ru.rc: + cmd.exe: Update Russian translation. + +2007-06-07 Alexandre Julliard + + * programs/winedevice/device.c: + winedevice: Accept the shutdown service control. + +2007-06-06 Jacek Caban + + * dlls/mshtml/install.c, dlls/mshtml/nsembed.c, dlls/mshtml/nsiface.idl: + mshtml: Added support for coexisting different Gecko versions installation. + +2007-06-06 H. Verbeet + + * dlls/d3d8/device.c, dlls/d3d9/device.c, dlls/wined3d/device.c, + include/wine/wined3d_interface.h: + wined3d: Get rid of the pBaseVertexIndex parameter to + IWineD3DDeviceImpl_GetIndices, use GetBaseVertexIndex instead. + + * dlls/wined3d/device.c, include/wine/wined3d_interface.h: + wined3d: Add IWineD3DDevice_GetBaseVertexIndex to retrieve the base vertex index. + +2007-06-06 Markus Goemmel + + * dlls/comctl32/listview.c: + comctl32/listview.c: Ownerdraw font problem during focus change fixed. + +2007-06-06 Detlef Riekenberg + + * dlls/winspool.drv/info.c: + winspool: Remove outdated comment. + +2007-06-06 Huw Davies + + * dlls/winex11.drv/xrender.c: + winex11.drv: XRenderCompositeText has a problem with 0x0 glyphs, so we'll + pretend they're 1x1. + +2007-06-06 Paul Vriens + + * dlls/wintrust/tests/register.c: + wintrust/tests: Use A instead of W-calls. + +2007-06-06 Dmitry Timoshkov + + * include/msvcrt/direct.h, include/msvcrt/io.h, include/msvcrt/malloc.h, + include/msvcrt/mbstring.h, include/msvcrt/search.h, + include/msvcrt/stddef.h, include/msvcrt/stdio.h, + include/msvcrt/stdlib.h, include/msvcrt/string.h, + include/msvcrt/sys/stat.h, include/msvcrt/sys/types.h, + include/msvcrt/time.h, include/msvcrt/wchar.h: + include/msvcrt: Make sure that __int64 is properly defined on a 64-bit platform. + +2007-06-06 Alexandre Julliard + + * dlls/advapi32/service.c: + advapi32: Mark service processes as system processes, and exit when all user + processes are done. + + * programs/explorer/desktop.c: + explorer.exe: Mark explorer as a system process. + + * dlls/ntdll/ntdll.spec, dlls/ntdll/process.c, + include/wine/server_protocol.h, server/process.c, server/process.h, + server/protocol.def, server/request.h, server/trace.c: + server: Add support for system processes, that can be signaled to exit when + all non-system processes are done. + +2007-06-05 Andrew Talbot + + * dlls/oleaut32/oleaut.c: + oleaut32: Fix some typos. + + * dlls/msi/helpers.c, dlls/msi/insert.c, dlls/msi/msi.c, + dlls/msi/msipriv.h, dlls/msi/package.c, dlls/msi/query.h, + dlls/msi/record.c: + msi: Constify some variables. + +2007-06-06 Jacek Caban + + * dlls/urlmon/umstream.c: + urlmon: Don't pass query part of URL to CreateUrlCacheEntryW. + +2007-06-05 Lei Zhang + + * dlls/wined3d/surface.c: + wined3d: Various spelling fixes. + +2007-06-05 Alexander Nicolaysen Sørnes + + * programs/wordpad/wordpad.c: + wordpad: Fix potential buffer overflow. + +2007-05-23 Stefan Dösinger + + * dlls/d3d8/directx.c: + d3d8: Hold the DLL lock in IDirect3D8 methods. + +2007-05-22 Stefan Dösinger + + * dlls/d3d8/d3d8_main.c, dlls/d3d8/d3d8_private.h: + d3d8: Add a dll global critical section. + +2007-06-05 Dan Hipschman + + * dlls/rpcrt4/tests/server.c, dlls/rpcrt4/tests/server.idl, + tools/widl/typegen.c: + widl: Implement conformant structure handling. + + * dlls/rpcrt4/tests/server.c, dlls/rpcrt4/tests/server.idl, + tools/widl/client.c, tools/widl/header.c, tools/widl/header.h, + tools/widl/parser.y, tools/widl/proxy.c, tools/widl/server.c, + tools/widl/typegen.c, tools/widl/typegen.h, tools/widl/typelib.c, + tools/widl/widltypes.h, tools/widl/write_msft.c: + widl: Represent arrays with type_t. + + * tools/widl/header.c, tools/widl/header.h, tools/widl/proxy.c: + widl: Replace get_name with a field reference. + + * include/wine/list.h: + list.h: Add macros for reverse iteration. + +2007-06-06 Francois Gouget + + * programs/cmd/directory.c: + programs/cmd: Add missing '\n' to Wine trace. + + * dlls/winspool.drv/winspool.drv.spec: + winspool.drv: Fix the AddPortExA/W() export to match the implementation. + +2007-06-06 Michael Stefaniuc + + * dlls/psapi/psapi_main.c: + psapi: GetWsChanges() calls down to the wrong ntdll function. Found by sparse. + + * dlls/psapi/psapi_main.c: + psapi: GetPerformanceInfo() calls down to the wrong ntdll function. Found + by sparse. + +2007-06-05 Christian Costa + + * dlls/wineoss.drv/midi.c: + wineoss.drv: Mark every buffer being added. + +2007-06-05 Rob Shearman + + * dlls/wininet/http.c, dlls/wininet/internet.h: + wininet: Implement NTLM support for proxy authentication. + + * dlls/wininet/internet.c, dlls/wininet/tests/http.c: + wininet: Send the correct callbacks during InternetReadFileExA calls. + +2007-06-05 H. Verbeet + + * dlls/d3d8/device.c, dlls/d3d9/device.c, dlls/ddraw/device.c, + dlls/ddraw/surface.c, dlls/wined3d/device.c, + dlls/wined3d/stateblock.c, include/wine/wined3d_interface.h: + wined3d: Get rid of the BaseVertexIndex parameter to + IWineD3DDeviceImpl_SetIndices, use SetBaseVertexIndex instead. + + * dlls/wined3d/drawprim.c: + wined3d: Make sure the color buffer is not modified by depth_blt(). + +2007-06-05 Stefan Leichter + + * dlls/winspool.drv/info.c: + winspool.drv: Replace WINSPOOL_SHDeleteKeyW with RegDeleteTreeW. + +2007-06-05 Michael Stefaniuc + + * dlls/winedos/int31.c: + winedos: Fix printf format warnings introduced by the TEB change in thread.h. + +2007-06-05 Paul Vriens + + * dlls/wintrust/tests/Makefile.in, dlls/wintrust/tests/crypt.c: + wintrust/tests: Start of some crypt tests for wintrust. + +2007-06-05 Kai Blin + + * dlls/ws2_32/socket.c: + ws2_32: Add mapping for STATUS_OBJECT_TYPE_MISMATCH to WSAENOTSOCK. + +2007-06-05 Huw Davies + + * dlls/riched20/caret.c, dlls/riched20/editor.c, dlls/riched20/editstr.h: + riched20: Don't mess with the caret if we don't have focus. + + * dlls/oleaut32/olepicture.c, dlls/oleaut32/tests/olepicture.c: + oleaut32: Fixes for the PICTYPE_UNINITIALIZED case. + +2007-06-05 Alexander Nicolaysen Sørnes + + * programs/wordpad/De.rc, programs/wordpad/En.rc, programs/wordpad/Fr.rc, + programs/wordpad/Hu.rc, programs/wordpad/Ko.rc, + programs/wordpad/Nl.rc, programs/wordpad/No.rc, + programs/wordpad/Pl.rc, programs/wordpad/Ru.rc, + programs/wordpad/Tr.rc: + wordpad: Add missing dots to Open menu item. + +2007-06-05 Alexandre Julliard + + * dlls/advapi32/service.c: + advapi32: Convert the service list to a standard list. + +2007-05-30 Stefan Dösinger + + * dlls/ddraw/viewport.c: + ddraw: Hold the Lock in IDirect3DViewport methods. + + * dlls/ddraw/vertexbuffer.c: + ddraw: Hold the lock in IDirect3DVertexBuffer methods. + + * dlls/ddraw/texture.c: + ddraw: Hold the lock in IDirect3DTexture methods. + + * dlls/ddraw/light.c: + ddraw: Hold the lock in IDirect3DLight methods. + + * dlls/ddraw/palette.c: + ddraw: Hold the lock in IDirectDrawPalette methods. + +2007-06-04 Alex Villacís Lasso + + * dlls/oleaut32/variant.c: + oleaut32: Support for VT_DISPATCH in VarRound. + + * dlls/oleaut32/variant.c: + oleaut32: Support for VT_DISPATCH in VarNeg. + + * dlls/oleaut32/variant.c: + oleaut32: Support for VT_DISPATCH in VarInt. + + * dlls/oleaut32/variant.c: + oleaut32: Support for VT_DISPATCH in VarFix. + + * dlls/oleaut32/variant.c: + oleaut32: Support for VT_DISPATCH in VarNot. + + * dlls/oleaut32/variant.c: + oleaut32: Support for VT_DISPATCH in VarAbs. + +2007-06-04 Chris Robinson + + * dlls/quartz/acmwrapper.c, dlls/quartz/avidec.c: + quartz: Don't return S_FALSE for failed connections. + + * dlls/wined3d/device.c, dlls/wined3d/surface.c: + wined3d: Add a few missing checkGLcall calls. + +2007-06-05 Michael Stefaniuc + + * tools/wrc/translation.c: + wrc: Fix non-ANSI function declaration. Found by sparse. + + * dlls/gphoto2.ds/gphoto2_main.c: + gphoto2.ds: Fix non-ANSI function declaration. Found by sparse. + + * dlls/capi2032/cap20wxx.c: + capi2032: Fix non-ANSI function declaration. Found by sparse. + +2007-06-04 Michael Stefaniuc + + * include/wingdi.h: + wingdi.h: Multi-character character constants are implementation specific + according to the C standard. Use a hex number instead. + +2007-06-04 Stefan Leichter + + * dlls/qcap/dllsetup.c: + qcap: Replace DeleteEntireSubKey with RegDeleteTreeW. + +2007-06-04 Misha Koshelev + + * dlls/msi/automation.c, dlls/msi/msiserver.idl, + dlls/msi/msiserver_dispids.h, dlls/msi/tests/automation.c: + msi: automation: Implement SummaryInfo::PropertyCount. + + * dlls/msi/tests/automation.c: + msi/tests: automation: Add tests for SummaryInfo::PropertyCount. + + * dlls/msi/automation.c, dlls/msi/msiserver.idl, + dlls/msi/tests/automation.c: + msi: automation: Implement SummaryInfo::Property, put. + + * dlls/msi/tests/automation.c: + msi/tests: automation: Add tests for SummaryInfo::Property, put. + + * dlls/msi/msiserver.idl: + msi: automation: Add MsiOpenDatabaseMode enum. + + * dlls/msi/msiserver_dispids.h, dlls/msi/tests/automation.c: + msi/tests: automation: Add test for Installer::OpenDatabase. + + * dlls/msi/automation.c: + msi: automation: SummaryInfo::Property, remove all specific instances to PIDs. + + * dlls/msi/suminfo.c, dlls/msi/tests/suminfo.c: + msi: suminfo: Return ERROR_UNKNOWN_PROPERTY as native. + + * dlls/msi/tests/suminfo.c: + msi/tests: suminfo: Add tests for MsiSummaryInfoGetProperty for unknown + property values. + +2007-06-04 H. Verbeet + + * dlls/wined3d/device.c: + wined3d: Rename IWineD3DDeviceImpl_SetBasevertexIndex to + IWineD3DDeviceImpl_SetBaseVertexIndex. + + * dlls/wined3d/device.c: + wined3d: TRACE the Color parameter in IWineD3DDeviceImpl_Clear. + +2007-06-04 Huw Davies + + * dlls/mshtml/nsio.c: + mshtml: Don't release the factory if we failed to get it. + +2007-06-04 Detlef Riekenberg + + * dlls/winspool.drv/info.c, include/winspool.h: + winspool: Implement AddPortEx. + +2007-06-04 Ralf Beck + + * dlls/winealsa.drv/midi.c: + winealsa.drv: Mark every sysex buffer being added. + +2007-06-04 Alexandre Julliard + + * dlls/ws2_32/socket.c: + ws2_32: Rewrite WSAGetOverlappedResult for the new async I/O behavior. + + * dlls/kernel32/file.c, dlls/kernel32/tests/file.c: + kernel32: Rewrite GetOverlappedResult for the new async I/O behavior. + + * dlls/ntdll/file.c, dlls/ntdll/sync.c, dlls/ws2_32/socket.c, + include/thread.h: + ntdll: Get rid of the num_async_io counter in the TEB. + + * server/thread.c: + server: Run async I/O APCs from the SIGUSR1 handler. + + * dlls/ws2_32/socket.c: + ws2_32: Queue a proper user APC also on immediate success in + WSARecvFrom/WSASendTo. + +2007-06-03 Alexandre Julliard + + * dlls/ntdll/directory.c, dlls/ntdll/file.c, dlls/ws2_32/socket.c, + include/wine/server_protocol.h, server/async.c, server/protocol.def, + server/trace.c: + server: Remove the extra apc_arg parameter now that user APCs all require the + same arg as the kernel APC. + + * dlls/ntdll/directory.c, dlls/ntdll/file.c: + ntdll: Queue an intermediate user APC routine to free the async info. + +2007-06-02 Andrey Turkin + + * Makefile.in, configure, configure.ac, dlls/Makefile.in, + dlls/pdh/Makefile.in, dlls/pdh/pdh.spec, dlls/pdh/pdh_main.c: + pdh: Stub implementation of pdh.dll. + +2007-06-03 Jason Edmeades + + * programs/xcopy/Makefile.in, programs/xcopy/xcopy.c: + xcopy.exe: Convert from main to wmain. + + * programs/cmd/directory.c: + cmd.exe: Fix dir /w. + Use of %* fails when using wvsprintf, so just pad manually, + but maintain only a single output call. + + * programs/cmd/Makefile.in, programs/cmd/wcmdmain.c: + cmd.exe: Change from main to wmain. + + * programs/cmd/wcmdmain.c: + cmd.exe: Fix handling of malformed environment variable expansion. + + * programs/cmd/builtins.c, programs/cmd/wcmd.h: + cmd.exe: Fix 'help garbage' command post-unicode support. + + * programs/cmd/Cs.rc, programs/cmd/De.rc, programs/cmd/En.rc, + programs/cmd/Es.rc, programs/cmd/Fr.rc, programs/cmd/Ja.rc, + programs/cmd/Ko.rc, programs/cmd/Makefile.in, programs/cmd/Nl.rc, + programs/cmd/No.rc, programs/cmd/Pl.rc, programs/cmd/Pt.rc, + programs/cmd/Ru.rc, programs/cmd/Si.rc, programs/cmd/Tr.rc, + programs/cmd/batch.c, programs/cmd/builtins.c, + programs/cmd/directory.c, programs/cmd/wcmd.h, + programs/cmd/wcmdmain.c: + cmd.exe: Convert cmd to Unicode. + + * programs/cmd/wcmd.h, programs/cmd/wcmdmain.c: + cmd.exe: Handle command line as Unicode. + + * programs/cmd/wcmdmain.c: + cmd.exe: Move writing to console into a single function. + + * programs/cmd/Cs.rc, programs/cmd/De.rc, programs/cmd/En.rc, + programs/cmd/Es.rc, programs/cmd/Fr.rc, programs/cmd/Ja.rc, + programs/cmd/Ko.rc, programs/cmd/Nl.rc, programs/cmd/No.rc, + programs/cmd/Pl.rc, programs/cmd/Pt.rc, programs/cmd/Ru.rc, + programs/cmd/Si.rc, programs/cmd/Tr.rc, programs/cmd/batch.c, + programs/cmd/builtins.c, programs/cmd/directory.c, + programs/cmd/wcmd.h, programs/cmd/wcmdmain.c: + cmd.exe: Move English constants into NLS files. + +2007-06-04 Mikołaj Zalewski + + * dlls/comctl32/listview.c: + comctl32: listview: Make LVM_GETCOLUMNWIDTH query the header control instead + of using cached data. + +2007-06-03 Vitaliy Margolen + + * dlls/dinput/device.c, dlls/dinput/tests/mouse.c: + dinput: Acquire device only if specified window has focus in foreground + coop level. + + * dlls/dinput/joystick_linux.c, dlls/dinput/joystick_linuxinput.c, + dlls/dinput/keyboard.c, dlls/dinput/mouse.c: + dinput: Make sure to unacquire device before freeing it. + +2007-06-01 Misha Koshelev + + * dlls/msi/automation.c, dlls/msi/tests/automation.c: + msi: automation: Fix SummaryInfo::Property get to conform to native. + + * dlls/msi/tests/automation.c: + msi/tests: automation: Add tests for SummaryInfo::Property, get. + + * dlls/msi/automation.c, dlls/msi/msiserver.idl: + msi: automation: Database::SummaryInformation is a propget, not a method. + + * dlls/msi/automation.c: + msi: automation: Remove redundant VariantClear(pVarResult). + + * dlls/msi/msiserver.idl: + msi: msiserver.idl: Maintain spacing as spaces, not tabs. + + * dlls/msi/automation.c: + msi: automation: Add missing operand for evaluation. + + * dlls/msi/automation.c: + msi: automation: Remove duplicate error messages on unknown dispid. + DISP_E_MEMBERNOTFOUND FIXME is already handled in AutomationObject_Invoke. + +2007-06-02 H. Verbeet + + * dlls/d3d9/tests/device.c: + d3d9: Add a test for calling DrawIndexedPrimitive with a NULL index buffer. + + * dlls/wined3d/device.c: + wined3d: Return WINED3DERR_INVALIDCALL in DrawIndexedPrimitive if no index + buffer is set. + +2007-06-01 Stefan Leichter + + * dlls/crypt32/store.c: + crypt32: Replace CRYPT_RecurseDeleteKey with RegDeleteTreeW. + +2007-06-01 Glenn Wurster + + * dlls/sfc/sfc.spec, dlls/sfc_os/sfc_os.c, dlls/sfc_os/sfc_os.spec: + sfc_os: Add stub implementation for SfcIsKeyProtected. + +2007-05-30 Maarten Lankhorst + + * dlls/dsound/propset.c: + dsound: Disable property sets if hardware doesn't support it. + + * dlls/dsound/buffer.c: + dsound: Recalculate 3d buffer on SetVolume. + + * dlls/dsound/buffer.c, dlls/dsound/primary.c: + dsound: Fix buffer caps. + +2007-05-21 Stefan Dösinger + + * dlls/ddraw/material.c: + ddraw: Hold the lock in IDirect3DMaterial methods. + +2007-05-26 Stefan Dösinger + + * dlls/ddraw/gamma.c: + ddraw: Hold the lock in IDirectDrawGammaControl methods. + +2007-05-20 Stefan Dösinger + + * dlls/ddraw/clipper.c: + ddraw: Hold the lock in IDirectDrawClipper methods. + +2007-06-03 Stefan Dösinger + + * dlls/ddraw/device.c: + ddraw: Hold the lock in IDirect3DDevice methods. + +2007-05-25 Stefan Dösinger + + * dlls/wined3d/stateblock.c: + wined3d: Do not enable GL_APPLE_client_storage for the dummy textures. + +2007-05-31 Alexander Nicolaysen Sørnes + + * programs/wordpad/De.rc, programs/wordpad/En.rc, programs/wordpad/Fr.rc, + programs/wordpad/Hu.rc, programs/wordpad/Ko.rc, + programs/wordpad/Nl.rc, programs/wordpad/No.rc, + programs/wordpad/Pl.rc, programs/wordpad/Ru.rc, + programs/wordpad/Tr.rc, programs/wordpad/resource.h, + programs/wordpad/wordpad.c: + wordpad: Add file saving dialog. + + * programs/wordpad/wordpad.c: + wordpad: Convert open file dialog to Unicode. + +2007-06-02 Alexander Nicolaysen Sørnes + + * programs/wordpad/wordpad.c: + wordpad: Improve file reading code. + + * programs/wordpad/wordpad.c: + wordpad: Add file saving support. + +2007-05-30 Alexander Nicolaysen Sørnes + + * programs/wordpad/wordpad.c: + wordpad: Store file name globally. + + * programs/wordpad/wordpad.c: + wordpad: Split code into set_caption function. + +2007-06-02 Detlef Riekenberg + + * include/winspool.h: + include/winspool: Add more flags for printer drivers. + +2007-06-03 Marcus Meissner + + * dlls/quartz/filtermapper.c: + quartz: Added some error checking on failure to CreateClassEnumerator. + +2007-06-02 Mikołaj Zalewski + + * dlls/kernel32/local16.c: + kernel: Fix clearing of memory in LocalReAlloc16(..., LMEM_ZEROMEMORY). + +2007-06-01 Francois Gouget + + * dlls/ws2_32/socket.c, include/winsock.h, include/winsock2.h, + tools/winapi/win32.api: + ws2_32: Improve the prototypes Win64 compatibility by replacing long with LONG. + +2007-05-31 Alexandre Julliard + + * dlls/ws2_32/socket.c: + ws2_32: Simplify the async shutdown handling, and remove a bunch of no longer + used code. + + * dlls/ws2_32/socket.c: + ws2_32: Call the I/O completion routine as a user APC. + + * dlls/ws2_32/socket.c: + ws2_32: Reimplement WSASendTo along the lines of NtWriteFile. + +2007-06-01 Alexandre Julliard + + * ANNOUNCE, ChangeLog, VERSION, configure: + Release 0.9.38. + +---------------------------------------------------------------- 2007-06-01 Alexandre Julliard * dlls/user32/tests/menu.c: diff --git a/VERSION b/VERSION index bcf881ad7c7..e1da7b62877 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -Wine version 0.9.38 +Wine version 0.9.39 diff --git a/configure b/configure index 341f70a89df..acbc1a1978e 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.61 for Wine 0.9.38. +# Generated by GNU Autoconf 2.61 for Wine 0.9.39. # # Report bugs to . # @@ -574,8 +574,8 @@ SHELL=${CONFIG_SHELL-/bin/sh} # Identity of this package. PACKAGE_NAME='Wine' PACKAGE_TARNAME='wine' -PACKAGE_VERSION='0.9.38' -PACKAGE_STRING='Wine 0.9.38' +PACKAGE_VERSION='0.9.39' +PACKAGE_STRING='Wine 0.9.39' PACKAGE_BUGREPORT='wine-devel@winehq.org' ac_unique_file="server/atom.c" @@ -1290,7 +1290,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures Wine 0.9.38 to adapt to many kinds of systems. +\`configure' configures Wine 0.9.39 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1359,7 +1359,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of Wine 0.9.38:";; + short | recursive ) echo "Configuration of Wine 0.9.39:";; esac cat <<\_ACEOF @@ -1455,7 +1455,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -Wine configure 0.9.38 +Wine configure 0.9.39 generated by GNU Autoconf 2.61 Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, @@ -1469,7 +1469,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by Wine $as_me 0.9.38, which was +It was created by Wine $as_me 0.9.39, which was generated by GNU Autoconf 2.61. Invocation command line was $ $0 $@ @@ -21466,7 +21466,7 @@ exec 6>&1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by Wine $as_me 0.9.38, which was +This file was extended by Wine $as_me 0.9.39, which was generated by GNU Autoconf 2.61. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -21519,7 +21519,7 @@ Report bugs to ." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF ac_cs_version="\\ -Wine config.status 0.9.38 +Wine config.status 0.9.39 configured by $0, generated by GNU Autoconf 2.61, with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\" diff --git a/dlls/comctl32/propsheet.c b/dlls/comctl32/propsheet.c index 8740f0138fc..04929c569c9 100644 --- a/dlls/comctl32/propsheet.c +++ b/dlls/comctl32/propsheet.c @@ -2836,7 +2836,12 @@ INT_PTR WINAPI PropertySheetA(LPCPROPSHEETHEADERA lppsh) bRet = PROPSHEET_CreateDialog(psInfo); if(!psInfo->isModeless) + { + HWND parent = GetParent(psInfo->hwnd); + if (parent) EnableWindow(parent, FALSE); bRet = do_loop(psInfo); + if (parent) EnableWindow(parent, TRUE); + } return bRet; } diff --git a/dlls/gdiplus/Makefile.in b/dlls/gdiplus/Makefile.in index d1089af6790..b2bd0c4161e 100644 --- a/dlls/gdiplus/Makefile.in +++ b/dlls/gdiplus/Makefile.in @@ -7,6 +7,7 @@ IMPORTLIB = libgdiplus.$(IMPLIBEXT) IMPORTS = user32 gdi32 advapi32 kernel32 ntdll C_SRCS = \ + brush.c \ gdiplus.c \ graphics.c \ pen.c diff --git a/dlls/gdiplus/gdiplus_private.h b/dlls/gdiplus/brush.c similarity index 52% copy from dlls/gdiplus/gdiplus_private.h copy to dlls/gdiplus/brush.c index f6e238ae036..2a27fc88ae6 100644 --- a/dlls/gdiplus/gdiplus_private.h +++ b/dlls/gdiplus/brush.c @@ -16,28 +16,42 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#ifndef __WINE_GP_PRIVATE_H_ -#define __WINE_GP_PRIVATE_H_ - #include "windef.h" -#include "winbase.h" +#include "wingdi.h" #include "gdiplus.h" +#include "gdiplus_private.h" + +GpStatus WINGDIPAPI GdipCreateSolidFill(ARGB color, GpSolidFill **sf) +{ + COLORREF col = ARGB2COLORREF(color); + + if(!sf) return InvalidParameter; + + *sf = GdipAlloc(sizeof(GpSolidFill)); + if (!*sf) return OutOfMemory; + + (*sf)->brush.gdibrush = CreateSolidBrush(col); + (*sf)->brush.bt = BrushTypeSolidColor; + (*sf)->brush.color = col; + + return Ok; +} + +GpStatus WINGDIPAPI GdipGetBrushType(GpBrush *brush, GpBrushType *type) +{ + if(!brush || !type) return InvalidParameter; -#define GP_DEFAULT_PENSTYLE (PS_GEOMETRIC | PS_ENDCAP_FLAT) + *type = brush->bt; -COLORREF ARGB2COLORREF(ARGB color); + return Ok; +} -struct GpPen{ - UINT style; - COLORREF color; - GpUnit unit; - REAL width; - HPEN gdipen; -}; +GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush *brush) +{ + if(!brush) return InvalidParameter; -struct GpGraphics{ - HDC hdc; - HWND hwnd; -}; + DeleteObject(brush->gdibrush); + GdipFree(brush); -#endif + return Ok; +} diff --git a/dlls/gdiplus/gdiplus.spec b/dlls/gdiplus/gdiplus.spec index 142011f67d5..c7a4dc16bd5 100644 --- a/dlls/gdiplus/gdiplus.spec +++ b/dlls/gdiplus/gdiplus.spec @@ -119,7 +119,7 @@ @ stub GdipCreateRegionRect @ stub GdipCreateRegionRectI @ stub GdipCreateRegionRgnData -@ stub GdipCreateSolidFill +@ stdcall GdipCreateSolidFill(long ptr) @ stub GdipCreateStreamOnFile @ stub GdipCreateStringFormat @ stub GdipCreateTexture2 @@ -127,7 +127,7 @@ @ stub GdipCreateTexture @ stub GdipCreateTextureIA @ stub GdipCreateTextureIAI -@ stub GdipDeleteBrush +@ stdcall GdipDeleteBrush(ptr) @ stub GdipDeleteCachedBitmap @ stub GdipDeleteCustomLineCap @ stub GdipDeleteFont @@ -228,7 +228,7 @@ @ stub GdipGetAdjustableArrowCapMiddleInset @ stub GdipGetAdjustableArrowCapWidth @ stub GdipGetAllPropertyItems -@ stub GdipGetBrushType +@ stdcall GdipGetBrushType(ptr ptr) @ stub GdipGetCellAscent @ stub GdipGetCellDescent @ stub GdipGetClip diff --git a/dlls/gdiplus/gdiplus_private.h b/dlls/gdiplus/gdiplus_private.h index f6e238ae036..6cb2e4370e7 100644 --- a/dlls/gdiplus/gdiplus_private.h +++ b/dlls/gdiplus/gdiplus_private.h @@ -20,7 +20,6 @@ #define __WINE_GP_PRIVATE_H_ #include "windef.h" -#include "winbase.h" #include "gdiplus.h" #define GP_DEFAULT_PENSTYLE (PS_GEOMETRIC | PS_ENDCAP_FLAT) @@ -40,4 +39,14 @@ struct GpGraphics{ HWND hwnd; }; +struct GpBrush{ + HBRUSH gdibrush; + GpBrushType bt; + COLORREF color; +}; + +struct GpSolidFill{ + GpBrush brush; +}; + #endif diff --git a/dlls/gdiplus/tests/Makefile.in b/dlls/gdiplus/tests/Makefile.in index 8cb68102546..45853f6aa9b 100644 --- a/dlls/gdiplus/tests/Makefile.in +++ b/dlls/gdiplus/tests/Makefile.in @@ -6,6 +6,7 @@ TESTDLL = gdiplus.dll IMPORTS = gdiplus kernel32 CTESTS = \ + brush.c \ pen.c @MAKE_TEST_RULES@ diff --git a/dlls/gdiplus/tests/brush.c b/dlls/gdiplus/tests/brush.c new file mode 100644 index 00000000000..7c72f48ecbf --- /dev/null +++ b/dlls/gdiplus/tests/brush.c @@ -0,0 +1,76 @@ +/* + * Unit test suite for brushes + * + * Copyright (C) 2007 Google (Evan Stade) + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +#include "windef.h" +#include "gdiplus.h" +#include "wine/test.h" + +#define expect(expected, got) ok(got == expected, "Expected %.8x, got %.8x\n", expected, got) + +static void test_constructor_destructor(void) +{ + GpStatus status; + GpSolidFill *brush = NULL; + + status = GdipCreateSolidFill((ARGB)0xdeadbeef, &brush); + expect(Ok, status); + ok(brush != NULL, "Expected brush to be initialized\n"); + + status = GdipDeleteBrush(NULL); + expect(InvalidParameter, status); + + status = GdipDeleteBrush((GpBrush*) brush); + expect(Ok, status); +} + +static void test_type(void) +{ + GpStatus status; + GpBrushType bt; + GpSolidFill *brush = NULL; + + GdipCreateSolidFill((ARGB)0xdeadbeef, &brush); + + status = GdipGetBrushType((GpBrush*)brush, &bt); + expect(status, Ok); + expect(bt, BrushTypeSolidColor); + + GdipDeleteBrush((GpBrush*) brush); +} + +START_TEST(brush) +{ + struct GdiplusStartupInput gdiplusStartupInput; + ULONG_PTR gdiplusToken; + + gdiplusStartupInput.GdiplusVersion = 1; + gdiplusStartupInput.DebugEventCallback = NULL; + gdiplusStartupInput.SuppressBackgroundThread = 0; + gdiplusStartupInput.SuppressExternalCodecs = 0; + + GdiplusStartup(&gdiplusToken, &gdiplusStartupInput, NULL); + + test_constructor_destructor(); + test_type(); + + GdiplusShutdown(gdiplusToken); +} diff --git a/dlls/mshtml/olewnd.c b/dlls/mshtml/olewnd.c index d91e7924596..8fe60918ddf 100644 --- a/dlls/mshtml/olewnd.c +++ b/dlls/mshtml/olewnd.c @@ -202,8 +202,18 @@ static HRESULT WINAPI OleInPlaceObjectWindowless_InPlaceDeactivate(IOleInPlaceOb } This->in_place_active = FALSE; - if(This->ipsite) - IOleInPlaceSite_OnInPlaceDeactivate(This->ipsite); + if(This->ipsite) { + IOleInPlaceSiteEx *ipsiteex; + HRESULT hres; + + hres = IOleInPlaceSite_QueryInterface(This->ipsite, &IID_IOleInPlaceSiteEx, (void**)&ipsiteex); + if(SUCCEEDED(hres)) { + IOleInPlaceSiteEx_OnInPlaceDeactivateEx(ipsiteex, TRUE); + IOleInPlaceSiteEx_Release(ipsiteex); + }else { + IOleInPlaceSite_OnInPlaceDeactivate(This->ipsite); + } + } return S_OK; } diff --git a/dlls/mshtml/tests/htmldoc.c b/dlls/mshtml/tests/htmldoc.c index 619d36eb7c7..90b0295dc64 100644 --- a/dlls/mshtml/tests/htmldoc.c +++ b/dlls/mshtml/tests/htmldoc.c @@ -72,10 +72,12 @@ DEFINE_EXPECT(SetActiveObject); DEFINE_EXPECT(GetWindow); DEFINE_EXPECT(CanInPlaceActivate); DEFINE_EXPECT(OnInPlaceActivate); +DEFINE_EXPECT(OnInPlaceActivateEx); DEFINE_EXPECT(OnUIActivate); DEFINE_EXPECT(GetWindowContext); DEFINE_EXPECT(OnUIDeactivate); DEFINE_EXPECT(OnInPlaceDeactivate); +DEFINE_EXPECT(OnInPlaceDeactivateEx); DEFINE_EXPECT(GetContainer); DEFINE_EXPECT(ShowUI); DEFINE_EXPECT(ActivateMe); @@ -122,7 +124,7 @@ DEFINE_EXPECT(UnlockRequest); static IUnknown *doc_unk; static BOOL expect_LockContainer_fLock; -static BOOL expect_SetActiveObject_active; +static BOOL expect_SetActiveObject_active, ipsex; static BOOL set_clientsite = FALSE, container_locked = FALSE; static BOOL readystate_set_loading = FALSE, load_from_stream; static BOOL editmode = FALSE; @@ -1180,22 +1182,22 @@ static const IOleInPlaceFrameVtbl InPlaceFrameVtbl = { static IOleInPlaceFrame InPlaceFrame = { &InPlaceFrameVtbl }; -static HRESULT WINAPI InPlaceSite_QueryInterface(IOleInPlaceSite *iface, REFIID riid, void **ppv) +static HRESULT WINAPI InPlaceSite_QueryInterface(IOleInPlaceSiteEx *iface, REFIID riid, void **ppv) { return QueryInterface(riid, ppv); } -static ULONG WINAPI InPlaceSite_AddRef(IOleInPlaceSite *iface) +static ULONG WINAPI InPlaceSite_AddRef(IOleInPlaceSiteEx *iface) { return 2; } -static ULONG WINAPI InPlaceSite_Release(IOleInPlaceSite *iface) +static ULONG WINAPI InPlaceSite_Release(IOleInPlaceSiteEx *iface) { return 1; } -static HRESULT WINAPI InPlaceSite_GetWindow(IOleInPlaceSite *iface, HWND *phwnd) +static HRESULT WINAPI InPlaceSite_GetWindow(IOleInPlaceSiteEx *iface, HWND *phwnd) { CHECK_EXPECT(GetWindow); ok(phwnd != NULL, "phwnd = NULL\n"); @@ -1203,31 +1205,31 @@ static HRESULT WINAPI InPlaceSite_GetWindow(IOleInPlaceSite *iface, HWND *phwnd) return S_OK; } -static HRESULT WINAPI InPlaceSite_ContextSensitiveHelp(IOleInPlaceSite *iface, BOOL fEnterMode) +static HRESULT WINAPI InPlaceSite_ContextSensitiveHelp(IOleInPlaceSiteEx *iface, BOOL fEnterMode) { ok(0, "unexpected call\n"); return E_NOTIMPL; } -static HRESULT WINAPI InPlaceSite_CanInPlaceActivate(IOleInPlaceSite *iface) +static HRESULT WINAPI InPlaceSite_CanInPlaceActivate(IOleInPlaceSiteEx *iface) { CHECK_EXPECT(CanInPlaceActivate); return S_OK; } -static HRESULT WINAPI InPlaceSite_OnInPlaceActivate(IOleInPlaceSite *iface) +static HRESULT WINAPI InPlaceSite_OnInPlaceActivate(IOleInPlaceSiteEx *iface) { CHECK_EXPECT(OnInPlaceActivate); return S_OK; } -static HRESULT WINAPI InPlaceSite_OnUIActivate(IOleInPlaceSite *iface) +static HRESULT WINAPI InPlaceSite_OnUIActivate(IOleInPlaceSiteEx *iface) { CHECK_EXPECT(OnUIActivate); return S_OK; } -static HRESULT WINAPI InPlaceSite_GetWindowContext(IOleInPlaceSite *iface, +static HRESULT WINAPI InPlaceSite_GetWindowContext(IOleInPlaceSiteEx *iface, IOleInPlaceFrame **ppFrame, IOleInPlaceUIWindow **ppDoc, LPRECT lprcPosRect, LPRECT lprcClipRect, LPOLEINPLACEFRAMEINFO lpFrameInfo) { @@ -1259,44 +1261,70 @@ static HRESULT WINAPI InPlaceSite_GetWindowContext(IOleInPlaceSite *iface, return S_OK; } -static HRESULT WINAPI InPlaceSite_Scroll(IOleInPlaceSite *iface, SIZE scrollExtant) +static HRESULT WINAPI InPlaceSite_Scroll(IOleInPlaceSiteEx *iface, SIZE scrollExtant) { ok(0, "unexpected call\n"); return E_NOTIMPL; } -static HRESULT WINAPI InPlaceSite_OnUIDeactivate(IOleInPlaceSite *iface, BOOL fUndoable) +static HRESULT WINAPI InPlaceSite_OnUIDeactivate(IOleInPlaceSiteEx *iface, BOOL fUndoable) { CHECK_EXPECT(OnUIDeactivate); ok(!fUndoable, "fUndoable = TRUE\n"); return S_OK; } -static HRESULT WINAPI InPlaceSite_OnInPlaceDeactivate(IOleInPlaceSite *iface) +static HRESULT WINAPI InPlaceSite_OnInPlaceDeactivate(IOleInPlaceSiteEx *iface) { CHECK_EXPECT(OnInPlaceDeactivate); return S_OK; } -static HRESULT WINAPI InPlaceSite_DiscardUndoState(IOleInPlaceSite *iface) +static HRESULT WINAPI InPlaceSite_DiscardUndoState(IOleInPlaceSiteEx *iface) { ok(0, "unexpected call\n"); return E_NOTIMPL; } -static HRESULT WINAPI InPlaceSite_DeactivateAndUndo(IOleInPlaceSite *iface) +static HRESULT WINAPI InPlaceSite_DeactivateAndUndo(IOleInPlaceSiteEx *iface) { ok(0, "unexpected call\n"); return E_NOTIMPL; } -static HRESULT WINAPI InPlaceSite_OnPosRectChange(IOleInPlaceSite *iface, LPCRECT lprcPosRect) +static HRESULT WINAPI InPlaceSite_OnPosRectChange(IOleInPlaceSiteEx *iface, LPCRECT lprcPosRect) { ok(0, "unexpected call\n"); return E_NOTIMPL; } -static const IOleInPlaceSiteVtbl InPlaceSiteVtbl = { +static HRESULT WINAPI InPlaceSiteEx_OnInPlaceActivateEx(IOleInPlaceSiteEx *iface, BOOL *pfNoRedraw, DWORD dwFlags) +{ + CHECK_EXPECT(OnInPlaceActivateEx); + + ok(pfNoRedraw != NULL, "pfNoRedraw == NULL\n"); + ok(!*pfNoRedraw, "*pfNoRedraw == TRUE\n"); + ok(dwFlags == 0, "dwFlags = %08x\n", dwFlags); + + return S_OK; +} + +static HRESULT WINAPI InPlaceSiteEx_OnInPlaceDeactivateEx(IOleInPlaceSiteEx *iface, BOOL fNoRedraw) +{ + CHECK_EXPECT(OnInPlaceDeactivateEx); + + ok(fNoRedraw, "fNoRedraw == FALSE\n"); + + return S_OK; +} + +static HRESULT WINAPI InPlaceSiteEx_RequestUIActivate(IOleInPlaceSiteEx *iface) +{ + ok(0, "unexpected call\n"); + return E_NOTIMPL; +} + +static const IOleInPlaceSiteExVtbl InPlaceSiteVtbl = { InPlaceSite_QueryInterface, InPlaceSite_AddRef, InPlaceSite_Release, @@ -1311,10 +1339,13 @@ static const IOleInPlaceSiteVtbl InPlaceSiteVtbl = { InPlaceSite_OnInPlaceDeactivate, InPlaceSite_DiscardUndoState, InPlaceSite_DeactivateAndUndo, - InPlaceSite_OnPosRectChange + InPlaceSite_OnPosRectChange, + InPlaceSiteEx_OnInPlaceActivateEx, + InPlaceSiteEx_OnInPlaceDeactivateEx, + InPlaceSiteEx_RequestUIActivate }; -static IOleInPlaceSite InPlaceSite = { &InPlaceSiteVtbl }; +static IOleInPlaceSiteEx InPlaceSiteEx = { &InPlaceSiteVtbl }; static HRESULT WINAPI ClientSite_QueryInterface(IOleClientSite *iface, REFIID riid, void **ppv) { @@ -1412,7 +1443,7 @@ static HRESULT WINAPI DocumentSite_ActivateMe(IOleDocumentSite *iface, IOleDocum ok(hres == S_OK, "could not get IOleDocument: %08x\n", hres); if(SUCCEEDED(hres)) { - hres = IOleDocument_CreateView(document, &InPlaceSite, NULL, 0, &view); + hres = IOleDocument_CreateView(document, (IOleInPlaceSite*)&InPlaceSiteEx, NULL, 0, &view); ok(hres == S_OK, "CreateView failed: %08x\n", hres); if(SUCCEEDED(hres)) { @@ -1423,16 +1454,16 @@ static HRESULT WINAPI DocumentSite_ActivateMe(IOleDocumentSite *iface, IOleDocum hres = IOleDocumentView_GetInPlaceSite(view, &inplacesite); ok(hres == S_OK, "GetInPlaceSite failed: %08x\n", hres); - ok(inplacesite == &InPlaceSite, "inplacesite=%p, expected %p\n", - inplacesite, &InPlaceSite); + ok(inplacesite == (IOleInPlaceSite*)&InPlaceSiteEx, "inplacesite=%p, expected %p\n", + inplacesite, &InPlaceSiteEx); - hres = IOleDocumentView_SetInPlaceSite(view, &InPlaceSite); + hres = IOleDocumentView_SetInPlaceSite(view, (IOleInPlaceSite*)&InPlaceSiteEx); ok(hres == S_OK, "SetInPlaceSite failed: %08x\n", hres); hres = IOleDocumentView_GetInPlaceSite(view, &inplacesite); ok(hres == S_OK, "GetInPlaceSite failed: %08x\n", hres); - ok(inplacesite == &InPlaceSite, "inplacesite=%p, expected %p\n", - inplacesite, &InPlaceSite); + ok(inplacesite == (IOleInPlaceSite*)&InPlaceSiteEx, "inplacesite=%p, expected %p\n", + inplacesite, &InPlaceSiteEx); hres = IOleDocumentView_QueryInterface(view, &IID_IOleInPlaceActiveObject, (void**)&activeobj); ok(hres == S_OK, "Could not get IOleInPlaceActiveObject: %08x\n", hres); @@ -1447,7 +1478,10 @@ static HRESULT WINAPI DocumentSite_ActivateMe(IOleDocumentSite *iface, IOleDocum SET_EXPECT(CanInPlaceActivate); SET_EXPECT(GetWindowContext); SET_EXPECT(GetWindow); - SET_EXPECT(OnInPlaceActivate); + if(ipsex) + SET_EXPECT(OnInPlaceActivateEx); + else + SET_EXPECT(OnInPlaceActivate); SET_EXPECT(SetStatusText); SET_EXPECT(Exec_SETPROGRESSMAX); SET_EXPECT(Exec_SETPROGRESSPOS); @@ -1468,7 +1502,10 @@ static HRESULT WINAPI DocumentSite_ActivateMe(IOleDocumentSite *iface, IOleDocum CHECK_CALLED(CanInPlaceActivate); CHECK_CALLED(GetWindowContext); CHECK_CALLED(GetWindow); - CHECK_CALLED(OnInPlaceActivate); + if(ipsex) + CHECK_CALLED(OnInPlaceActivateEx); + else + CHECK_CALLED(OnInPlaceActivate); CHECK_CALLED(SetStatusText); CHECK_CALLED(Exec_SETPROGRESSMAX); CHECK_CALLED(Exec_SETPROGRESSPOS); @@ -1504,7 +1541,10 @@ static HRESULT WINAPI DocumentSite_ActivateMe(IOleDocumentSite *iface, IOleDocum SET_EXPECT(CanInPlaceActivate); SET_EXPECT(GetWindowContext); SET_EXPECT(GetWindow); - SET_EXPECT(OnInPlaceActivate); + if(ipsex) + SET_EXPECT(OnInPlaceActivateEx); + else + SET_EXPECT(OnInPlaceActivate); SET_EXPECT(SetStatusText); SET_EXPECT(Exec_SETPROGRESSMAX); SET_EXPECT(Exec_SETPROGRESSPOS); @@ -1517,7 +1557,10 @@ static HRESULT WINAPI DocumentSite_ActivateMe(IOleDocumentSite *iface, IOleDocum CHECK_CALLED(CanInPlaceActivate); CHECK_CALLED(GetWindowContext); CHECK_CALLED(GetWindow); - CHECK_CALLED(OnInPlaceActivate); + if(ipsex) + CHECK_CALLED(OnInPlaceActivateEx); + else + CHECK_CALLED(OnInPlaceActivate); CHECK_CALLED(SetStatusText); CHECK_CALLED(Exec_SETPROGRESSMAX); CHECK_CALLED(Exec_SETPROGRESSPOS); @@ -2068,7 +2111,7 @@ static HRESULT QueryInterface(REFIID riid, void **ppv) else if(IsEqualGUID(&IID_IOleContainer, riid)) *ppv = &OleContainer; else if(IsEqualGUID(&IID_IOleWindow, riid) || IsEqualGUID(&IID_IOleInPlaceSite, riid)) - *ppv = &InPlaceSite; + *ppv = &InPlaceSiteEx; else if(IsEqualGUID(&IID_IOleInPlaceUIWindow, riid) || IsEqualGUID(&IID_IOleInPlaceFrame, riid)) *ppv = &InPlaceFrame; else if(IsEqualGUID(&IID_IOleCommandTarget , riid)) @@ -2077,9 +2120,10 @@ static HRESULT QueryInterface(REFIID riid, void **ppv) *ppv = &Dispatch; else if(IsEqualGUID(&IID_IServiceProvider, riid)) *ppv = &ServiceProvider; + else if(ipsex && IsEqualGUID(&IID_IOleInPlaceSiteEx, riid)) + *ppv = &InPlaceSiteEx; /* TODO: - * IOleInPlaceSiteEx * {D48A6EC6-6A4A-11CF-94A7-444553540000} * {7BB0B520-B1A7-11D2-BB23-00C04F79ABCD} * {000670BA-0000-0000-C000-000000000046} @@ -3045,10 +3089,20 @@ static void test_InPlaceDeactivate(IUnknown *unk, BOOL expect_call) if(FAILED(hres)) return; - if(expect_call) SET_EXPECT(OnInPlaceDeactivate); + if(expect_call) { + if(ipsex) + SET_EXPECT(OnInPlaceDeactivateEx); + else + SET_EXPECT(OnInPlaceDeactivate); + } hres = IOleInPlaceObjectWindowless_InPlaceDeactivate(windowlessobj); ok(hres == S_OK, "InPlaceDeactivate failed: %08x\n", hres); - if(expect_call) CHECK_CALLED(OnInPlaceDeactivate); + if(expect_call) { + if(ipsex) + CHECK_CALLED(OnInPlaceDeactivateEx); + else + CHECK_CALLED(OnInPlaceDeactivate); + } IOleInPlaceObjectWindowless_Release(windowlessobj); } @@ -3245,6 +3299,7 @@ static void init_test(enum load_state_t ls) { editmode = FALSE; stream_read = 0; protocol_read = 0; + ipsex = FALSE; } static void test_HTMLDocument(enum load_state_t ls) @@ -3343,6 +3398,7 @@ static void test_HTMLDocument_hlink(void) trace("Testing HTMLDocument (hlink)...\n"); init_test(LD_DOLOAD); + ipsex = TRUE; hres = create_document(&unk); if(FAILED(hres)) diff --git a/dlls/mshtml/view.c b/dlls/mshtml/view.c index 4c7cea9a78a..cbd8c8966f8 100644 --- a/dlls/mshtml/view.c +++ b/dlls/mshtml/view.c @@ -227,6 +227,7 @@ static HRESULT activate_window(HTMLDocument *This) IOleInPlaceUIWindow *pIPWnd; IOleInPlaceFrame *pIPFrame; IOleCommandTarget *cmdtrg; + IOleInPlaceSiteEx *ipsiteex; RECT posrect, cliprect; OLEINPLACEFRAMEINFO frameinfo; HWND parent_hwnd; @@ -289,7 +290,17 @@ static HRESULT activate_window(HTMLDocument *This) } This->in_place_active = TRUE; - hres = IOleInPlaceSite_OnInPlaceActivate(This->ipsite); + hres = IOleInPlaceSite_QueryInterface(This->ipsite, &IID_IOleInPlaceSiteEx, (void**)&ipsiteex); + if(SUCCEEDED(hres)) { + BOOL redraw = FALSE; + + hres = IOleInPlaceSiteEx_OnInPlaceActivateEx(ipsiteex, &redraw, 0); + IOleInPlaceSiteEx_Release(ipsiteex); + if(redraw) + FIXME("unsupported redraw\n"); + }else{ + hres = IOleInPlaceSite_OnInPlaceActivate(This->ipsite); + } if(FAILED(hres)) { WARN("OnInPlaceActivate failed: %08x\n", hres); This->in_place_active = FALSE; diff --git a/dlls/msi/action.c b/dlls/msi/action.c index 00ed5721b3c..d09ddd048b1 100644 --- a/dlls/msi/action.c +++ b/dlls/msi/action.c @@ -4587,30 +4587,20 @@ static LONG env_set_flags( LPCWSTR *name, LPWSTR *value, DWORD *flags ) static const WCHAR prefix[] = {'[','~',']',0}; *flags = 0; - while (*cptr && (*cptr == '=' || *cptr == '+' || - *cptr == '-' || *cptr == '!' || *cptr == '*')) + while (*cptr) { - switch (*cptr) - { - case '=': + if (*cptr == '=') *flags |= ENV_ACT_SETALWAYS; - break; - case '+': + else if (*cptr == '+') *flags |= ENV_ACT_SETABSENT; - break; - case '-': + else if (*cptr == '-') *flags |= ENV_ACT_REMOVE; - break; - case '!': + else if (*cptr == '!') *flags |= ENV_ACT_REMOVEMATCH; - break; - case '*': + else if (*cptr == '*') *flags |= ENV_MOD_MACHINE; + else break; - default: - ERR("Unknown Environment flag: %c\n", *cptr); - return ERROR_FUNCTION_FAILED; - } cptr++; (*name)++; diff --git a/dlls/msi/custom.c b/dlls/msi/custom.c index 9170a7ea4a1..c89acbf7f15 100644 --- a/dlls/msi/custom.c +++ b/dlls/msi/custom.c @@ -38,6 +38,15 @@ WINE_DEFAULT_DEBUG_CHANNEL(msi); static const WCHAR c_collen[] = {'C',':','\\',0}; static const WCHAR cszTempFolder[]= {'T','e','m','p','F','o','l','d','e','r',0}; + +static const WCHAR szActionData[] = { + 'C','u','s','t','o','m','A','c','t','i','o','n','D','a','t','a',0 +}; +static const WCHAR ProdCode[] = { + 'P','r','o','d','u','c','t','C','o','d','e',0 +}; +static const WCHAR UserSID[] = {'U','s','e','r','S','I','D',0}; + typedef struct tagMSIRUNNINGACTION { struct list entry; @@ -123,31 +132,48 @@ static BOOL check_execution_scheduling_options(MSIPACKAGE *package, LPCWSTR acti return TRUE; } -/* stores the CustomActionData before the action: - * [CustomActionData]Action +/* stores the following properties before the action: + * + * [CustomActionData;UserSID;ProductCode]Action */ -static LPWSTR msi_get_deferred_action(LPCWSTR action, LPCWSTR actiondata) +static LPWSTR msi_get_deferred_action(LPCWSTR action, LPCWSTR actiondata, + LPCWSTR usersid, LPCWSTR prodcode) { LPWSTR deferred; DWORD len; - static const WCHAR begin[] = {'[',0}; - static const WCHAR end[] = {']',0}; + static const WCHAR format[] = {'[','%','s',';','%','s',';','%','s',']','%','s',0}; if (!actiondata) return strdupW(action); - len = lstrlenW(action) + lstrlenW(actiondata) + 3; + len = lstrlenW(action) + lstrlenW(actiondata) + + lstrlenW(usersid) + lstrlenW(prodcode) + 5; deferred = msi_alloc(len * sizeof(WCHAR)); - lstrcpyW(deferred, begin); - lstrcatW(deferred, actiondata); - lstrcatW(deferred, end); - lstrcatW(deferred, action); - + sprintfW(deferred, format, actiondata, usersid, prodcode, action); return deferred; } +static void set_deferred_action_props(MSIPACKAGE *package, LPWSTR deferred_data) +{ + LPWSTR end, beg = deferred_data; + + end = strchrW(beg, ';'); + *end = '\0'; + MSI_SetPropertyW(package, szActionData, beg); + beg = end + 1; + + end = strchrW(beg, ';'); + *end = '\0'; + MSI_SetPropertyW(package, UserSID, beg); + beg = end + 1; + + end = strchrW(beg, ']'); + *end = '\0'; + MSI_SetPropertyW(package, ProdCode, beg); +} + UINT ACTION_CustomAction(MSIPACKAGE *package,LPCWSTR action, BOOL execute) { UINT rc = ERROR_SUCCESS; @@ -205,7 +231,9 @@ UINT ACTION_CustomAction(MSIPACKAGE *package,LPCWSTR action, BOOL execute) if (!execute) { LPWSTR actiondata = msi_dup_property(package, action); - LPWSTR deferred = msi_get_deferred_action(action, actiondata); + LPWSTR usersid = msi_dup_property(package, UserSID); + LPWSTR prodcode = msi_dup_property(package, ProdCode); + LPWSTR deferred = msi_get_deferred_action(action, actiondata, usersid, prodcode); if (type & msidbCustomActionTypeCommit) { @@ -219,23 +247,25 @@ UINT ACTION_CustomAction(MSIPACKAGE *package,LPCWSTR action, BOOL execute) } rc = ERROR_SUCCESS; + msi_free(actiondata); + msi_free(usersid); + msi_free(prodcode); msi_free(deferred); goto end; } else { - /*Set ActionData*/ - - static const WCHAR szActionData[] = { - 'C','u','s','t','o','m','A','c','t','i','o','n','D','a','t','a',0}; static const WCHAR szBlank[] = {0}; + LPWSTR actiondata = msi_dup_property( package, action ); + if (deferred_data) - MSI_SetPropertyW(package,szActionData,deferred_data); + set_deferred_action_props(package, deferred_data); else if (actiondata) MSI_SetPropertyW(package,szActionData,actiondata); else MSI_SetPropertyW(package,szActionData,szBlank); + msi_free(actiondata); } } diff --git a/dlls/msrle32/msrle32.c b/dlls/msrle32/msrle32.c index 5decd745a16..bf611dd43ba 100644 --- a/dlls/msrle32/msrle32.c +++ b/dlls/msrle32/msrle32.c @@ -60,23 +60,27 @@ static BOOL isSupportedMRLE(LPCBITMAPINFOHEADER lpbi); static BYTE MSRLE32_GetNearestPaletteIndex(UINT count, const RGBQUAD *clrs, RGBQUAD clr); /* compression functions */ -static void computeInternalFrame(CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, LPBYTE lpIn); +static void computeInternalFrame(CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, const BYTE *lpIn); static LONG MSRLE32_GetMaxCompressedSize(LPCBITMAPINFOHEADER lpbi); -static LRESULT MSRLE32_CompressRLE4(CodecInfo *pi, LPBITMAPINFOHEADER lpbiIn, LPBYTE lpIn, LPBITMAPINFOHEADER lpbiOut, LPBYTE lpOut, BOOL isKey); -static LRESULT MSRLE32_CompressRLE8(CodecInfo *pi, LPBITMAPINFOHEADER lpbiIn, LPBYTE lpIn, LPBITMAPINFOHEADER lpbiOut, LPBYTE lpOut, BOOL isKey); +static LRESULT MSRLE32_CompressRLE4(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, + const BYTE *lpIn, LPBITMAPINFOHEADER lpbiOut, + LPBYTE lpOut, BOOL isKey); +static LRESULT MSRLE32_CompressRLE8(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, + const BYTE *lpIn, LPBITMAPINFOHEADER lpbiOut, + LPBYTE lpOut, BOOL isKey); /* decompression functions */ -static LRESULT MSRLE32_DecompressRLE4(CodecInfo *pi, LPCBITMAPINFOHEADER lpbi, - LPBYTE lpIn, LPBYTE lpOut); -static LRESULT MSRLE32_DecompressRLE8(CodecInfo *pi, LPCBITMAPINFOHEADER lpbi, - LPBYTE lpIn, LPBYTE lpOut); +static LRESULT MSRLE32_DecompressRLE4(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbi, + const BYTE *lpIn, LPBYTE lpOut); +static LRESULT MSRLE32_DecompressRLE8(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbi, + const BYTE *lpIn, LPBYTE lpOut); /* API functions */ static LRESULT CompressGetFormat(CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, LPBITMAPINFOHEADER lpbiOut); static LRESULT CompressGetSize(CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, LPCBITMAPINFOHEADER lpbiOut); -static LRESULT CompressQuery(CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, +static LRESULT CompressQuery(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, LPCBITMAPINFOHEADER lpbiOut); static LRESULT CompressBegin(CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, LPCBITMAPINFOHEADER lpbiOut); @@ -183,7 +187,7 @@ static BYTE MSRLE32_GetNearestPaletteIndex(UINT count, const RGBQUAD *clrs, RGBQ /*****************************************************************************/ -void computeInternalFrame(CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, LPBYTE lpIn) +void computeInternalFrame(CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, const BYTE *lpIn) { WORD wIntensityTbl[256]; DWORD lInLine, lOutLine; @@ -258,7 +262,7 @@ static LONG MSRLE32_GetMaxCompressedSize(LPCBITMAPINFOHEADER lpbi) * lpA => previous pos in current frame * lpB => current pos in current frame */ -static INT countDiffRLE4(LPWORD lpP, LPWORD lpA, LPWORD lpB, INT pos, LONG lDist, LONG width) +static INT countDiffRLE4(const WORD *lpP, const WORD *lpA, const WORD *lpB, INT pos, LONG lDist, LONG width) { INT count; WORD clr1, clr2; @@ -317,7 +321,7 @@ static INT countDiffRLE4(LPWORD lpP, LPWORD lpA, LPWORD lpB, INT pos, LONG lDist * lpA => previous pos in current frame * lpB => current pos in current frame */ -static INT countDiffRLE8(LPWORD lpP, LPWORD lpA, LPWORD lpB, INT pos, LONG lDist, LONG width) +static INT countDiffRLE8(const WORD *lpP, const WORD *lpA, const WORD *lpB, INT pos, LONG lDist, LONG width) { INT count; @@ -346,7 +350,11 @@ static INT countDiffRLE8(LPWORD lpP, LPWORD lpA, LPWORD lpB, INT pos, LONG lDist return count; } -static INT MSRLE32_CompressRLE4Line(CodecInfo *pi, LPWORD lpP, LPWORD lpC, LPCBITMAPINFOHEADER lpbi, BYTE *lpIn, LONG lDist, INT x, LPBYTE *ppOut, DWORD *lpSizeImage) +static INT MSRLE32_CompressRLE4Line(const CodecInfo *pi, const WORD *lpP, + const WORD *lpC, LPCBITMAPINFOHEADER lpbi, + const BYTE *lpIn, LONG lDist, + INT x, LPBYTE *ppOut, + DWORD *lpSizeImage) { LPBYTE lpOut = *ppOut; INT count, pos; @@ -445,7 +453,11 @@ static INT MSRLE32_CompressRLE4Line(CodecInfo *pi, LPWORD lpP, LPWORD lpC, LPCBI return x; } -static INT MSRLE32_CompressRLE8Line(CodecInfo *pi, LPWORD lpP, LPWORD lpC, LPCBITMAPINFOHEADER lpbi, BYTE *lpIn, LONG lDist, INT x, LPBYTE *ppOut, DWORD *lpSizeImage) +static INT MSRLE32_CompressRLE8Line(const CodecInfo *pi, const WORD *lpP, + const WORD *lpC, LPCBITMAPINFOHEADER lpbi, + const BYTE *lpIn, LONG lDist, + INT x, LPBYTE *ppOut, + DWORD *lpSizeImage) { LPBYTE lpOut = *ppOut; INT count, pos; @@ -528,7 +540,9 @@ static INT MSRLE32_CompressRLE8Line(CodecInfo *pi, LPWORD lpP, LPWORD lpC, LPCBI return x; } -LRESULT MSRLE32_CompressRLE4(CodecInfo *pi, LPBITMAPINFOHEADER lpbiIn, LPBYTE lpIn, LPBITMAPINFOHEADER lpbiOut, LPBYTE lpOut, BOOL isKey) +LRESULT MSRLE32_CompressRLE4(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, + const BYTE *lpIn, LPBITMAPINFOHEADER lpbiOut, + LPBYTE lpOut, BOOL isKey) { LPWORD lpC; LONG lLine, lInLine, lDist; @@ -680,7 +694,9 @@ LRESULT MSRLE32_CompressRLE4(CodecInfo *pi, LPBITMAPINFOHEADER lpbiIn, LPBYTE lp return ICERR_OK; } -LRESULT MSRLE32_CompressRLE8(CodecInfo *pi, LPBITMAPINFOHEADER lpbiIn, LPBYTE lpIn, LPBITMAPINFOHEADER lpbiOut, LPBYTE lpOut, BOOL isKey) +LRESULT MSRLE32_CompressRLE8(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, + const BYTE *lpIn, LPBITMAPINFOHEADER lpbiOut, + LPBYTE lpOut, BOOL isKey) { LPWORD lpC; LONG lDist, lInLine, lLine; @@ -820,8 +836,8 @@ LRESULT MSRLE32_CompressRLE8(CodecInfo *pi, LPBITMAPINFOHEADER lpbiIn, LPBYTE lp /*****************************************************************************/ -static LRESULT MSRLE32_DecompressRLE4(CodecInfo *pi, LPCBITMAPINFOHEADER lpbi, - LPBYTE lpIn, LPBYTE lpOut) +static LRESULT MSRLE32_DecompressRLE4(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbi, + const BYTE *lpIn, LPBYTE lpOut) { int bytes_per_pixel; int line_size; @@ -982,8 +998,8 @@ static LRESULT MSRLE32_DecompressRLE4(CodecInfo *pi, LPCBITMAPINFOHEADER lpbi, return ICERR_OK; } -static LRESULT MSRLE32_DecompressRLE8(CodecInfo *pi, LPCBITMAPINFOHEADER lpbi, - LPBYTE lpIn, LPBYTE lpOut) +static LRESULT MSRLE32_DecompressRLE8(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbi, + const BYTE *lpIn, LPBYTE lpOut) { int bytes_per_pixel; int line_size; @@ -1153,7 +1169,7 @@ static LRESULT Close(CodecInfo *pi) return 1; } -static LRESULT GetInfo(CodecInfo *pi, ICINFO *icinfo, DWORD dwSize) +static LRESULT GetInfo(const CodecInfo *pi, ICINFO *icinfo, DWORD dwSize) { /* pre-condition */ assert(pi != NULL); @@ -1192,7 +1208,7 @@ static LRESULT SetQuality(CodecInfo *pi, LONG lQuality) return ICERR_OK; } -static LRESULT Configure(CodecInfo *pi, HWND hWnd) +static LRESULT Configure(const CodecInfo *pi, HWND hWnd) { /* pre-condition */ assert(pi != NULL); @@ -1313,7 +1329,7 @@ static LRESULT CompressGetSize(CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, return MSRLE32_GetMaxCompressedSize(lpbiOut); } -static LRESULT CompressQuery(CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, +static LRESULT CompressQuery(const CodecInfo *pi, LPCBITMAPINFOHEADER lpbiIn, LPCBITMAPINFOHEADER lpbiOut) { /* pre-condition */ diff --git a/dlls/ntdll/cdrom.c b/dlls/ntdll/cdrom.c index 45a2b47dfd8..f288bfe4df8 100644 --- a/dlls/ntdll/cdrom.c +++ b/dlls/ntdll/cdrom.c @@ -76,13 +76,12 @@ #endif #ifdef HAVE_IOKIT_IOKITLIB_H -# ifndef SENSEBUFLEN -# include -# include -# include -# include -# define SENSEBUFLEN kSenseDefaultSize -# endif +# include +# include +# include +# include +# include +# define SENSEBUFLEN kSenseDefaultSize #endif #define NONAMELESSUNION @@ -491,6 +490,33 @@ static NTSTATUS CDROM_SyncCache(int dev, int fd) } cdrom_cache[dev].toc_good = 1; return STATUS_SUCCESS; + +#elif defined(__APPLE__) + int i; + dk_cd_read_toc_t hdr; + CDROM_TOC *toc = &cdrom_cache[dev].toc; + cdrom_cache[dev].toc_good = 0; + + memset( &hdr, 0, sizeof(hdr) ); + hdr.buffer = toc; + hdr.bufferLength = sizeof(*toc); + if (ioctl(fd, DKIOCCDREADTOC, &hdr) == -1) + { + WARN("(%d) -- Error occurred (%s)!\n", dev, strerror(errno)); + return FILE_GetNtStatus(); + } + for (i = toc->FirstTrack; i <= toc->LastTrack + 1; i++) + { + /* convert address format */ + TRACK_DATA *data = &toc->TrackData[i - toc->FirstTrack]; + DWORD frame = (((DWORD)data->Address[0] << 24) | ((DWORD)data->Address[1] << 16) | + ((DWORD)data->Address[2] << 8) | data->Address[3]); + MSF_OF_FRAME( data->Address[1], frame ); + data->Address[0] = 0; + } + + cdrom_cache[dev].toc_good = 1; + return STATUS_SUCCESS; #else return STATUS_NOT_SUPPORTED; #endif diff --git a/dlls/setupapi/install.c b/dlls/setupapi/install.c index 902216e26ab..b53b2660b18 100644 --- a/dlls/setupapi/install.c +++ b/dlls/setupapi/install.c @@ -1024,7 +1024,7 @@ void WINAPI InstallHinfSectionW( HWND hwnd, HINSTANCE handle, LPCWSTR cmdline, I path=d=s; while (*s) { - if (*s==0 || ((*s=='\t' || *s==' ') && !in_quotes)) { + if (*s==0) { /* end of this command line argument */ break; } else if (*s=='\\') { diff --git a/dlls/setupapi/tests/Makefile.in b/dlls/setupapi/tests/Makefile.in index e6296700913..23b0f5e2559 100644 --- a/dlls/setupapi/tests/Makefile.in +++ b/dlls/setupapi/tests/Makefile.in @@ -3,10 +3,11 @@ TOPOBJDIR = ../../.. SRCDIR = @srcdir@ VPATH = @srcdir@ TESTDLL = setupapi.dll -IMPORTS = setupapi advapi32 kernel32 +IMPORTS = setupapi user32 advapi32 kernel32 CTESTS = \ devinst.c \ + install.c \ misc.c \ parser.c \ query.c \ diff --git a/dlls/setupapi/tests/install.c b/dlls/setupapi/tests/install.c new file mode 100644 index 00000000000..5cecd97467d --- /dev/null +++ b/dlls/setupapi/tests/install.c @@ -0,0 +1,179 @@ +/* + * Unit test for setupapi.dll install functions + * + * Copyright 2007 Misha Koshelev + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include +#include +#include + +#include "windef.h" +#include "winbase.h" +#include "winnls.h" +#include "winuser.h" +#include "winreg.h" +#include "setupapi.h" + +#include "wine/test.h" + +static const char inffile[] = "test.inf"; +static char CURR_DIR[MAX_PATH]; + +/* Notes on InstallHinfSectionA/W: + * - InstallHinfSectionW on Win98 and InstallHinfSectionA on WinXP seem to be stubs - they do not do anything + * and simply return without displaying any error message or setting last error. We test whether + * InstallHinfSectionA sets last error, and if it doesn't we set it to NULL and use the W version if available. + * - These functions do not return a value and do not always set last error to ERROR_SUCCESS when installation still + * occurs (e.g., unquoted inf file with spaces, registry keys are written but last error is 6). Also, on Win98 last error + * is set to ERROR_SUCCESS even if install fails (e.g., quoted inf file with spaces, no registry keys set, MessageBox with + * "Installation Error" displayed). Thus, we must use functional tests (e.g., is registry key created) to determine whether + * or not installation occured. + * - On installation problems, a MessageBox() is displayed and a Beep() is issued. The MessageBox() is disabled with a + * CBT hook. + */ + +static void (WINAPI *pInstallHinfSectionA)(HWND, HINSTANCE, LPCSTR, INT); +static void (WINAPI *pInstallHinfSectionW)(HWND, HINSTANCE, LPCWSTR, INT); + +/* + * Helpers + */ + +static void create_inf_file(LPCSTR filename, const char *data) +{ + DWORD res; + HANDLE handle = CreateFile(filename, GENERIC_WRITE, 0, NULL, + CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + assert(handle != INVALID_HANDLE_VALUE); + assert(WriteFile(handle, data, strlen(data), &res, NULL)); + CloseHandle(handle); +} + +/* CBT hook to ensure a window (e.g., MessageBox) cannot be created */ +static HHOOK hhook; +static LRESULT CALLBACK cbt_hook_proc(int nCode, WPARAM wParam, LPARAM lParam) +{ + return nCode == HCBT_CREATEWND ? 1: CallNextHookEx(hhook, nCode, wParam, lParam); +} + +/* + * Tests + */ + +static const char *cmdline_inf = "[Version]\n" + "Signature=\"$Chicago$\"\n" + "[DefaultInstall]\n" + "AddReg=Add.Settings\n" + "[Add.Settings]\n" + "HKCU,Software\\Wine\\setupapitest,,\n"; + +static void ok_cmdline(LPCSTR section, int mode, LPCSTR path, BOOL expectsuccess) +{ + CHAR cmdline[MAX_PATH * 2]; + LONG ret; + + sprintf(cmdline, "%s %d %s", section, mode, path); + if (pInstallHinfSectionA) pInstallHinfSectionA(NULL, NULL, cmdline, 0); + else + { + WCHAR cmdlinew[MAX_PATH * 2]; + MultiByteToWideChar(CP_ACP, 0, cmdline, -1, cmdlinew, MAX_PATH*2); + pInstallHinfSectionW(NULL, NULL, cmdlinew, 0); + } + + /* Functional tests for success of install and clean up */ + ret = RegDeleteKey(HKEY_CURRENT_USER, "Software\\Wine\\setupapitest"); + ok((expectsuccess && ret == ERROR_SUCCESS) || + (!expectsuccess && ret == ERROR_FILE_NOT_FOUND), + "Expected registry key Software\\Wine\\setupapitest to %s, RegDeleteKey returned %d\n", + expectsuccess ? "exist" : "not exist", + ret); +} + +/* Test command line processing */ +static void test_cmdline(void) +{ + static const char infwithspaces[] = "test file.inf"; + char path[MAX_PATH]; + + create_inf_file(inffile, cmdline_inf); + sprintf(path, "%s\\%s", CURR_DIR, inffile); + ok_cmdline("DefaultInstall", 128, path, TRUE); + ok(DeleteFile(inffile), "Expected source inf to exist, last error was %d\n", GetLastError()); + + /* Test handling of spaces in path, unquoted and quoted */ + create_inf_file(infwithspaces, cmdline_inf); + + sprintf(path, "%s\\%s", CURR_DIR, infwithspaces); + ok_cmdline("DefaultInstall", 128, path, TRUE); + + sprintf(path, "\"%s\\%s\"", CURR_DIR, infwithspaces); + todo_wine ok_cmdline("DefaultInstall", 128, path, FALSE); + + ok(DeleteFile(infwithspaces), "Expected source inf to exist, last error was %d\n", GetLastError()); +} + +START_TEST(install) +{ + HMODULE hsetupapi = GetModuleHandle("setupapi.dll"); + char temp_path[MAX_PATH], prev_path[MAX_PATH]; + DWORD len; + + GetCurrentDirectory(MAX_PATH, prev_path); + GetTempPath(MAX_PATH, temp_path); + SetCurrentDirectory(temp_path); + + strcpy(CURR_DIR, temp_path); + len = strlen(CURR_DIR); + if(len && (CURR_DIR[len - 1] == '\\')) + CURR_DIR[len - 1] = 0; + + pInstallHinfSectionA = (void *)GetProcAddress(hsetupapi, "InstallHinfSectionA"); + pInstallHinfSectionW = (void *)GetProcAddress(hsetupapi, "InstallHinfSectionW"); + if (pInstallHinfSectionA) + { + /* Check if pInstallHinfSectionA sets last error or is a stub (as on WinXP) */ + static const char *minimal_inf = "[Version]\nSignature=\"$Chicago$\"\n"; + char cmdline[MAX_PATH*2]; + create_inf_file(inffile, minimal_inf); + sprintf(cmdline, "DefaultInstall 128 %s\\%s", CURR_DIR, inffile); + SetLastError(0xdeadbeef); + pInstallHinfSectionA(NULL, NULL, cmdline, 0); + if (GetLastError() == 0xdeadbeef) + { + skip("InstallHinfSectionA is broken (stub)\n"); + pInstallHinfSectionA = NULL; + } + ok(DeleteFile(inffile), "Expected source inf to exist, last error was %d\n", GetLastError()); + } + if (!pInstallHinfSectionW && !pInstallHinfSectionA) + skip("InstallHinfSectionA and InstallHinfSectionW are not available\n"); + else + { + /* Set CBT hook to disallow MessageBox creation in current thread */ + hhook = SetWindowsHookExA(WH_CBT, cbt_hook_proc, 0, GetCurrentThreadId()); + assert(hhook != 0); + + test_cmdline(); + + UnhookWindowsHookEx(hhook); + } + + SetCurrentDirectory(prev_path); +} diff --git a/dlls/user32/tests/edit.c b/dlls/user32/tests/edit.c index 2bdf0ededab..534bd9bca30 100644 --- a/dlls/user32/tests/edit.c +++ b/dlls/user32/tests/edit.c @@ -1006,13 +1006,10 @@ static void test_text_position(void) static void test_espassword(void) { HWND hwEdit; - MSG msMessage; LONG r; char buffer[1024]; const char* password = "secret"; - msMessage.message = WM_KEYDOWN; - hwEdit = create_editcontrol(ES_PASSWORD, 0); r = get_edit_style(hwEdit); ok(r == ES_PASSWORD, "Wrong style expected 0x%x got: 0x%x\n", ES_PASSWORD, r); @@ -1026,7 +1023,7 @@ static void test_espassword(void) /* get text */ r = SendMessage(hwEdit, WM_GETTEXT, 1024, (LPARAM) buffer); - ok(r == strlen(password), "Expected: %d, got: %d\n", strlen(password), r); + ok(r == strlen(password), "Expected: %s, got len %d\n", password, r); ok(strcmp(buffer, password) == 0, "expected %s, got %s\n", password, buffer); r = OpenClipboard(hwEdit); diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c index 0e2f9ee2228..98405c17265 100644 --- a/dlls/winex11.drv/opengl.c +++ b/dlls/winex11.drv/opengl.c @@ -1505,7 +1505,7 @@ BOOL X11DRV_wglMakeCurrent(X11DRV_PDEVICE *physDev, HGLRC hglrc) { NtCurrentTeb()->glContext = NULL; } else { Wine_GLContext *ctx = (Wine_GLContext *) hglrc; - Drawable drawable = physDev->drawable; + Drawable drawable = get_glxdrawable(physDev); if (ctx->ctx == NULL) { /* The describe lines below are for debugging purposes only */ if (TRACE_ON(wgl)) { diff --git a/dlls/winex11.drv/settings.c b/dlls/winex11.drv/settings.c index fd4671a1a75..cc6dd2cf644 100644 --- a/dlls/winex11.drv/settings.c +++ b/dlls/winex11.drv/settings.c @@ -303,7 +303,9 @@ LONG X11DRV_ChangeDisplaySettingsEx( LPCWSTR devname, LPDEVMODEW devmode, } /* no valid modes found */ - ERR("No matching mode found! (%s)\n", handler_name); + ERR("No matching mode found(%dx%dx%d)! (%s)\n", + devmode->dmPelsWidth, devmode->dmPelsHeight, + devmode->dmBitsPerPel, handler_name); return DISP_CHANGE_BADMODE; } diff --git a/dlls/ws2_32/socket.c b/dlls/ws2_32/socket.c index 456be21c853..aab38884206 100644 --- a/dlls/ws2_32/socket.c +++ b/dlls/ws2_32/socket.c @@ -927,6 +927,35 @@ static unsigned int ws_sockaddr_ws2u(const struct WS_sockaddr* wsaddr, int wsadd return uaddrlen; } +static BOOL is_sockaddr_bound(const struct sockaddr *uaddr, int uaddrlen) +{ + switch (uaddr->sa_family) + { +#ifdef HAVE_IPX + case AF_IPX: + FIXME("don't know how to tell if IPX socket is bound, assuming it is!\n"); + return TRUE; +#endif + case AF_INET6: + { + static const struct sockaddr_in6 emptyAddr; + const struct sockaddr_in6 *in6 = (const struct sockaddr_in6*) uaddr; + return in6->sin6_port || memcmp(&in6->sin6_addr, &emptyAddr.sin6_addr, sizeof(struct in6_addr)); + } + case AF_INET: + { + static const struct sockaddr_in emptyAddr; + const struct sockaddr_in *in = (const struct sockaddr_in*) uaddr; + return in->sin_port || memcmp(&in->sin_addr, &emptyAddr.sin_addr, sizeof(struct in_addr)); + } + case AF_UNSPEC: + return FALSE; + default: + FIXME("unknown address family %d\n", uaddr->sa_family); + return TRUE; + } +} + /* Returns 0 if successful, -1 if the buffer is too small */ static int ws_sockaddr_u2ws(const struct sockaddr* uaddr, struct WS_sockaddr* wsaddr, int* wsaddrlen) { @@ -1590,6 +1619,10 @@ int WINAPI WS_getsockname(SOCKET s, struct WS_sockaddr *name, int *namelen) { SetLastError(wsaErrno()); } + else if (!is_sockaddr_bound(&uaddr.addr, uaddrlen)) + { + SetLastError(WSAEINVAL); + } else if (ws_sockaddr_u2ws(&uaddr.addr, name, namelen) != 0) { /* The buffer was too small */ diff --git a/dlls/ws2_32/tests/sock.c b/dlls/ws2_32/tests/sock.c index 34037159763..cc413206655 100644 --- a/dlls/ws2_32/tests/sock.c +++ b/dlls/ws2_32/tests/sock.c @@ -1644,6 +1644,16 @@ static void test_getsockname(void) return; } + memcpy(&sa_get, &sa_set, sizeof(sa_set)); + if (getsockname(sock, (struct sockaddr*) &sa_get, &sa_get_len) == 0) + ok(0, "getsockname on unbound socket should fail\n"); + else { + ok(WSAGetLastError() == WSAEINVAL, "getsockname on unbound socket " + "failed with %d, expected %d\n", WSAGetLastError(), WSAEINVAL); + ok(memcmp(&sa_get, &sa_set, sizeof(sa_get)) == 0, + "failed getsockname modified sockaddr when it shouldn't\n"); + } + if(bind(sock, (struct sockaddr *) &sa_set, sa_set_len) < 0){ trace("Failed to bind socket: %d\n", WSAGetLastError()); closesocket(sock); diff --git a/include/wine/port.h b/include/wine/port.h index 6ab0627cd71..b8009cc127d 100644 --- a/include/wine/port.h +++ b/include/wine/port.h @@ -276,7 +276,7 @@ int ffs( int x ); #ifndef HAVE_FUTIMES struct timeval; -int futimes(int fd, const struct timeval tv[2]); +int futimes(int fd, const struct timeval *tv); #endif #ifndef HAVE_GETPAGESIZE diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c index 2a7afe1725a..3f4cdd0b11b 100644 --- a/programs/cmd/wcmdmain.c +++ b/programs/cmd/wcmdmain.c @@ -92,6 +92,7 @@ extern struct env_stack *pushd_directories; static const WCHAR *pagedMessage = NULL; static char *output_bufA = NULL; #define MAX_WRITECONSOLE_SIZE 65535 +BOOL unicodePipes = FALSE; static WCHAR *WCMD_expand_envvar(WCHAR *start); @@ -141,6 +142,10 @@ int wmain (int argc, WCHAR *argvW[]) opt_k=1; } else if (tolowerW(c)=='s') { opt_s=1; + } else if (tolowerW(c)=='a') { + unicodePipes=FALSE; + } else if (tolowerW(c)=='u') { + unicodePipes=TRUE; } else if (tolowerW(c)=='t' && (*argvW)[2]==':') { opt_t=strtoulW(&(*argvW)[3], NULL, 16); } else if (tolowerW(c)=='x' || tolowerW(c)=='y') { @@ -1306,22 +1311,27 @@ static void WCMD_output_asis_len(const WCHAR *message, int len) { BOOL usedDefaultChar = FALSE; DWORD convertedChars; - /* - * Allocate buffer to use when writing to file. (Not freed, as one off) - */ - if (!output_bufA) output_bufA = HeapAlloc(GetProcessHeap(), 0, - MAX_WRITECONSOLE_SIZE); - if (!output_bufA) { - WINE_FIXME("Out of memory - could not allocate ansi 64K buffer\n"); - return; - } + if (!unicodePipes) { + /* + * Allocate buffer to use when writing to file. (Not freed, as one off) + */ + if (!output_bufA) output_bufA = HeapAlloc(GetProcessHeap(), 0, + MAX_WRITECONSOLE_SIZE); + if (!output_bufA) { + WINE_FIXME("Out of memory - could not allocate ansi 64K buffer\n"); + return; + } - /* Convert to OEM, then output */ - convertedChars = WideCharToMultiByte(GetConsoleOutputCP(), 0, message, - len, output_bufA, MAX_WRITECONSOLE_SIZE, - "?", &usedDefaultChar); - WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), output_bufA, convertedChars, - &nOut, FALSE); + /* Convert to OEM, then output */ + convertedChars = WideCharToMultiByte(GetConsoleOutputCP(), 0, message, + len, output_bufA, MAX_WRITECONSOLE_SIZE, + "?", &usedDefaultChar); + WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), output_bufA, convertedChars, + &nOut, FALSE); + } else { + WriteFile(GetStdHandle(STD_OUTPUT_HANDLE), message, len*sizeof(WCHAR), + &nOut, FALSE); + } } return; } diff --git a/server/fd.c b/server/fd.c index 11cf294a68c..7a7d5722a27 100644 --- a/server/fd.c +++ b/server/fd.c @@ -55,6 +55,9 @@ #ifdef HAVE_SYS_STATFS_H #include #endif +#ifdef HAVE_SYS_SYSCTL_H +#include +#endif #ifdef HAVE_SYS_EVENT_H #include #undef LIST_INIT @@ -518,9 +521,17 @@ static int kqueue_fd = -1; static inline void init_epoll(void) { -#ifndef __APPLE__ /* kqueue support is broken in the MacOS kernel so we can't use it */ - kqueue_fd = kqueue(); +#ifdef __APPLE__ /* kqueue support is broken in Mac OS < 10.5 */ + int mib[2]; + char release[32]; + size_t len = sizeof(release); + + mib[0] = CTL_KERN; + mib[1] = KERN_OSRELEASE; + if (sysctl( mib, 2, release, &len, NULL, 0 ) == -1) return; + if (atoi(release) < 9) return; #endif + kqueue_fd = kqueue(); } static inline void set_fd_epoll_events( struct fd *fd, int user, int events ) diff --git a/tools/widl/client.c b/tools/widl/client.c index 6172cfe62db..86ead201daa 100644 --- a/tools/widl/client.c +++ b/tools/widl/client.c @@ -44,18 +44,12 @@ static FILE* client; static int indent = 0; -static int print_client( const char *format, ... ) +static void print_client( const char *format, ... ) { va_list va; - int i, r; - va_start(va, format); - if (format[0] != '\n') - for (i = 0; i < indent; i++) - fprintf(client, " "); - r = vfprintf(client, format, va); + print(client, indent, format, va); va_end(va); - return r; } diff --git a/tools/widl/parser.y b/tools/widl/parser.y index a991cad7a72..5f30ccc1af4 100644 --- a/tools/widl/parser.y +++ b/tools/widl/parser.y @@ -509,7 +509,7 @@ cases: { $$ = NULL; } | cases case { $$ = append_var( $1, $2 ); } ; -case: tCASE expr ':' field { attr_t *a = make_attrp(ATTR_CASE, $2); +case: tCASE expr ':' field { attr_t *a = make_attrp(ATTR_CASE, append_expr( NULL, $2 )); $$ = $4; if (!$$) $$ = make_var(NULL); $$->attrs = append_attr( $$->attrs, a ); } @@ -1668,8 +1668,21 @@ static int get_struct_type(var_list_t *fields) { type_t *t = field->type; - if (is_ptr(field->type)) + if (is_ptr(t)) { + do + t = t->ref; + while (is_ptr(t)); + + switch (t->type) + { + case RPC_FC_IP: + case RPC_FC_ENCAPSULATED_UNION: + case RPC_FC_NON_ENCAPSULATED_UNION: + case RPC_FC_BOGUS_STRUCT: + return RPC_FC_BOGUS_STRUCT; + } + has_pointer = 1; continue; } diff --git a/tools/widl/proxy.c b/tools/widl/proxy.c index 72f1f9dd569..4911caf2b66 100644 --- a/tools/widl/proxy.c +++ b/tools/widl/proxy.c @@ -51,18 +51,12 @@ static int indent = 0; /* FIXME: support generation of stubless proxies */ -static int print_proxy( const char *format, ... ) +static void print_proxy( const char *format, ... ) { va_list va; - int i, r; - va_start( va, format ); - if ( format[0] != '\n' ) - for( i=0; iargs) - return; - - LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry ) - { - const type_t *t = var->type; - const char *n = var->name; - if (decl_indirect(t)) - print_server("MIDL_memset(&%s, 0, sizeof %s);\n", n, n); - else if (is_ptr(t) || is_array(t)) - print_server("%s = 0;\n", n); - } - - fprintf(server, "\n"); } - static void write_function_stubs(type_t *iface, unsigned int *proc_offset) { char *implicit_handle = get_attrp(iface->attrs, ATTR_IMPLICIT_HANDLE); @@ -143,7 +115,7 @@ static void write_function_stubs(type_t *iface, unsigned int *proc_offset) indent--; fprintf(server, "\n"); - write_parameters_init(func); + write_parameters_init(server, indent, func); if (explicit_handle_var) { diff --git a/tools/widl/typegen.c b/tools/widl/typegen.c index 6f12a22f3b3..a1e4e6da11f 100644 --- a/tools/widl/typegen.c +++ b/tools/widl/typegen.c @@ -195,7 +195,8 @@ static int is_user_type(const type_t *t) static int is_embedded_complex(const type_t *type) { unsigned char tc = type->type; - return is_struct(tc) || is_union(tc) || is_array(type) || is_user_type(type); + return is_struct(tc) || is_union(tc) || is_array(type) || is_user_type(type) + || (is_ptr(type) && type->ref->type == RPC_FC_IP); } static int compare_expr(const expr_t *a, const expr_t *b) @@ -253,19 +254,43 @@ static int compare_expr(const expr_t *a, const expr_t *b) } \ while (0) -static int print_file(FILE *file, int indent, const char *format, ...) +static void print_file(FILE *file, int indent, const char *format, ...) { va_list va; - int i, r; - - if (!file) return 0; - va_start(va, format); - for (i = 0; i < indent; i++) - fprintf(file, " "); - r = vfprintf(file, format, va); + print(file, indent, format, va); va_end(va); - return r; +} + +void print(FILE *file, int indent, const char *format, va_list va) +{ + if (file) + { + if (format[0] != '\n') + while (0 < indent--) + fprintf(file, " "); + vfprintf(file, format, va); + } +} + +void write_parameters_init(FILE *file, int indent, const func_t *func) +{ + const var_t *var; + + if (!func->args) + return; + + LIST_FOR_EACH_ENTRY( var, func->args, const var_t, entry ) + { + const type_t *t = var->type; + const char *n = var->name; + if (decl_indirect(t)) + print_file(file, indent, "MIDL_memset(&%s, 0, sizeof %s);\n", n, n); + else if (is_ptr(t) || is_array(t)) + print_file(file, indent, "%s = 0;\n", n); + } + + fprintf(file, "\n"); } static void write_formatdesc(FILE *f, int indent, const char *str) @@ -879,12 +904,7 @@ static void write_user_tfs(FILE *file, type_t *type, unsigned int *tfsoff) static void write_member_type(FILE *file, type_t *type, const var_t *field, unsigned int *corroff, unsigned int *tfsoff) { - if (is_ptr(type)) - { - print_file(file, 2, "0x8,\t/* FC_LONG */\n"); - *tfsoff += 1; - } - else if (is_embedded_complex(type)) + if (is_embedded_complex(type)) { size_t absoff; short reloff; @@ -907,6 +927,11 @@ static void write_member_type(FILE *file, type_t *type, const var_t *field, reloff, reloff, absoff); *tfsoff += 4; } + else if (is_ptr(type)) + { + print_file(file, 2, "0x8,\t/* FC_LONG */\n"); + *tfsoff += 1; + } else if (!write_base_type(file, type, tfsoff)) error("Unsupported member type 0x%x\n", type->type); } @@ -1326,7 +1351,11 @@ static size_t write_pointer_only_tfs(FILE *file, const attr_list_t *attrs, int p static void write_branch_type(FILE *file, const type_t *t, unsigned int *tfsoff) { - if (is_base_type(t->type)) + if (t == NULL) + { + print_file(file, 2, "NdrFcShort(0x0),\t/* No type */\n"); + } + else if (is_base_type(t->type)) { print_file(file, 2, "NdrFcShort(0x80%02x),\t/* Simple arm type: %s */\n", t->type, string_of_type(t->type)); @@ -1348,7 +1377,7 @@ static size_t write_union_tfs(FILE *file, type_t *type, unsigned int *tfsoff) unsigned int align = 0; unsigned int start_offset; size_t size = type_memsize(type, &align); - var_list_t *fields = type->fields; + var_list_t *fields; size_t nbranch = 0; type_t *deftype = NULL; short nodeftype = 0xffff; @@ -1356,6 +1385,14 @@ static size_t write_union_tfs(FILE *file, type_t *type, unsigned int *tfsoff) guard_rec(type); + if (type->type == RPC_FC_ENCAPSULATED_UNION) + { + const var_t *uv = LIST_ENTRY(list_tail(type->fields), const var_t, entry); + fields = uv->type->fields; + } + else + fields = type->fields; + if (fields) LIST_FOR_EACH_ENTRY(f, fields, var_t, entry) { expr_list_t *cases = get_attrp(f->attrs, ATTR_CASE); @@ -1368,6 +1405,17 @@ static size_t write_union_tfs(FILE *file, type_t *type, unsigned int *tfsoff) start_offset = *tfsoff; update_tfsoff(type, start_offset, file); print_file(file, 0, "/* %d */\n", start_offset); + if (type->type == RPC_FC_ENCAPSULATED_UNION) + { + const var_t *sv = LIST_ENTRY(list_head(type->fields), const var_t, entry); + const type_t *st = sv->type; + size_t ss = type_memsize(st, &align); + + print_file(file, 2, "0x%x,\t/* %s */\n", type->type, string_of_type(type->type)); + print_file(file, 2, "0x%x,\t/* Switch type= %s */\n", + (ss << 4) | st->type, string_of_type(st->type)); + *tfsoff += 2; + } print_file(file, 2, "NdrFcShort(0x%x),\t/* %d */\n", size, size); print_file(file, 2, "NdrFcShort(0x%x),\t/* %d */\n", nbranch, nbranch); *tfsoff += 4; @@ -1415,12 +1463,12 @@ static size_t write_union_tfs(FILE *file, type_t *type, unsigned int *tfsoff) return start_offset; } -static size_t write_ip_tfs(FILE *file, const func_t *func, const type_t *type, const var_t *var, - unsigned int *typeformat_offset) +static size_t write_ip_tfs(FILE *file, const func_t *func, const attr_list_t *attrs, + type_t *type, unsigned int *typeformat_offset) { size_t i; size_t start_offset = *typeformat_offset; - const var_t *iid = get_attrp(var->attrs, ATTR_IIDIS); + const var_t *iid = get_attrp(attrs, ATTR_IIDIS); if (iid) { @@ -1442,6 +1490,8 @@ static size_t write_ip_tfs(FILE *file, const func_t *func, const type_t *type, c if (! uuid) error("%s: interface %s missing UUID\n", __FUNCTION__, base->name); + update_tfsoff(type, start_offset, file); + print_file(file, 0, "/* %d */\n", start_offset); print_file(file, 2, "0x2f,\t/* FC_IP */\n"); print_file(file, 2, "0x5a,\t/* FC_CONSTANT_IID */\n"); print_file(file, 2, "NdrFcLong(0x%08lx),\n", uuid->Data1); @@ -1539,7 +1589,7 @@ static size_t write_typeformatstring_var(FILE *file, int indent, const func_t *f if (base->type == RPC_FC_IP) { - return write_ip_tfs(file, func, type, var, typeformat_offset); + return write_ip_tfs(file, func, var->attrs, type, typeformat_offset); } /* special case for pointers to base types */ @@ -1609,14 +1659,20 @@ static int write_embedded_types(FILE *file, const attr_list_t *attrs, type_t *ty { type_t *ref = type->ref; - if (!processed(ref) && !is_base_type(ref->type)) - retmask |= write_embedded_types(file, NULL, ref, name, TRUE, tfsoff); + if (ref->type == RPC_FC_IP) + { + write_ip_tfs(file, NULL, attrs, type, tfsoff); + } + else + { + if (!processed(ref) && !is_base_type(ref->type)) + retmask |= write_embedded_types(file, NULL, ref, name, TRUE, tfsoff); - /* top-level pointers are handled inline for structures */ - if (write_ptr) - write_pointer_tfs(file, type, tfsoff); + if (write_ptr) + write_pointer_tfs(file, type, tfsoff); - retmask |= 1; + retmask |= 1; + } } else if (type->declarray && is_conformant_array(type)) ; /* conformant arrays and strings are handled specially */ diff --git a/tools/widl/typegen.h b/tools/widl/typegen.h index be97d018e24..eefecd79e8f 100644 --- a/tools/widl/typegen.h +++ b/tools/widl/typegen.h @@ -19,6 +19,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#include enum pass { @@ -52,4 +53,5 @@ void write_user_quad_list(FILE *file); void write_endpoints( FILE *f, const char *prefix, const str_list_t *list ); size_t type_memsize(const type_t *t, unsigned int *align); int decl_indirect(const type_t *t); -void write_parameters_init(const func_t *func); +void write_parameters_init(FILE *file, int indent, const func_t *func); +void print(FILE *file, int indent, const char *format, va_list ap); -- 2.11.4.GIT