Compare commits

..

41 Commits

Author SHA1 Message Date
Sebastian Lackner
67dffe4dc6 Release 1.7.53. 2015-10-19 06:09:12 +02:00
Sebastian Lackner
d8cf46384c ntdll-Syscall_Wrappers: Only enable syscall wrappers on Linux, MacOS needs special linker flags. 2015-10-19 05:30:18 +02:00
Sebastian Lackner
6494429c2f server-Signal_Thread: Hold a reference while waking up objects waiting on thread. 2015-10-19 02:53:14 +02:00
Sebastian Lackner
be51f622f7 Added patch to delay signaling threads until they are really gone (fixes Wine Staging Bug #473). 2015-10-19 00:38:33 +02:00
Sebastian Lackner
922e5a0e06 Added patch to implement kernel32.GetPhysicallyInstalledSystemMemory. 2015-10-18 18:31:24 +02:00
Sebastian Lackner
9b1ac08c87 dinput-Events: Update patchset and avoid wine internal exports in user32. 2015-10-18 17:03:07 +02:00
Sebastian Lackner
bfabcd117e Added patch to always use 64-bit registry view on WOW64 setups. 2015-10-18 16:31:04 +02:00
Sebastian Lackner
b8c9f3454e Added patch to return WN_NOT_CONNECTED from WNetGetUniversalName REMOTE_NAME_INFO_LEVEL stub. 2015-10-18 03:50:44 +02:00
Sebastian Lackner
3f46a6acb7 user32-Painting: Add reference to a bug report. 2015-10-17 16:34:46 +02:00
Sebastian Lackner
c83adcf25b Added patch to implement comctl32.PROPSHEET_InsertPage. 2015-10-17 16:24:51 +02:00
Sebastian Lackner
091bcbce3c ntdll-Syscall_Wrappers: Run directory initialization early during process startup instead of wrapping syscalls. 2015-10-17 12:49:06 +02:00
Sebastian Lackner
6971149e11 d3dx9_36-AnimationController: Improve patchset and add initial tests. 2015-10-17 04:14:44 +02:00
Sebastian Lackner
1f9e5b10e0 Added patch to fix the initialization of combined DACLs when the new DACL is empty. 2015-10-17 03:17:26 +02:00
Sebastian Lackner
0c3120e10d Rebase against 65d699eb5f7fc151197f3dc9f36499ee3e43f8e7. 2015-10-17 01:06:27 +02:00
Sebastian Lackner
550a60731f Rebase against 973de3f59c7d47602fe68c8cecf8fc3dbc59bcff. 2015-10-17 01:05:06 +02:00
Sebastian Lackner
3bf5b8762a Rebase against 14f024048b301cd6ccc7e15e731d069cd68b13c0. 2015-10-17 00:37:47 +02:00
Sebastian Lackner
188b345d2e Rebase against 31e0755ea664e02f05a1e500a19fb5f584c1c1cc. 2015-10-16 20:12:47 +02:00
Sebastian Lackner
458dd1fbce ntdll-Syscall_Wrappers: Added patches to call the implementation instead of the syscall wrapper when possible. 2015-10-16 05:56:30 +02:00
Sebastian Lackner
216a2d8994 Added patch to use wrapper functions for syscalls to appease Chromium sandbox (32-bit). 2015-10-16 03:48:10 +02:00
Sebastian Lackner
032bf69aa7 Rebase against bf4493404cee43a345fe853b5c11b053cdd22322. 2015-10-15 20:01:55 +02:00
Sebastian Lackner
e80a1b9b96 Rebase against 79361d3bc056ed7659fb63880ed91019837a4906 2015-10-15 18:17:11 +02:00
Sebastian Lackner
d1801f5a5e dxgi-GetDesc: Add additional upstream reference. 2015-10-13 22:25:53 +02:00
Sebastian Lackner
317fa9382c Rebase against c2dc6f3ef26fb18e7766956ef0a8cbadccc364d6. 2015-10-13 19:14:09 +02:00
Sebastian Lackner
e3ea1eef0d Rebase against e8b9bda53ac39c913ddc93de0308f0c8b69605fc. 2015-10-12 20:14:46 +02:00
Sebastian Lackner
cc0556df4a Added patch to fix handling of wait interrupted by User APC. 2015-10-09 21:33:39 +02:00
Sebastian Lackner
0dddb28c32 Rebase against d548639d977dee847350b408aec9522d68aef813. 2015-10-09 18:40:56 +02:00
Sebastian Lackner
46bd2a545f Rebase against ebb320fa37f2ad27649f571946af038e9d70ced2. 2015-10-08 19:38:23 +02:00
Sebastian Lackner
fbce85675d Rebase against fca636a01cfd1ef213326125582139bdd72a287a. 2015-10-08 19:16:54 +02:00
Sebastian Lackner
1ab89ae9bc Rebase against 8dd86823fdd9a5e631cf3173727b6f667ef1b611. 2015-10-08 18:43:39 +02:00
Sebastian Lackner
55379f6926 dsound-EAX: Added patch to implement DSPROPSETID_EAX20_BufferProperties stub. 2015-10-08 03:53:27 +02:00
Sebastian Lackner
48c78157ae Rebase against 20ff3352eb19292d47eaa8f3aecc61523ac1f1d9. 2015-10-08 00:28:48 +02:00
Sebastian Lackner
fdf5bad886 Rebase against 1d1487105d4d3a9133f0846d32363a0432812d0c. 2015-10-07 22:20:45 +02:00
Sebastian Lackner
b1d20ea747 ntdll-Status_Mapping: Update patchset and add test for NtWriteFile. 2015-10-07 05:16:25 +02:00
Sebastian Lackner
d8c4d47bbc Added patch to show windows version when collecting system info in winedbg. 2015-10-07 04:22:18 +02:00
Sebastian Lackner
ee5271ee57 Added patch to implement stub for DSPROPSETID_EAX20_ListenerProperties. 2015-10-07 02:57:45 +02:00
Sebastian Lackner
4adc56f74f Rebase against 6b9a87c7a801e1776444ac96c555fbad80d34115. 2015-10-06 19:58:45 +02:00
Sebastian Lackner
4fe40942a6 patchupdate.py: Return boolean from test_apply function. 2015-10-05 21:31:13 +02:00
Sebastian Lackner
2dc572f110 patchupdate.py: Rename stable -> released in multiple functions and variables. 2015-10-05 21:21:56 +02:00
Sebastian Lackner
3307e90080 Rebase against d050343c502202e1abdabdb37668684031d5367d. 2015-10-05 20:07:30 +02:00
Sebastian Lackner
6b720c8cd2 dinput-Events: Mark test failures with todo_wine. 2015-10-05 01:11:06 +02:00
Sebastian Lackner
76aa292beb Added patch to implement support for msiexec /passive command line option. 2015-10-04 23:57:13 +02:00
277 changed files with 5570 additions and 7941 deletions

View File

@@ -34,7 +34,7 @@ Wine. All those differences are also documented on the
Included bug fixes and improvements
-----------------------------------
**Bug fixes and features in Wine Staging 1.7.52 [268]:**
**Bug fixes and features in Wine Staging 1.7.53 [262]:**
*Note: The following list only contains features and bug fixes which are not
yet available in vanilla Wine. They are removed from the list as soon as they
@@ -46,6 +46,8 @@ for more details.*
* Add IDragSourceHelper stub interface ([Wine Bug #24699](https://bugs.winehq.org/show_bug.cgi?id=24699))
* Add IHTMLLocation::hash property's getter implementation ([Wine Bug #32967](https://bugs.winehq.org/show_bug.cgi?id=32967))
* Add a ProfileList\<UserSID> registry subkey ([Wine Bug #15670](https://bugs.winehq.org/show_bug.cgi?id=15670))
* Add implementation for IDXGIOutput::GetDesc ([Wine Bug #32006](https://bugs.winehq.org/show_bug.cgi?id=32006))
* Add implementation for comctl32.PROPSHEET_InsertPage. ([Wine Bug #25625](https://bugs.winehq.org/show_bug.cgi?id=25625))
* Add implementation for mfplat.MFTEnum ([Wine Bug #39309](https://bugs.winehq.org/show_bug.cgi?id=39309))
* Add implementation for mfplat.MFTRegister ([Wine Bug #37811](https://bugs.winehq.org/show_bug.cgi?id=37811))
* Add implementation for msidb commandline tool
@@ -55,11 +57,9 @@ for more details.*
* Add semi-stub for FileFsVolumeInformation information class ([Wine Bug #21466](https://bugs.winehq.org/show_bug.cgi?id=21466))
* Add shell32 placeholder icons to match offsets with Windows ([Wine Bug #30185](https://bugs.winehq.org/show_bug.cgi?id=30185))
* Add stub dlls required for MSVC 2015 runtime library (Windows 10)
* Add stub fltmgr.sys (filter manager driver) ([Wine Bug #23583](https://bugs.winehq.org/show_bug.cgi?id=23583))
* Add stub for D3DXComputeNormalMap
* Add stub for D3DXFrameFind ([Wine Bug #38334](https://bugs.winehq.org/show_bug.cgi?id=38334))
* Add stub for NtSetLdtEntries/ZwSetLdtEntries ([Wine Bug #26268](https://bugs.winehq.org/show_bug.cgi?id=26268))
* Add stub for gdiplus.GdipCreateEffect ([Wine Bug #32163](https://bugs.winehq.org/show_bug.cgi?id=32163))
* Add stub for ntoskrnl.ExAcquireResourceExclusiveLite
* Add stub for ntoskrnl.ExDeleteResourceLite
* Add stub for ntoskrnl.ExReleaseResourceForThread
@@ -89,6 +89,7 @@ for more details.*
* Allow to open files/directories without any access rights in order to query attributes
* Allow to override number of quality levels for D3DMULTISAMPLE_NONMASKABLE. ([Wine Bug #12652](https://bugs.winehq.org/show_bug.cgi?id=12652))
* Allow to set pixel format for desktop window
* Always use 64-bit registry view on WOW64 setups
* Anno 1602 installer depends on Windows 98 behavior of SHFileOperationW ([Wine Bug #37916](https://bugs.winehq.org/show_bug.cgi?id=37916))
* Assign a drive serial number during prefix creation/update ([Wine Bug #17823](https://bugs.winehq.org/show_bug.cgi?id=17823))
* Audio stuttering and performance drops in multiple applications ([Wine Bug #30639](https://bugs.winehq.org/show_bug.cgi?id=30639))
@@ -99,25 +100,23 @@ for more details.*
* Avseq crashes when multisampling is enabled ([Wine Bug #31998](https://bugs.winehq.org/show_bug.cgi?id=31998))
* Basic handling of write watches triggered while we're on the signal stack.
* Basic support for CUDA
* BitBlt and StretchDIBits should be marked as hotpatchable
* Black & White needs DXTn software decoding support ([Wine Bug #14939](https://bugs.winehq.org/show_bug.cgi?id=14939))
* CPU-Z fails to start because GetLogicalProcessorInformationEx returns FALSE
* Calculate msvcrt exponential math operations with higher precision ([Wine Bug #37149](https://bugs.winehq.org/show_bug.cgi?id=37149))
* Catch invalid memory accesses in imagehlp.CheckSumMappedFile
* Check architecture before trying to load libraries ([Wine Bug #38021](https://bugs.winehq.org/show_bug.cgi?id=38021))
* Codepage conversion should fail when destination length is < 0
* Correctly parse double quotes in the msi token values
* Create Microsoft\Windows\Themes directory during Wineprefix creation ([Wine Bug #34910](https://bugs.winehq.org/show_bug.cgi?id=34910))
* Create stub files for system32/drivers/etc/{services,hosts,networks,protocol} ([Wine Bug #12076](https://bugs.winehq.org/show_bug.cgi?id=12076))
* CreateProcess does not prioritize the working directory over the system search path ([Wine Bug #23934](https://bugs.winehq.org/show_bug.cgi?id=23934))
* D3DCompileShader should filter specific warning messages ([Wine Bug #33770](https://bugs.winehq.org/show_bug.cgi?id=33770))
* Do not allow to deallocate thread stack for current thread
* Do not check if object was signaled after user APC in server_select
* Do not fail when a used context is passed to wglShareLists ([Wine Bug #11436](https://bugs.winehq.org/show_bug.cgi?id=11436))
* Do not trust width/height passed to edit control in WM_SIZE message ([Wine Bug #37542](https://bugs.winehq.org/show_bug.cgi?id=37542))
* Do not use GdipAlloc and GdipFree in internal functions ([Wine Bug #32786](https://bugs.winehq.org/show_bug.cgi?id=32786))
* Do not signal threads until they are really gone
* Do not use unixfs for devices without mountpoint
* Do not wait for hook thread startup in IDirectInput8::Initialize ([Wine Bug #21403](https://bugs.winehq.org/show_bug.cgi?id=21403))
* Enforce that surfaces are flushed after ReleaseDC
* Enforce that surfaces are flushed after ReleaseDC ([Wine Bug #39465](https://bugs.winehq.org/show_bug.cgi?id=39465))
* Ensure NtProtectVirtualMemory and NtCreateSection are on separate pages ([Wine Bug #33162](https://bugs.winehq.org/show_bug.cgi?id=33162))
* Ensure X11 input events are handled even without explicit message loop ([Wine Bug #8854](https://bugs.winehq.org/show_bug.cgi?id=8854))
* Exception during start of fr-043 caused by missing DXTn support ([Wine Bug #37391](https://bugs.winehq.org/show_bug.cgi?id=37391))
@@ -161,6 +160,7 @@ for more details.*
* Fix return value of ScrollWindowEx for invisible windows ([Wine Bug #37706](https://bugs.winehq.org/show_bug.cgi?id=37706))
* Fix scaling behaviour of images and mipmap levels in IDirect3DTexture2_Load (needed for example by Prezzie Hunt)
* Fix texture corruption in CSI: Fatal Conspiracy ([Wine Bug #33768](https://bugs.winehq.org/show_bug.cgi?id=33768))
* Fix the initialization of combined DACLs when the new DACL is empty ([Wine Bug #38423](https://bugs.winehq.org/show_bug.cgi?id=38423))
* Fix unintentional leaks with ntdll internals
* Fix wined3d performance drop introduced by pixelformat changes. ([Wine Bug #35655](https://bugs.winehq.org/show_bug.cgi?id=35655))
* Fix wrong colors in Wolfenstein (2009) ([Wine Bug #34692](https://bugs.winehq.org/show_bug.cgi?id=34692))
@@ -172,7 +172,6 @@ for more details.*
* GetSecurityInfo returns NULL DACL for process object ([Wine Bug #15980](https://bugs.winehq.org/show_bug.cgi?id=15980))
* Globally invalidate key state on changes in other threads ([Wine Bug #29871](https://bugs.winehq.org/show_bug.cgi?id=29871))
* Graphical issues in Inquisitor ([Wine Bug #32490](https://bugs.winehq.org/show_bug.cgi?id=32490))
* Ignore unsupported flags for CoInternetSetFeatureEnabled ([Wine Bug #35197](https://bugs.winehq.org/show_bug.cgi?id=35197))
* Implement AMStream GetMultiMediaStream functions ([Wine Bug #37090](https://bugs.winehq.org/show_bug.cgi?id=37090))
* Implement D3DXGetShaderOutputSemantics
* Implement DDENUMSURFACES_CANBECREATED in IDirectDraw7::EnumSurfaces ([Wine Bug #17233](https://bugs.winehq.org/show_bug.cgi?id=17233))
@@ -186,10 +185,10 @@ for more details.*
* Implement an Arial replacement font ([Wine Bug #32323](https://bugs.winehq.org/show_bug.cgi?id=32323))
* Implement combase.WindowsSubstring function
* Implement default homepage button in inetcpl.cpl
* Implement empty enumerator for IWiaDevMgr::EnumDeviceInfo ([Wine Bug #27775](https://bugs.winehq.org/show_bug.cgi?id=27775))
* Implement enumeration of sound devices and basic properties to dxdiagn ([Wine Bug #32613](https://bugs.winehq.org/show_bug.cgi?id=32613))
* Implement exclusive mode in PulseAudio backend ([Wine Bug #37042](https://bugs.winehq.org/show_bug.cgi?id=37042))
* Implement general tab for file property dialog
* Implement kernel32.GetPhysicallyInstalledSystemMemory ([Wine Bug #39395](https://bugs.winehq.org/show_bug.cgi?id=39395))
* Implement locking and synchronization of key states ([Wine Bug #31899](https://bugs.winehq.org/show_bug.cgi?id=31899))
* Implement mscoree._CorValidateImage for mono runtime ([Wine Bug #38662](https://bugs.winehq.org/show_bug.cgi?id=38662))
* Implement ntoskrnl driver testing framework.
@@ -201,7 +200,6 @@ for more details.*
* Implement stub for ntoskrnl.KeDelayExecutionThread.
* Implement stubs for ntoskrnl.Ex{Acquire,Release}FastMutexUnsafe
* Implement stubs for ntoskrnl.ObReferenceObjectByPointer and ntoskrnl.ObDereferenceObject
* Implement ws2_32.InetPtonA/W functions
* Improve ReadDataAvailable handling in FilePipeLocalInformation class
* Improve startup performance by delaying font initialization
* Improve stub for AEV_GetVolumeRange ([Wine Bug #35658](https://bugs.winehq.org/show_bug.cgi?id=35658))
@@ -224,7 +222,6 @@ for more details.*
* Need for Speed 3 installer requires devices in HKEY_DYN_DATA ([Wine Bug #7115](https://bugs.winehq.org/show_bug.cgi?id=7115))
* Only set SFGAO_HASSUBFOLDER when there are really subfolders ([Wine Bug #24851](https://bugs.winehq.org/show_bug.cgi?id=24851))
* Other Pipelight-specific enhancements
* Pass cookie by reference to msvcrt_local_unwind4 in _seh_longjmp_unwind4 ([Wine Bug #39356](https://bugs.winehq.org/show_bug.cgi?id=39356))
* Port Royale doesn't display ocean correctly ([Wine Bug #17913](https://bugs.winehq.org/show_bug.cgi?id=17913))
* Prevent window managers from grouping all wine programs together ([Wine Bug #32699](https://bugs.winehq.org/show_bug.cgi?id=32699))
* Process APC calls before starting process
@@ -236,10 +233,9 @@ for more details.*
* Protect TVM_GETITEM from invalid item pointers ([Wine Bug #33001](https://bugs.winehq.org/show_bug.cgi?id=33001))
* Reduced SetTimer minimum value from 10 ms to 5 ms (improves Silverlight framerates)
* Refresh MDI menus when DefMDIChildProc(WM_SETTEXT) is called ([Wine Bug #21855](https://bugs.winehq.org/show_bug.cgi?id=21855))
* RegOpenKeyExA, RegCloseKey and RegQueryValueExA should be hotpatchable
* Report correct ObjectName for NamedPipe wineserver objects
* Return STATUS_INVALID_DEVICE_REQUEST when trying to call NtReadFile on directory
* Return a dummy BIOS name in Win32_BIOS record
* Return WN_NOT_CONNECTED from WNetGetUniversalName REMOTE_NAME_INFO_LEVEL stub ([Wine Bug #39452](https://bugs.winehq.org/show_bug.cgi?id=39452))
* Return a valid mesh in D3DXCreateTeapot ([Wine Bug #36884](https://bugs.winehq.org/show_bug.cgi?id=36884))
* Return an error when trying to open a terminated process ([Wine Bug #37087](https://bugs.winehq.org/show_bug.cgi?id=37087))
* Return correct IMediaSeeking stream positions in quartz
@@ -256,8 +252,8 @@ for more details.*
* Set NamedPipeState to FILE_PIPE_CLOSING_STATE on broken pipe in NtQueryInformationFile
* Share source of d3dx9_36 with d3dx9_33 to avoid Wine DLL forwards ([Wine Bug #21817](https://bugs.winehq.org/show_bug.cgi?id=21817))
* Show unmounted devices in winecfg and allow changing the unix path
* Show windows version when collecting system info in winedbg
* Silence repeated LocaleNameToLCID/LCIDToLocaleName unsupported flags FIXMEs ([Wine Bug #30076](https://bugs.winehq.org/show_bug.cgi?id=30076))
* Silence repeated wbemprox "timeout not supported" fixme ([Wine Bug #37618](https://bugs.winehq.org/show_bug.cgi?id=37618))
* Skip unknown item when decoding a CMS certificate ([Wine Bug #34388](https://bugs.winehq.org/show_bug.cgi?id=34388))
* Software support for Environmental Audio Extensions (EAX)
* Super Mario 3: Mario Forever fails to load keyboard mapping from profile files. ([Wine Bug #18099](https://bugs.winehq.org/show_bug.cgi?id=18099))
@@ -275,7 +271,6 @@ for more details.*
* Support for ID3DXSkinInfoImpl_UpdateSkinnedMesh ([Wine Bug #32572](https://bugs.winehq.org/show_bug.cgi?id=32572))
* Support for Junction Points ([Wine Bug #12401](https://bugs.winehq.org/show_bug.cgi?id=12401))
* Support for KF_FLAG_DEFAULT_PATH in SHGetKnownFolderPath ([Wine Bug #30385](https://bugs.winehq.org/show_bug.cgi?id=30385))
* Support for LoadIconMetric ([Wine Bug #35375](https://bugs.winehq.org/show_bug.cgi?id=35375))
* Support for MPEG2 DXVA2 GPU video decoding through vaapi
* Support for NVIDIA video encoder library (nvencodeapi)
* Support for NtQuerySection ([Wine Bug #37338](https://bugs.winehq.org/show_bug.cgi?id=37338))
@@ -294,7 +289,6 @@ for more details.*
* Support for shell32 file operation progress dialog
* Support for stored file ACLs ([Wine Bug #33576](https://bugs.winehq.org/show_bug.cgi?id=33576))
* Support for ws2_32.dll.WSAPoll ([Wine Bug #38601](https://bugs.winehq.org/show_bug.cgi?id=38601))
* Translate flags in LaunchINFSectionW
* Tumblebugs 2 requires DXTn software encoding support ([Wine Bug #29586](https://bugs.winehq.org/show_bug.cgi?id=29586))
* Update a XIM candidate position when cursor location changes ([Wine Bug #30938](https://bugs.winehq.org/show_bug.cgi?id=30938))
* Use GLX_MESA_query_renderer extension to get more exact GPU infos
@@ -303,10 +297,10 @@ for more details.*
* Use actual program name if available to describe PulseAudio streams
* Use manual relay for RunDLL_CallEntry16 in shell32 ([Wine Bug #23033](https://bugs.winehq.org/show_bug.cgi?id=23033))
* Use video memory for rendering targets if possible ([Wine Bug #34906](https://bugs.winehq.org/show_bug.cgi?id=34906))
* Use wrapper functions for syscalls to appease Chromium sandbox (32-bit) ([Wine Bug #39403](https://bugs.winehq.org/show_bug.cgi?id=39403))
* Voobly expects correct handling of WRITECOPY memory protection ([Wine Bug #29384](https://bugs.winehq.org/show_bug.cgi?id=29384))
* Wine ignores IDF_CHECKFIRST flag in SetupPromptForDisk ([Wine Bug #20465](https://bugs.winehq.org/show_bug.cgi?id=20465))
* Workaround for shlwapi URLs with relative paths
* WritePrivateProfileStringA should be hotpatchable
* XEMBED support for embedding Wine windows inside Linux applications
* eRacer Demo doesn't correctly display text ([Wine Bug #29598](https://bugs.winehq.org/show_bug.cgi?id=29598))
* ntdll is missing WinSqm[Start|End]Session implementation ([Wine Bug #31971](https://bugs.winehq.org/show_bug.cgi?id=31971))

45
debian/changelog vendored
View File

@@ -1,3 +1,48 @@
wine-staging (1.7.53) unstable; urgency=low
* Added patch to implement support for msiexec /passive command line option.
* Added patch to implement stub for DSPROPSETID_EAX20_ListenerProperties.
* Added patch to show windows version when collecting system info in winedbg.
* Added patch to implement DSPROPSETID_EAX20_ListenerProperties stub.
* Added patch to implement DSPROPSETID_EAX20_BufferProperties stub.
* Added patch to fix handling of wait interrupted by User APC.
* Added patch to use wrapper functions for syscalls to appease Chromium
sandbox (32-bit Linux only).
* Added patch to fix the initialization of combined DACLs when the new DACL is
empty.
* Added patch to implement comctl32.PROPSHEET_InsertPage.
* Added patch to return WN_NOT_CONNECTED from WNetGetUniversalName
REMOTE_NAME_INFO_LEVEL stub.
* Added patch to always use 64-bit registry view on WOW64 setups.
* Added patch to implement kernel32.GetPhysicallyInstalledSystemMemory.
* Added patch to delay signaling threads until they are really gone (fixes
Wine Staging Bug #473).
* Removed patch to mark RegOpenKeyExA, RegCloseKey and RegQueryValueExA as
hotpatchable (accepted upstream).
* Removed patch to mark BitBlt and StretchDIBits as hotpatchable (accepted
upstream).
* Removed patch to mark WritePrivateProfileStringA as hotpatchable (accepted
upstream).
* Removed patch to implement ws2_32.InetPtonW function (accepted upstream).
* Removed patch to pass cookie by reference to msvcrt_local_unwind4 in
_seh_longjmp_unwind4 (accepted upstream).
* Removed patch to implement LoadIconMetric (accepted upstream).
* Removed patch to correctly parse double quotes in msi token values (accepted
upstream).
* Removed patch to ignore width/height passed to edit control in WM_SIZE
message (accepted upstream).
* Removed patch to silence repeated wbemprox "timeout not supported" fixme
(fixed upstream).
* Removed patch to add support for /passive command line option to msiexec
(fixed upstream).
* Removed patch to return a dummy BIOS name in Win32_BIOS (accepted upstream).
* Removed patch to implement empty enumerator for IWiaDevMgr::EnumDeviceInfo
(accepted upstream).
* Removed patch to translate flags in LaunchINFSectionW (accepted upstream).
* Removed patch to return success when trying to disable proxy, although no
proxy is set (accepted upstream).
* Partially removed patches for ws2_32 TransmitFile (accepted upstream).
-- Sebastian Lackner <sebastian@fds-team.de> Mon, 19 Oct 2015 06:08:07 +0200
wine-staging (1.7.52) unstable; urgency=low
* Added patch to return STATUS_INVALID_DEVICE_REQUEST when trying to call
NtReadFile on directory.

View File

@@ -163,12 +163,12 @@ def _read_changelog():
r = re.match("^([a-zA-Z0-9][^(]*)\((.*)\) ([^;]*)", line)
if r: yield (r.group(1).strip(), r.group(2).strip(), r.group(3).strip())
def _latest_staging_version(only_stable=False):
"""Get version number of the latest stable release."""
def _latest_staging_version(only_released=False):
"""Get version number of the latest release / unreleased version."""
for package, version, distro in _read_changelog():
if distro.lower() != "unreleased":
return version
elif not only_stable:
elif not only_released:
return "%s (unreleased)" % version
def _latest_wine_commit(commit=None):
@@ -655,22 +655,21 @@ def generate_script(all_patches, skip_checks=False):
for i, patch1 in set_apply:
for j, patch2 in set_skip:
if causal_time_smaller(patch2.verify_time, patch1.verify_time):
return None # we can skip this test
return True # we can skip this test
try:
original = original_content
for i, _ in set_apply:
original = patchutils.apply_patch(original, selected_patches[i][1], fuzz=0)
except patchutils.PatchApplyError:
return current
return False
return None # everything is fine
return True # everything is fine
def test_apply_seq(current_list):
for current in current_list:
failed = test_apply(current)
if failed is not None:
return failed
if not test_apply(current):
return current
return None
iterables = []
@@ -803,7 +802,7 @@ def generate_script(all_patches, skip_checks=False):
# Add changes to git
subprocess.call(["git", "add", config.path_script])
def generate_markdown(all_patches, stable_patches):
def generate_markdown(all_patches, release_patches):
"""Generate README.md including information about specific patches and bugfixes."""
def _format_bug(mode, bugid, bugname):
@@ -820,8 +819,8 @@ def generate_markdown(all_patches, stable_patches):
key = bugid if bugid is not None else bugname
all_fixes[key] = [1, bugid, bugname]
# Compare with fixes for latest stable version
for _, patch in stable_patches.iteritems():
# Compare with fixes for last release
for _, patch in release_patches.iteritems():
for bugid, bugname in patch.fixes:
if bugid is not None and all_fixes.has_key(bugid):
all_fixes[bugid][0] = 0
@@ -934,11 +933,11 @@ if __name__ == "__main__":
# Get information about Wine and Staging version
latest_wine_commit = _latest_wine_commit(args.commit)
latest_staging_version = _latest_staging_version(only_stable=True)
latest_staging_version = _latest_staging_version(only_released=True)
# Read current and stable patches
all_patches = read_patchset()
stable_patches = read_patchset(revision="v%s" % latest_staging_version)
# Read current and release patches
all_patches = read_patchset()
release_patches = read_patchset(revision="v%s" % latest_staging_version)
# Check bugzilla
check_bug_status(all_patches, sync_bugs=args.sync_bugs)
@@ -946,7 +945,7 @@ if __name__ == "__main__":
# Update autogenerated files
generate_ifdefined(all_patches, skip_checks=args.skip_checks)
generate_script(all_patches, skip_checks=args.skip_checks)
generate_markdown(all_patches, stable_patches)
generate_markdown(all_patches, release_patches)
wrap_changelog()
except PatchUpdaterError as e:

View File

@@ -1,58 +0,0 @@
From bca490fc6eff140415ea68354a1458635be8522b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Fri, 2 Oct 2015 17:25:56 +0200
Subject: advapi32: Mark some functions as hotpatchable.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Michael MĂĽller <michael@fds-team.de>
---
dlls/advapi32/registry.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/dlls/advapi32/registry.c b/dlls/advapi32/registry.c
index 2482b85..f988c0e 100644
--- a/dlls/advapi32/registry.c
+++ b/dlls/advapi32/registry.c
@@ -23,6 +23,8 @@
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
+#include "config.h"
+
#include <stdlib.h>
#include <stdarg.h>
#include <stdio.h>
@@ -522,7 +524,7 @@ LSTATUS WINAPI RegOpenKeyExW( HKEY hkey, LPCWSTR name, DWORD options, REGSAM acc
* Unlike RegCreateKeyExA(), this function will not create the key if it
* does not exist.
*/
-LSTATUS WINAPI RegOpenKeyExA( HKEY hkey, LPCSTR name, DWORD options, REGSAM access, PHKEY retkey )
+LSTATUS WINAPI DECLSPEC_HOTPATCH RegOpenKeyExA( HKEY hkey, LPCSTR name, DWORD options, REGSAM access, PHKEY retkey )
{
OBJECT_ATTRIBUTES attr;
STRING nameA;
@@ -1107,7 +1109,7 @@ LSTATUS WINAPI RegQueryInfoKeyA( HKEY hkey, LPSTR class, LPDWORD class_len, LPDW
* Success: ERROR_SUCCESS
* Failure: Error code
*/
-LSTATUS WINAPI RegCloseKey( HKEY hkey )
+LSTATUS WINAPI DECLSPEC_HOTPATCH RegCloseKey( HKEY hkey )
{
if (!hkey) return ERROR_INVALID_HANDLE;
if (hkey >= (HKEY)0x80000000) return ERROR_SUCCESS;
@@ -1477,8 +1479,8 @@ LSTATUS WINAPI RegQueryValueExW( HKEY hkey, LPCWSTR name, LPDWORD reserved, LPDW
* MSDN states that if data is too small it is partially filled. In reality
* it remains untouched.
*/
-LSTATUS WINAPI RegQueryValueExA( HKEY hkey, LPCSTR name, LPDWORD reserved, LPDWORD type,
- LPBYTE data, LPDWORD count )
+LSTATUS WINAPI DECLSPEC_HOTPATCH RegQueryValueExA( HKEY hkey, LPCSTR name, LPDWORD reserved,
+ LPDWORD type, LPBYTE data, LPDWORD count )
{
NTSTATUS status;
ANSI_STRING nameA;
--
2.5.1

View File

@@ -1 +0,0 @@
Fixes: RegOpenKeyExA, RegCloseKey and RegQueryValueExA should be hotpatchable

View File

@@ -0,0 +1,110 @@
From 646388b696afda85dccc76678af6a8955bf0b627 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@wine-staging.com>
Date: Fri, 16 Oct 2015 16:03:00 -0600
Subject: advapi32: Move the DACL combining code into a separate routine.
---
dlls/advapi32/security.c | 79 +++++++++++++++++++++++++++---------------------
1 file changed, 45 insertions(+), 34 deletions(-)
diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c
index 00dafe8..dad8b22 100644
--- a/dlls/advapi32/security.c
+++ b/dlls/advapi32/security.c
@@ -5805,6 +5805,48 @@ BOOL WINAPI FileEncryptionStatusA(LPCSTR lpFileName, LPDWORD lpStatus)
return TRUE;
}
+static NTSTATUS combine_dacls(ACL *parent, ACL *child, ACL **result)
+{
+ ACL *combined;
+ int i;
+
+ /* initialize a combined DACL containing both inherited and new ACEs */
+ combined = heap_alloc_zero(child->AclSize+parent->AclSize);
+ if (!combined)
+ return STATUS_NO_MEMORY;
+
+ memcpy(combined, child, child->AclSize);
+ combined->AclSize = child->AclSize+parent->AclSize;
+
+ /* copy the inherited ACEs */
+ for (i=0; i<parent->AceCount; i++)
+ {
+ ACE_HEADER *ace;
+
+ if (!GetAce(parent, i, (void*)&ace))
+ continue;
+ if (!(ace->AceFlags & (OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE)))
+ continue;
+ if ((ace->AceFlags & (OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE)) !=
+ (OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE))
+ {
+ FIXME("unsupported flags: %x\n", ace->AceFlags);
+ continue;
+ }
+
+ if (ace->AceFlags & NO_PROPAGATE_INHERIT_ACE)
+ ace->AceFlags &= ~(OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE|NO_PROPAGATE_INHERIT_ACE);
+ ace->AceFlags &= ~INHERIT_ONLY_ACE;
+ ace->AceFlags |= INHERITED_ACE;
+
+ if (!AddAce(combined, ACL_REVISION, MAXDWORD, ace, ace->AceSize))
+ WARN("error adding inherited ACE\n");
+ }
+
+ *result = combined;
+ return STATUS_SUCCESS;
+}
+
/******************************************************************************
* SetSecurityInfo [ADVAPI32.@]
*/
@@ -5904,41 +5946,10 @@ DWORD WINAPI SetSecurityInfo(HANDLE handle, SE_OBJECT_TYPE ObjectType,
if (!err)
{
- int i;
-
- dacl = heap_alloc_zero(pDacl->AclSize+parent_dacl->AclSize);
- if (!dacl)
- {
- LocalFree(parent_sd);
- return ERROR_NOT_ENOUGH_MEMORY;
- }
- memcpy(dacl, pDacl, pDacl->AclSize);
- dacl->AclSize = pDacl->AclSize+parent_dacl->AclSize;
-
- for (i=0; i<parent_dacl->AceCount; i++)
- {
- ACE_HEADER *ace;
-
- if (!GetAce(parent_dacl, i, (void*)&ace))
- continue;
- if (!(ace->AceFlags & (OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE)))
- continue;
- if ((ace->AceFlags & (OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE)) !=
- (OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE))
- {
- FIXME("unsupported flags: %x\n", ace->AceFlags);
- continue;
- }
-
- if (ace->AceFlags & NO_PROPAGATE_INHERIT_ACE)
- ace->AceFlags &= ~(OBJECT_INHERIT_ACE|CONTAINER_INHERIT_ACE|NO_PROPAGATE_INHERIT_ACE);
- ace->AceFlags &= ~INHERIT_ONLY_ACE;
- ace->AceFlags |= INHERITED_ACE;
-
- if(!AddAce(dacl, ACL_REVISION, MAXDWORD, ace, ace->AceSize))
- WARN("error adding inherited ACE\n");
- }
+ status = combine_dacls(parent_dacl, pDacl, &dacl);
LocalFree(parent_sd);
+ if (status != STATUS_SUCCESS)
+ return RtlNtStatusToDosError(status);
}
}
else
--
2.6.1

View File

@@ -0,0 +1,54 @@
From d1accafbe8e52b6b2c84e9fe5d08303fc05858af Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@wine-staging.com>
Date: Fri, 16 Oct 2015 13:58:38 -0600
Subject: advapi32: Fix the initialization of combined DACLs when the new DACL
is empty.
---
dlls/advapi32/security.c | 23 +++++++++++++++++++++--
1 file changed, 21 insertions(+), 2 deletions(-)
diff --git a/dlls/advapi32/security.c b/dlls/advapi32/security.c
index dad8b22..11ae487 100644
--- a/dlls/advapi32/security.c
+++ b/dlls/advapi32/security.c
@@ -5807,6 +5807,7 @@ BOOL WINAPI FileEncryptionStatusA(LPCSTR lpFileName, LPDWORD lpStatus)
static NTSTATUS combine_dacls(ACL *parent, ACL *child, ACL **result)
{
+ NTSTATUS status;
ACL *combined;
int i;
@@ -5815,8 +5816,26 @@ static NTSTATUS combine_dacls(ACL *parent, ACL *child, ACL **result)
if (!combined)
return STATUS_NO_MEMORY;
- memcpy(combined, child, child->AclSize);
- combined->AclSize = child->AclSize+parent->AclSize;
+ status = RtlCreateAcl(combined, parent->AclSize+child->AclSize, ACL_REVISION);
+ if (status != STATUS_SUCCESS)
+ {
+ heap_free(combined);
+ return status;
+ }
+
+ /* copy the new ACEs */
+ for (i=0; i<child->AceCount; i++)
+ {
+ ACE_HEADER *ace;
+
+ if (!GetAce(child, i, (void*)&ace))
+ {
+ WARN("error obtaining new ACE\n");
+ continue;
+ }
+ if (!AddAce(combined, ACL_REVISION, MAXDWORD, ace, ace->AceSize))
+ WARN("error adding new ACE\n");
+ }
/* copy the inherited ACEs */
for (i=0; i<parent->AceCount; i++)
--
2.6.1

View File

@@ -0,0 +1 @@
Fixes: [38423] Fix the initialization of combined DACLs when the new DACL is empty

View File

@@ -1,85 +0,0 @@
From e81a06349b039e60a7d9fcaa6f38b874767e7543 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sun, 30 Aug 2015 20:55:52 +0200
Subject: advpack: Translate flags in LaunchINFSection.
---
dlls/advpack/install.c | 6 +++++-
dlls/advpack/tests/install.c | 11 ++++++++++-
include/advpub.h | 4 ++++
3 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/dlls/advpack/install.c b/dlls/advpack/install.c
index f75eb01..dcd1dd7 100644
--- a/dlls/advpack/install.c
+++ b/dlls/advpack/install.c
@@ -776,7 +776,11 @@ INT WINAPI LaunchINFSectionW(HWND hWnd, HINSTANCE hInst, LPWSTR cmdline, INT sho
str_flags = get_parameter(&cmdline_ptr, ',', TRUE);
if (str_flags)
- flags = atolW(str_flags);
+ {
+ DWORD inf_flags = atolW(str_flags);
+ if (inf_flags & LIS_QUIET) flags |= RSC_FLAG_QUIET;
+ if (inf_flags & LIS_NOGRPCONV) flags |= RSC_FLAG_NGCONV;
+ }
ZeroMemory(&info, sizeof(ADVInfo));
diff --git a/dlls/advpack/tests/install.c b/dlls/advpack/tests/install.c
index 875e7d4..c9cd720 100644
--- a/dlls/advpack/tests/install.c
+++ b/dlls/advpack/tests/install.c
@@ -190,6 +190,8 @@ static void test_LaunchINFSection(void)
HRESULT hr;
char cmdline[MAX_PATH];
static char file[] = "test.inf,DefaultInstall,4,0";
+ static char file2[] = "one\\test.inf,DefaultInstall,4,0";
+ static char file3[] = "test.inf,,1,0";
/* The 'No UI' flag seems to have no effect whatsoever on Windows.
* So only do this test in interactive mode.
@@ -207,10 +209,14 @@ static void test_LaunchINFSection(void)
/* try a full path to the INF */
lstrcpyA(cmdline, CURR_DIR);
lstrcatA(cmdline, "\\");
- lstrcatA(cmdline, "one\\test.inf,DefaultInstall,,4");
+ lstrcatA(cmdline, file2);
hr = pLaunchINFSection(NULL, NULL, cmdline, 0);
ok(hr == 0, "Expected 0, got %d\n", hr);
+ /* try relative INF filename */
+ hr = pLaunchINFSection(NULL, NULL, file2, 0);
+ ok(hr == 0, "Expected 0, got %d\n", hr);
+
DeleteFileA("one\\test.inf");
RemoveDirectoryA("one");
@@ -220,6 +226,9 @@ static void test_LaunchINFSection(void)
hr = pLaunchINFSection(NULL, NULL, file, 0);
ok(hr == 0, "Expected 0, got %d\n", hr);
+ hr = pLaunchINFSection(NULL, NULL, file3, 0);
+ ok(hr == 0, "Expected 0, got %d\n", hr);
+
DeleteFileA("test.inf");
}
diff --git a/include/advpub.h b/include/advpub.h
index b213b1f..7823e0a 100644
--- a/include/advpub.h
+++ b/include/advpub.h
@@ -135,6 +135,10 @@ DECL_WINELIB_TYPE_AW(LPCSTRTABLE)
#define RSC_FLAG_DELAYREGISTEROCX 0x00000200
#define RSC_FLAG_SETUPAPI 0x00000400
+/* Flags for LaunchINFSection */
+#define LIS_QUIET 0x00000001
+#define LIS_NOGRPCONV 0x00000002
+
/* Flags for DelNode */
#define ADN_DEL_IF_EMPTY 0x00000001
#define ADN_DONT_DEL_SUBDIRS 0x00000002
--
2.5.0

View File

@@ -1 +0,0 @@
Fixes: Translate flags in LaunchINFSectionW

View File

@@ -1,4 +1,4 @@
From 5bf6e56850354195aec9ec1146e3f82a0b2bcfdb Mon Sep 17 00:00:00 2001
From f81b1feadca76ec41c834915fd5c5ce43f66f7b1 Mon Sep 17 00:00:00 2001
From: Martin Storsjo <martin@martin.st>
Date: Mon, 3 Aug 2015 22:26:02 +0300
Subject: vcruntime140: Add the new MSVC 2015 compiler specific DLL.
@@ -20,12 +20,12 @@ msvcrt.
create mode 100644 dlls/vcruntime140/vcruntime140.spec
diff --git a/configure.ac b/configure.ac
index ed1052c..16d87ac 100644
index e22b0ef..498470f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3328,6 +3328,7 @@ WINE_CONFIG_TEST(dlls/vcomp/tests)
WINE_CONFIG_DLL(vcomp100)
@@ -3363,6 +3363,7 @@ WINE_CONFIG_DLL(vcomp100)
WINE_CONFIG_DLL(vcomp110)
WINE_CONFIG_DLL(vcomp120)
WINE_CONFIG_DLL(vcomp90)
+WINE_CONFIG_DLL(vcruntime140,,[implib])
WINE_CONFIG_DLL(vdhcp.vxd,enable_win16)
@@ -159,5 +159,5 @@ index 0000000..9027955
+@ cdecl wcsrchr(wstr long) ntdll.wcsrchr
+@ cdecl wcsstr(wstr wstr) MSVCRT_wcsstr
--
2.5.0
2.6.0

View File

@@ -1,65 +0,0 @@
From a8bbc313edc840beb43636d634354f8d281ddd0f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Thu, 7 Aug 2014 01:41:25 +0200
Subject: comctl32: Add semi-stub implementation for LoadIconWithScaleDown.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Michael MĂĽller <michael@fds-team.de>
---
dlls/comctl32/commctrl.c | 18 +++++++++++++++---
include/commctrl.h | 2 +-
2 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/dlls/comctl32/commctrl.c b/dlls/comctl32/commctrl.c
index e18c27d..97656a5 100644
--- a/dlls/comctl32/commctrl.c
+++ b/dlls/comctl32/commctrl.c
@@ -3,6 +3,7 @@
*
* Copyright 1997 Dimitrie O. Paun
* Copyright 1998,2000 Eric Kohl
+ * Copyright 2014-2015 Michael MĂĽller
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -1641,8 +1642,19 @@ HRESULT WINAPI TaskDialogIndirect(const TASKDIALOGCONFIG *pTaskConfig, int *pnBu
/***********************************************************************
* LoadIconWithScaleDown [COMCTL32.@]
*/
-HRESULT WINAPI LoadIconWithScaleDown(HINSTANCE hinst, PCWSTR name, int cx, int cy, HICON *icon)
+HRESULT WINAPI LoadIconWithScaleDown(HINSTANCE hinst, const WCHAR *name, int cx, int cy, HICON *icon)
{
- FIXME("stub: %p %s %d %d %p\n", hinst, wine_dbgstr_w(name), cx, cy, icon);
- return E_NOTIMPL;
+ TRACE("(%p, %s, %d, %d, %p)\n", hinst, debugstr_w(name), cx, cy, icon);
+
+ *icon = NULL;
+
+ if (!name)
+ return E_INVALIDARG;
+
+ *icon = LoadImageW(hinst, name, IMAGE_ICON, cx, cy,
+ (hinst || IS_INTRESOURCE(name)) ? 0 : LR_LOADFROMFILE);
+ if (!*icon)
+ return HRESULT_FROM_WIN32(GetLastError());
+
+ return S_OK;
}
diff --git a/include/commctrl.h b/include/commctrl.h
index 0bcaeb6..0ed0997 100644
--- a/include/commctrl.h
+++ b/include/commctrl.h
@@ -42,7 +42,7 @@ BOOL WINAPI InitCommonControlsEx (const INITCOMMONCONTROLSEX*);
LANGID WINAPI GetMUILanguage (VOID);
VOID WINAPI InitMUILanguage (LANGID uiLang);
-HRESULT WINAPI LoadIconWithScaleDown(HINSTANCE, PCWSTR, int, int, HICON *);
+HRESULT WINAPI LoadIconWithScaleDown(HINSTANCE, const WCHAR *, int, int, HICON *);
#define COMCTL32_VERSION 5 /* dll version */
--
2.5.1

View File

@@ -1,85 +0,0 @@
From 3e453d9acebccfdcd209dbc57130bdfcaeb154ce Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Thu, 1 Oct 2015 22:52:22 +0200
Subject: comctl32: Add implementation for LoadIconMetric.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Michael MĂĽller <michael@fds-team.de>
---
dlls/comctl32/comctl32.spec | 1 +
dlls/comctl32/commctrl.c | 28 ++++++++++++++++++++++++++++
include/commctrl.h | 7 +++++++
3 files changed, 36 insertions(+)
diff --git a/dlls/comctl32/comctl32.spec b/dlls/comctl32/comctl32.spec
index 1e92e5f..1a5ab57 100644
--- a/dlls/comctl32/comctl32.spec
+++ b/dlls/comctl32/comctl32.spec
@@ -88,6 +88,7 @@
375 stdcall -noname -private StrCSpnIW(wstr wstr)
376 stdcall -noname -private IntlStrEqWorkerA(long str str long)
377 stdcall -noname -private IntlStrEqWorkerW(long wstr wstr long)
+380 stdcall -ordinal LoadIconMetric(ptr wstr long ptr)
381 stdcall -ordinal LoadIconWithScaleDown(ptr wstr long long ptr)
382 stdcall -noname SmoothScrollWindow(ptr)
383 stub -noname DoReaderMode
diff --git a/dlls/comctl32/commctrl.c b/dlls/comctl32/commctrl.c
index 97656a5..6d6b5e4 100644
--- a/dlls/comctl32/commctrl.c
+++ b/dlls/comctl32/commctrl.c
@@ -1658,3 +1658,31 @@ HRESULT WINAPI LoadIconWithScaleDown(HINSTANCE hinst, const WCHAR *name, int cx,
return S_OK;
}
+
+/***********************************************************************
+ * LoadIconMetric [COMCTL32.@]
+ */
+HRESULT WINAPI LoadIconMetric(HINSTANCE hinst, const WCHAR *name, int size, HICON *icon)
+{
+ int cx, cy;
+
+ TRACE("(%p, %s, %d, %p)\n", hinst, debugstr_w(name), size, icon);
+
+ if (size == LIM_SMALL)
+ {
+ cx = GetSystemMetrics(SM_CXSMICON);
+ cy = GetSystemMetrics(SM_CYSMICON);
+ }
+ else if (size == LIM_LARGE)
+ {
+ cx = GetSystemMetrics(SM_CXICON);
+ cy = GetSystemMetrics(SM_CYICON);
+ }
+ else
+ {
+ *icon = NULL;
+ return E_INVALIDARG;
+ }
+
+ return LoadIconWithScaleDown(hinst, name, cx, cy, icon);
+}
diff --git a/include/commctrl.h b/include/commctrl.h
index 0ed0997..5029e77 100644
--- a/include/commctrl.h
+++ b/include/commctrl.h
@@ -42,7 +42,14 @@ BOOL WINAPI InitCommonControlsEx (const INITCOMMONCONTROLSEX*);
LANGID WINAPI GetMUILanguage (VOID);
VOID WINAPI InitMUILanguage (LANGID uiLang);
+enum _LI_METRIC
+{
+ LIM_SMALL,
+ LIM_LARGE
+};
+
HRESULT WINAPI LoadIconWithScaleDown(HINSTANCE, const WCHAR *, int, int, HICON *);
+HRESULT WINAPI LoadIconMetric(HINSTANCE, const WCHAR *, int, HICON *);
#define COMCTL32_VERSION 5 /* dll version */
--
2.5.1

View File

@@ -1,201 +0,0 @@
From 21c232611559de13e52d933ffd5f940230bbad86 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Thu, 7 Aug 2014 01:54:28 +0200
Subject: comctl32/tests: Add tests for LoadIconMetric function.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Michael MĂĽller <michael@fds-team.de>
---
dlls/comctl32/tests/misc.c | 153 +++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 153 insertions(+)
diff --git a/dlls/comctl32/tests/misc.c b/dlls/comctl32/tests/misc.c
index 280b46c..ffd0dca 100644
--- a/dlls/comctl32/tests/misc.c
+++ b/dlls/comctl32/tests/misc.c
@@ -20,6 +20,7 @@
#include <stdio.h>
#include <windows.h>
+#include <commctrl.h>
#include "wine/test.h"
#include "v6util.h"
@@ -36,6 +37,18 @@ static BOOL (WINAPI * pStr_SetPtrW)(LPWSTR, LPCWSTR);
static HMODULE hComctl32 = 0;
+static char testicon_data[] =
+{
+ 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x02, 0x02, 0x00, 0x00, 0x01, 0x00,
+ 0x20, 0x00, 0x40, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x28, 0x00,
+ 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00,
+ 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x12, 0x0b,
+ 0x00, 0x00, 0x12, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xde, 0xde, 0xde, 0xff, 0xde, 0xde, 0xde, 0xff, 0xde, 0xde,
+ 0xde, 0xff, 0xde, 0xde, 0xde, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00
+};
+
#define COMCTL32_GET_PROC(ordinal, func) \
p ## func = (void*)GetProcAddress(hComctl32, (LPSTR)ordinal); \
if(!p ## func) { \
@@ -205,6 +218,145 @@ static void test_TaskDialogIndirect(void)
ok(ptr == ptr2, "got wrong pointer for ordinal 345, %p expected %p\n", ptr2, ptr);
}
+static void test_LoadIconWithScaleDown(void)
+{
+ static const WCHAR nonexisting_fileW[] = {'n','o','n','e','x','i','s','t','i','n','g','.','i','c','o',0};
+ static const WCHAR nonexisting_resourceW[] = {'N','o','n','e','x','i','s','t','i','n','g',0};
+ static const WCHAR prefixW[] = {'I','C','O',0};
+ HRESULT (WINAPI *pLoadIconMetric)(HINSTANCE, const WCHAR *, int, HICON *);
+ HRESULT (WINAPI *pLoadIconWithScaleDown)(HINSTANCE, const WCHAR *, int, int, HICON *);
+ WCHAR tmp_path[MAX_PATH], icon_path[MAX_PATH];
+ ICONINFO info;
+ HMODULE hinst;
+ HANDLE handle;
+ DWORD written;
+ HRESULT hr;
+ BITMAP bmp;
+ HICON icon;
+ void *ptr;
+ int bytes;
+ BOOL res;
+
+ hinst = LoadLibraryA("comctl32.dll");
+ pLoadIconMetric = (void *)GetProcAddress(hinst, "LoadIconMetric");
+ pLoadIconWithScaleDown = (void *)GetProcAddress(hinst, "LoadIconWithScaleDown");
+ if (!pLoadIconMetric || !pLoadIconWithScaleDown)
+ {
+ win_skip("LoadIconMetric or pLoadIconWithScaleDown not exported by name\n");
+ FreeLibrary(hinst);
+ return;
+ }
+
+ GetTempPathW(MAX_PATH, tmp_path);
+ GetTempFileNameW(tmp_path, prefixW, 0, icon_path);
+ handle = CreateFileW(icon_path, GENERIC_READ | GENERIC_WRITE, 0, NULL, CREATE_ALWAYS,
+ FILE_ATTRIBUTE_NORMAL, NULL);
+ ok(handle != INVALID_HANDLE_VALUE, "CreateFileW failed with error %u\n", GetLastError());
+ res = WriteFile(handle, testicon_data, sizeof(testicon_data), &written, NULL);
+ ok(res && written == sizeof(testicon_data), "Failed to write icon file\n");
+ CloseHandle(handle);
+
+ /* test ordinals */
+ ptr = GetProcAddress(hinst, (const char *)380);
+ ok(ptr == pLoadIconMetric,
+ "got wrong pointer for ordinal 380, %p expected %p\n", ptr, pLoadIconMetric);
+
+ ptr = GetProcAddress(hinst, (const char *)381);
+ ok(ptr == pLoadIconWithScaleDown,
+ "got wrong pointer for ordinal 381, %p expected %p\n", ptr, pLoadIconWithScaleDown);
+
+ /* invalid arguments */
+ icon = (HICON)0x1234;
+ hr = pLoadIconMetric(NULL, MAKEINTRESOURCEW(IDI_APPLICATION), 0x100, &icon);
+ ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %x\n", hr);
+ ok(icon == NULL, "Expected NULL, got %p\n", icon);
+
+ icon = (HICON)0x1234;
+ hr = pLoadIconMetric(NULL, NULL, LIM_LARGE, &icon);
+ ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %x\n", hr);
+ ok(icon == NULL, "Expected NULL, got %p\n", icon);
+
+ icon = (HICON)0x1234;
+ hr = pLoadIconWithScaleDown(NULL, NULL, 32, 32, &icon);
+ ok(hr == E_INVALIDARG, "Expected E_INVALIDARG, got %x\n", hr);
+ ok(icon == NULL, "Expected NULL, got %p\n", icon);
+
+ /* non-existing filename */
+ hr = pLoadIconMetric(NULL, nonexisting_fileW, LIM_LARGE, &icon);
+ todo_wine
+ ok(hr == HRESULT_FROM_WIN32(ERROR_RESOURCE_TYPE_NOT_FOUND),
+ "Expected HRESULT_FROM_WIN32(ERROR_RESOURCE_TYPE_NOT_FOUND), got %x\n", hr);
+
+ hr = pLoadIconWithScaleDown(NULL, nonexisting_fileW, 32, 32, &icon);
+ todo_wine
+ ok(hr == HRESULT_FROM_WIN32(ERROR_RESOURCE_TYPE_NOT_FOUND),
+ "Expected HRESULT_FROM_WIN32(ERROR_RESOURCE_TYPE_NOT_FOUND), got %x\n", hr);
+
+ /* non-existing resource name */
+ hr = pLoadIconMetric(hinst, nonexisting_resourceW, LIM_LARGE, &icon);
+ ok(hr == HRESULT_FROM_WIN32(ERROR_RESOURCE_TYPE_NOT_FOUND),
+ "Expected HRESULT_FROM_WIN32(ERROR_RESOURCE_TYPE_NOT_FOUND), got %x\n", hr);
+
+ hr = pLoadIconWithScaleDown(hinst, nonexisting_resourceW, 32, 32, &icon);
+ ok(hr == HRESULT_FROM_WIN32(ERROR_RESOURCE_TYPE_NOT_FOUND),
+ "Expected HRESULT_FROM_WIN32(ERROR_RESOURCE_TYPE_NOT_FOUND), got %x\n", hr);
+
+ /* load icon using predefined identifier */
+ hr = pLoadIconMetric(NULL, MAKEINTRESOURCEW(IDI_APPLICATION), LIM_SMALL, &icon);
+ ok(hr == S_OK, "Expected S_OK, got %x\n", hr);
+ res = GetIconInfo(icon, &info);
+ ok(res, "Failed to get icon info, error %u\n", GetLastError());
+ bytes = GetObjectA(info.hbmColor, sizeof(bmp), &bmp);
+ ok(bytes > 0, "Failed to get bitmap info for icon\n");
+ ok(bmp.bmWidth == GetSystemMetrics(SM_CXSMICON), "Wrong icon width %d\n", bmp.bmWidth);
+ ok(bmp.bmHeight == GetSystemMetrics(SM_CYSMICON), "Wrong icon height %d\n", bmp.bmHeight);
+ DestroyIcon(icon);
+
+ hr = pLoadIconMetric(NULL, MAKEINTRESOURCEW(IDI_APPLICATION), LIM_LARGE, &icon);
+ ok(hr == S_OK, "Expected S_OK, got %x\n", hr);
+ res = GetIconInfo(icon, &info);
+ ok(res, "Failed to get icon info, error %u\n", GetLastError());
+ bytes = GetObjectA(info.hbmColor, sizeof(bmp), &bmp);
+ ok(bytes > 0, "Failed to get bitmap info for icon\n");
+ ok(bmp.bmWidth == GetSystemMetrics(SM_CXICON), "Wrong icon width %d\n", bmp.bmWidth);
+ ok(bmp.bmHeight == GetSystemMetrics(SM_CYICON), "Wrong icon height %d\n", bmp.bmHeight);
+ DestroyIcon(icon);
+
+ hr = pLoadIconWithScaleDown(NULL, MAKEINTRESOURCEW(IDI_APPLICATION), 42, 42, &icon);
+ ok(hr == S_OK, "Expected S_OK, got %x\n", hr);
+ res = GetIconInfo(icon, &info);
+ ok(res, "Failed to get icon info, error %u\n", GetLastError());
+ bytes = GetObjectA(info.hbmColor, sizeof(bmp), &bmp);
+ ok(bytes > 0, "Failed to get bitmap info for icon\n");
+ ok(bmp.bmWidth == 42, "Wrong icon width %d\n", bmp.bmWidth);
+ ok(bmp.bmHeight == 42, "Wrong icon height %d\n", bmp.bmHeight);
+ DestroyIcon(icon);
+
+ /* load icon from file */
+ hr = pLoadIconMetric(NULL, icon_path, LIM_SMALL, &icon);
+ ok(hr == S_OK, "Expected S_OK, got %x\n", hr);
+ res = GetIconInfo(icon, &info);
+ ok(res, "Failed to get icon info, error %u\n", GetLastError());
+ bytes = GetObjectA(info.hbmColor, sizeof(bmp), &bmp);
+ ok(bytes > 0, "Failed to get bitmap info for icon\n");
+ ok(bmp.bmWidth == GetSystemMetrics(SM_CXSMICON), "Wrong icon width %d\n", bmp.bmWidth);
+ ok(bmp.bmHeight == GetSystemMetrics(SM_CYSMICON), "Wrong icon height %d\n", bmp.bmHeight);
+ DestroyIcon(icon);
+
+ hr = pLoadIconWithScaleDown(NULL, icon_path, 42, 42, &icon);
+ ok(hr == S_OK, "Expected S_OK, got %x\n", hr);
+ res = GetIconInfo(icon, &info);
+ ok(res, "Failed to get icon info, error %u\n", GetLastError());
+ bytes = GetObjectA(info.hbmColor, sizeof(bmp), &bmp);
+ ok(bytes > 0, "Failed to get bitmap info for icon\n");
+ ok(bmp.bmWidth == 42, "Wrong icon width %d\n", bmp.bmWidth);
+ ok(bmp.bmHeight == 42, "Wrong icon height %d\n", bmp.bmHeight);
+ DestroyIcon(icon);
+
+ DeleteFileW(icon_path);
+ FreeLibrary(hinst);
+}
+
START_TEST(misc)
{
ULONG_PTR ctx_cookie;
@@ -220,6 +372,7 @@ START_TEST(misc)
return;
test_TaskDialogIndirect();
+ test_LoadIconWithScaleDown();
unload_v6_module(ctx_cookie, hCtx);
}
--
2.5.1

View File

@@ -1 +0,0 @@
Fixes: [35375] Support for LoadIconMetric

View File

@@ -0,0 +1,132 @@
From 5bd9830f145a29823b4a44b079c70171e55fb5db Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sat, 17 Oct 2015 15:38:13 +0200
Subject: comctl32/tests: Add tests for PROPSHEET_InsertPage.
---
dlls/comctl32/tests/propsheet.c | 97 ++++++++++++++++++++++++++++++++++++++++-
1 file changed, 96 insertions(+), 1 deletion(-)
diff --git a/dlls/comctl32/tests/propsheet.c b/dlls/comctl32/tests/propsheet.c
index 6594298..cdbbca8 100644
--- a/dlls/comctl32/tests/propsheet.c
+++ b/dlls/comctl32/tests/propsheet.c
@@ -806,7 +806,7 @@ static void test_PSM_ADDPAGE(void)
psp.pfnDlgProc = page_dlg_proc_messages;
psp.lParam = 0;
- /* two page with the same data */
+ /* multiple pages with the same data */
hpsp[0] = CreatePropertySheetPageA(&psp);
hpsp[1] = CreatePropertySheetPageA(&psp);
hpsp[2] = CreatePropertySheetPageA(&psp);
@@ -878,6 +878,100 @@ if (0)
DestroyWindow(hdlg);
}
+static void test_PSM_INSERTPAGE(void)
+{
+ HPROPSHEETPAGE hpsp[5];
+ PROPSHEETPAGEA psp;
+ PROPSHEETHEADERA psh;
+ HWND hdlg, tab;
+ BOOL ret;
+ DWORD r;
+
+ memset(&psp, 0, sizeof(psp));
+ psp.dwSize = sizeof(psp);
+ psp.dwFlags = 0;
+ psp.hInstance = GetModuleHandleA(NULL);
+ U(psp).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_MESSAGE_TEST);
+ U2(psp).pszIcon = NULL;
+ psp.pfnDlgProc = page_dlg_proc_messages;
+ psp.lParam = 0;
+
+ /* multiple pages with the same data */
+ hpsp[0] = CreatePropertySheetPageA(&psp);
+ hpsp[1] = CreatePropertySheetPageA(&psp);
+ hpsp[2] = CreatePropertySheetPageA(&psp);
+
+ U(psp).pszTemplate = (LPCSTR)MAKEINTRESOURCE(IDD_PROP_PAGE_ERROR);
+ hpsp[3] = CreatePropertySheetPageA(&psp);
+
+ psp.dwFlags = PSP_PREMATURE;
+ hpsp[4] = CreatePropertySheetPageA(&psp);
+
+ memset(&psh, 0, sizeof(psh));
+ psh.dwSize = PROPSHEETHEADERA_V1_SIZE;
+ psh.dwFlags = PSH_MODELESS;
+ psh.pszCaption = "test caption";
+ psh.nPages = 1;
+ psh.hwndParent = GetDesktopWindow();
+ U3(psh).phpage = hpsp;
+
+ hdlg = (HWND)PropertySheetA(&psh);
+ ok(hdlg != INVALID_HANDLE_VALUE, "got invalid handle %p\n", hdlg);
+
+ /* add pages one by one */
+ ret = SendMessageA(hdlg, PSM_INSERTPAGE, 5, (LPARAM)hpsp[1]);
+ todo_wine ok(ret == TRUE, "got %d\n", ret);
+
+ /* try with invalid values */
+ ret = SendMessageA(hdlg, PSM_INSERTPAGE, 0, 0);
+ ok(ret == FALSE, "got %d\n", ret);
+
+if (0)
+{
+ /* crashes on native */
+ ret = SendMessageA(hdlg, PSM_INSERTPAGE, 0, (LPARAM)INVALID_HANDLE_VALUE);
+}
+
+ ret = SendMessageA(hdlg, PSM_INSERTPAGE, (LPARAM)INVALID_HANDLE_VALUE, (LPARAM)hpsp[2]);
+ ok(ret == FALSE, "got %d\n", ret);
+
+ /* check item count */
+ tab = (HWND)SendMessageA(hdlg, PSM_GETTABCONTROL, 0, 0);
+
+ r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
+ todo_wine ok(r == 2, "got %d\n", r);
+
+ ret = SendMessageA(hdlg, PSM_INSERTPAGE, (WPARAM)hpsp[1], (LPARAM)hpsp[2]);
+ todo_wine ok(ret == TRUE, "got %d\n", ret);
+
+ r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
+ todo_wine ok(r == 3, "got %d\n", r);
+
+ /* add property sheet page that can't be created */
+ ret = SendMessageA(hdlg, PSM_INSERTPAGE, 1, (LPARAM)hpsp[3]);
+ todo_wine ok(ret == TRUE, "got %d\n", ret);
+
+ r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
+ todo_wine ok(r == 4, "got %d\n", r);
+
+ /* select page that can't be created */
+ ret = SendMessageA(hdlg, PSM_SETCURSEL, 1, 0);
+ todo_wine ok(ret == TRUE, "got %d\n", ret);
+
+ r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
+ todo_wine ok(r == 3, "got %d\n", r);
+
+ /* test PSP_PREMATURE flag with incorrect property sheet page */
+ ret = SendMessageA(hdlg, PSM_INSERTPAGE, 0, (LPARAM)hpsp[4]);
+ ok(ret == FALSE, "got %d\n", ret);
+
+ r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
+ todo_wine ok(r == 3, "got %d\n", r);
+
+ DestroyPropertySheetPage(hpsp[4]);
+ DestroyWindow(hdlg);
+}
+
START_TEST(propsheet)
{
test_title();
@@ -888,4 +982,5 @@ START_TEST(propsheet)
test_custom_default_button();
test_messages();
test_PSM_ADDPAGE();
+ test_PSM_INSERTPAGE();
}
--
2.6.1

View File

@@ -0,0 +1,248 @@
From 8b23d1c04949938de77466556f7caf9321687a33 Mon Sep 17 00:00:00 2001
From: Peter Hater <7element@mail.bg>
Date: Wed, 16 Sep 2015 15:49:58 +0300
Subject: comctl32: Implement PROPSHEET_InsertPage based on PROPSHEET_AddPage
---
dlls/comctl32/propsheet.c | 152 +++++++++++++++++++++++++---------------
dlls/comctl32/tests/propsheet.c | 18 ++---
2 files changed, 104 insertions(+), 66 deletions(-)
diff --git a/dlls/comctl32/propsheet.c b/dlls/comctl32/propsheet.c
index ce7001c..fecb0e4 100644
--- a/dlls/comctl32/propsheet.c
+++ b/dlls/comctl32/propsheet.c
@@ -172,6 +172,7 @@ static int PROPSHEET_GetPageIndex(HPROPSHEETPAGE hpage, const PropSheetInfo* psI
static PADDING_INFO PROPSHEET_GetPaddingInfoWizard(HWND hwndDlg, const PropSheetInfo* psInfo);
static BOOL PROPSHEET_DoCommand(HWND hwnd, WORD wID);
static BOOL PROPSHEET_RemovePage(HWND hwndDlg, int index, HPROPSHEETPAGE hpage);
+static BOOL PROPSHEET_InsertPage(HWND hwndDlg, HPROPSHEETPAGE hpageInsertAfter, HPROPSHEETPAGE hpage);
static INT_PTR CALLBACK
PROPSHEET_DialogProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
@@ -2259,60 +2260,9 @@ static LRESULT PROPSHEET_QuerySiblings(HWND hwndDlg,
static BOOL PROPSHEET_AddPage(HWND hwndDlg,
HPROPSHEETPAGE hpage)
{
- PropPageInfo * ppi;
PropSheetInfo * psInfo = GetPropW(hwndDlg, PropSheetInfoStr);
- HWND hwndTabControl = GetDlgItem(hwndDlg, IDC_TABCONTROL);
- TCITEMW item;
- LPCPROPSHEETPAGEW ppsp = (LPCPROPSHEETPAGEW)hpage;
-
TRACE("hpage %p\n", hpage);
- /*
- * Allocate and fill in a new PropPageInfo entry.
- */
- ppi = ReAlloc(psInfo->proppage, sizeof(PropPageInfo) * (psInfo->nPages + 1));
- if (!ppi)
- return FALSE;
-
- psInfo->proppage = ppi;
- if (!PROPSHEET_CollectPageInfo(ppsp, psInfo, psInfo->nPages, FALSE))
- return FALSE;
-
- psInfo->proppage[psInfo->nPages].hpage = hpage;
-
- if (ppsp->dwFlags & PSP_PREMATURE)
- {
- /* Create the page but don't show it */
- if(!PROPSHEET_CreatePage(hwndDlg, psInfo->nPages, psInfo, ppsp))
- return FALSE;
- }
-
- /*
- * Add a new tab to the tab control.
- */
- item.mask = TCIF_TEXT;
- item.pszText = (LPWSTR) psInfo->proppage[psInfo->nPages].pszText;
- item.cchTextMax = MAX_TABTEXT_LENGTH;
-
- if (psInfo->hImageList)
- {
- SendMessageW(hwndTabControl, TCM_SETIMAGELIST, 0, (LPARAM)psInfo->hImageList);
- }
-
- if ( psInfo->proppage[psInfo->nPages].hasIcon )
- {
- item.mask |= TCIF_IMAGE;
- item.iImage = psInfo->nPages;
- }
-
- SendMessageW(hwndTabControl, TCM_INSERTITEMW, psInfo->nPages + 1,
- (LPARAM)&item);
-
- psInfo->nPages++;
-
- /* If it is the only page - show it */
- if(psInfo->nPages == 1)
- PROPSHEET_SetCurSel(hwndDlg, 0, 1, 0);
- return TRUE;
+ return PROPSHEET_InsertPage(hwndDlg, (HPROPSHEETPAGE)(ULONG_PTR)psInfo->nPages, hpage);
}
/******************************************************************************
@@ -2473,11 +2423,99 @@ static void PROPSHEET_SetWizButtons(HWND hwndDlg, DWORD dwFlags)
*/
static BOOL PROPSHEET_InsertPage(HWND hwndDlg, HPROPSHEETPAGE hpageInsertAfter, HPROPSHEETPAGE hpage)
{
- if (IS_INTRESOURCE(hpageInsertAfter))
- FIXME("(%p, %d, %p): stub\n", hwndDlg, LOWORD(hpageInsertAfter), hpage);
- else
- FIXME("(%p, %p, %p): stub\n", hwndDlg, hpageInsertAfter, hpage);
- return FALSE;
+ PropSheetInfo * psInfo = GetPropW(hwndDlg, PropSheetInfoStr);
+ PropPageInfo * ppi, * prev_ppi = psInfo->proppage;
+ HWND hwndTabControl = GetDlgItem(hwndDlg, IDC_TABCONTROL);
+ LPCPROPSHEETPAGEW ppsp = (LPCPROPSHEETPAGEW)hpage;
+ TCITEMW item;
+ int index;
+
+ TRACE("hwndDlg %p, hpageInsertAfter %p, hpage %p\n", hwndDlg, hpageInsertAfter, hpage);
+
+ if (IS_INTRESOURCE(hpageInsertAfter))
+ index = LOWORD(hpageInsertAfter);
+ else
+ {
+ index = PROPSHEET_GetPageIndex(hpageInsertAfter, psInfo, -1);
+ if (index < 0)
+ {
+ TRACE("Could not find page to insert after!\n");
+ return FALSE;
+ }
+ index++;
+ }
+
+ if (index > psInfo->nPages)
+ index = psInfo->nPages;
+
+ /*
+ * Allocate a new PropPageInfo entry.
+ */
+ ppi = Alloc(sizeof(PropPageInfo) * (psInfo->nPages + 1));
+ if (!ppi)
+ return FALSE;
+
+ /*
+ * Fill in a new PropPageInfo entry.
+ */
+ if (index > 0)
+ memcpy(ppi, prev_ppi, index * sizeof(PropPageInfo));
+ memset(&ppi[index], 0, sizeof(PropPageInfo));
+ if (index < psInfo->nPages)
+ memcpy(&ppi[index + 1], &prev_ppi[index], (psInfo->nPages - index) * sizeof(PropPageInfo));
+ psInfo->proppage = ppi;
+
+ if (!PROPSHEET_CollectPageInfo(ppsp, psInfo, index, FALSE))
+ {
+ psInfo->proppage = prev_ppi;
+ Free(ppi);
+ return FALSE;
+ }
+
+ psInfo->proppage[index].hpage = hpage;
+
+ if (ppsp->dwFlags & PSP_PREMATURE)
+ {
+ /* Create the page but don't show it */
+ if(!PROPSHEET_CreatePage(hwndDlg, index, psInfo, ppsp))
+ {
+ psInfo->proppage = prev_ppi;
+ Free(ppi);
+ return FALSE;
+ }
+ }
+
+ Free(prev_ppi);
+ psInfo->nPages++;
+ if (index <= psInfo->active_page)
+ psInfo->active_page++;
+
+ /*
+ * Add a new tab to the tab control.
+ */
+ item.mask = TCIF_TEXT;
+ item.pszText = (LPWSTR) psInfo->proppage[index].pszText;
+ item.cchTextMax = MAX_TABTEXT_LENGTH;
+
+ if (psInfo->hImageList)
+ {
+ SendMessageW(hwndTabControl, TCM_SETIMAGELIST, 0, (LPARAM)psInfo->hImageList);
+ }
+
+ if (psInfo->proppage[index].hasIcon)
+ {
+ item.mask |= TCIF_IMAGE;
+ item.iImage = index;
+ }
+
+ SendMessageW(hwndTabControl, TCM_INSERTITEMW, index,
+ (LPARAM)&item);
+
+ /* If it is the only page - show it */
+ if (psInfo->nPages == 1)
+ PROPSHEET_SetCurSel(hwndDlg, 0, 1, 0);
+
+ return TRUE;
}
/******************************************************************************
diff --git a/dlls/comctl32/tests/propsheet.c b/dlls/comctl32/tests/propsheet.c
index cdbbca8..bcc89bb 100644
--- a/dlls/comctl32/tests/propsheet.c
+++ b/dlls/comctl32/tests/propsheet.c
@@ -920,7 +920,7 @@ static void test_PSM_INSERTPAGE(void)
/* add pages one by one */
ret = SendMessageA(hdlg, PSM_INSERTPAGE, 5, (LPARAM)hpsp[1]);
- todo_wine ok(ret == TRUE, "got %d\n", ret);
+ ok(ret == TRUE, "got %d\n", ret);
/* try with invalid values */
ret = SendMessageA(hdlg, PSM_INSERTPAGE, 0, 0);
@@ -939,34 +939,34 @@ if (0)
tab = (HWND)SendMessageA(hdlg, PSM_GETTABCONTROL, 0, 0);
r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
- todo_wine ok(r == 2, "got %d\n", r);
+ ok(r == 2, "got %d\n", r);
ret = SendMessageA(hdlg, PSM_INSERTPAGE, (WPARAM)hpsp[1], (LPARAM)hpsp[2]);
- todo_wine ok(ret == TRUE, "got %d\n", ret);
+ ok(ret == TRUE, "got %d\n", ret);
r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
- todo_wine ok(r == 3, "got %d\n", r);
+ ok(r == 3, "got %d\n", r);
/* add property sheet page that can't be created */
ret = SendMessageA(hdlg, PSM_INSERTPAGE, 1, (LPARAM)hpsp[3]);
- todo_wine ok(ret == TRUE, "got %d\n", ret);
+ ok(ret == TRUE, "got %d\n", ret);
r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
- todo_wine ok(r == 4, "got %d\n", r);
+ ok(r == 4, "got %d\n", r);
/* select page that can't be created */
ret = SendMessageA(hdlg, PSM_SETCURSEL, 1, 0);
- todo_wine ok(ret == TRUE, "got %d\n", ret);
+ ok(ret == TRUE, "got %d\n", ret);
r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
- todo_wine ok(r == 3, "got %d\n", r);
+ ok(r == 3, "got %d\n", r);
/* test PSP_PREMATURE flag with incorrect property sheet page */
ret = SendMessageA(hdlg, PSM_INSERTPAGE, 0, (LPARAM)hpsp[4]);
ok(ret == FALSE, "got %d\n", ret);
r = SendMessageA(tab, TCM_GETITEMCOUNT, 0, 0);
- todo_wine ok(r == 3, "got %d\n", r);
+ ok(r == 3, "got %d\n", r);
DestroyPropertySheetPage(hpsp[4]);
DestroyWindow(hdlg);
--
2.6.1

View File

@@ -0,0 +1 @@
Fixes: [25625] Add implementation for comctl32.PROPSHEET_InsertPage.

View File

@@ -0,0 +1,120 @@
From a719ecc33b789c26eb75b1eb27523f47cb02df5c Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Fri, 21 Aug 2015 15:05:51 +1000
Subject: d3dx9_36: Store all values passed to the create and return them in
the correct functions
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
---
dlls/d3dx9_36/animation.c | 47 ++++++++++++++++++++++++++++++++---------------
1 file changed, 32 insertions(+), 15 deletions(-)
diff --git a/dlls/d3dx9_36/animation.c b/dlls/d3dx9_36/animation.c
index 72f685f..042079d 100644
--- a/dlls/d3dx9_36/animation.c
+++ b/dlls/d3dx9_36/animation.c
@@ -27,6 +27,11 @@ struct d3dx9_animation_controller
{
ID3DXAnimationController ID3DXAnimationController_iface;
LONG ref;
+
+ UINT max_outputs;
+ UINT max_sets;
+ UINT max_tracks;
+ UINT max_events;
};
static inline struct d3dx9_animation_controller *impl_from_ID3DXAnimationController(ID3DXAnimationController *iface)
@@ -53,24 +58,24 @@ static HRESULT WINAPI d3dx9_animation_controller_QueryInterface(ID3DXAnimationCo
static ULONG WINAPI d3dx9_animation_controller_AddRef(ID3DXAnimationController *iface)
{
- struct d3dx9_animation_controller *animation = impl_from_ID3DXAnimationController(iface);
- ULONG refcount = InterlockedIncrement(&animation->ref);
+ struct d3dx9_animation_controller *This = impl_from_ID3DXAnimationController(iface);
+ ULONG refcount = InterlockedIncrement(&This->ref);
- TRACE("%p increasing refcount to %u.\n", animation, refcount);
+ TRACE("%p increasing refcount to %u.\n", This, refcount);
return refcount;
}
static ULONG WINAPI d3dx9_animation_controller_Release(ID3DXAnimationController *iface)
{
- struct d3dx9_animation_controller *animation = impl_from_ID3DXAnimationController(iface);
- ULONG refcount = InterlockedDecrement(&animation->ref);
+ struct d3dx9_animation_controller *This = impl_from_ID3DXAnimationController(iface);
+ ULONG refcount = InterlockedDecrement(&This->ref);
- TRACE("%p decreasing refcount to %u.\n", animation, refcount);
+ TRACE("%p decreasing refcount to %u.\n", This, refcount);
if (!refcount)
{
- HeapFree(GetProcessHeap(), 0, animation);
+ HeapFree(GetProcessHeap(), 0, This);
}
return refcount;
@@ -78,30 +83,38 @@ static ULONG WINAPI d3dx9_animation_controller_Release(ID3DXAnimationController
static UINT WINAPI d3dx9_animation_controller_GetMaxNumAnimationOutputs(ID3DXAnimationController *iface)
{
- FIXME("iface %p stub.\n", iface);
+ struct d3dx9_animation_controller *This = impl_from_ID3DXAnimationController(iface);
- return 0;
+ TRACE("iface %p.\n", iface);
+
+ return This->max_outputs;
}
static UINT WINAPI d3dx9_animation_controller_GetMaxNumAnimationSets(ID3DXAnimationController *iface)
{
- FIXME("iface %p stub.\n", iface);
+ struct d3dx9_animation_controller *This = impl_from_ID3DXAnimationController(iface);
- return 0;
+ TRACE("iface %p.\n", iface);
+
+ return This->max_sets;
}
static UINT WINAPI d3dx9_animation_controller_GetMaxNumTracks(ID3DXAnimationController *iface)
{
- FIXME("iface %p stub.\n", iface);
+ struct d3dx9_animation_controller *This = impl_from_ID3DXAnimationController(iface);
- return 0;
+ FIXME("iface %p.\n", iface);
+
+ return This->max_tracks;
}
static UINT WINAPI d3dx9_animation_controller_GetMaxNumEvents(ID3DXAnimationController *iface)
{
- FIXME("iface %p stub.\n", iface);
+ struct d3dx9_animation_controller *This = impl_from_ID3DXAnimationController(iface);
- return 0;
+ FIXME("iface %p.\n", iface);
+
+ return This->max_events;
}
static HRESULT WINAPI d3dx9_animation_controller_RegisterAnimationOutput(ID3DXAnimationController *iface,
@@ -448,6 +461,10 @@ HRESULT WINAPI D3DXCreateAnimationController(UINT MaxNumAnimationOutputs, UINT M
object->ID3DXAnimationController_iface.lpVtbl = &d3dx9_animation_controller_vtbl;
object->ref = 1;
+ object->max_outputs = MaxNumAnimationOutputs;
+ object->max_sets = MaxNumAnimationSets;
+ object->max_tracks = MaxNumTracks;
+ object->max_events = MaxNumEvents;
*AnimationController = &object->ID3DXAnimationController_iface;
--
2.6.1

View File

@@ -0,0 +1,83 @@
From 151b9f248ad985bb545541fbc4a0096e53385505 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Tue, 25 Aug 2015 14:34:43 +1000
Subject: d3dx9_36: Add D3DXCreateAnimationController tests
Signed-off-by: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
---
dlls/d3dx9_36/tests/mesh.c | 52 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
diff --git a/dlls/d3dx9_36/tests/mesh.c b/dlls/d3dx9_36/tests/mesh.c
index 4186e19..fd764df 100644
--- a/dlls/d3dx9_36/tests/mesh.c
+++ b/dlls/d3dx9_36/tests/mesh.c
@@ -10959,6 +10959,57 @@ static void test_compute_normals(void)
free_test_context(test_context);
}
+static void D3DXCreateAnimationControllerTest(void)
+{
+ HRESULT hr;
+ ID3DXAnimationController *animation;
+ UINT value;
+
+ hr = D3DXCreateAnimationController(0, 0, 0, 0, NULL);
+ todo_wine ok(hr == D3D_OK, "D3DXCreateAnimationController returned %#x, expected D3D_OK\n", hr);
+
+if (0) /* Crashes when animation is Released */
+{
+ hr = D3DXCreateAnimationController(0, 0, 0, 0, &animation);
+ ok(hr == D3D_OK, "D3DXCreateAnimationController returned %#x, expected D3D_OK\n", hr);
+ animation->lpVtbl->Release(animation);
+}
+
+ hr = D3DXCreateAnimationController(1, 1, 1, 1, &animation);
+ ok(hr == D3D_OK, "D3DXCreateAnimationController returned %#x, expected D3D_OK\n", hr);
+
+ value = animation->lpVtbl->GetMaxNumAnimationOutputs(animation);
+ ok(value == 1, "returned %u, expected 1\n", value);
+
+ value = animation->lpVtbl->GetMaxNumAnimationSets(animation);
+ ok(value == 1, "returned %u, expected 1\n", value);
+
+ value = animation->lpVtbl->GetMaxNumTracks(animation);
+ ok(value == 1, "returned %u, expected 1\n", value);
+
+ value = animation->lpVtbl->GetMaxNumEvents(animation);
+ ok(value == 1, "returned %u, expected 1\n", value);
+
+ animation->lpVtbl->Release(animation);
+
+ hr = D3DXCreateAnimationController(100, 101, 102, 103, &animation);
+ ok(hr == D3D_OK, "D3DXCreateAnimationController returned %#x, expected D3D_OK\n", hr);
+
+ value = animation->lpVtbl->GetMaxNumAnimationOutputs(animation);
+ ok(value == 100, "returned %u, expected 100\n", value);
+
+ value = animation->lpVtbl->GetMaxNumAnimationSets(animation);
+ ok(value == 101, "returned %u, expected 101\n", value);
+
+ value = animation->lpVtbl->GetMaxNumTracks(animation);
+ ok(value == 102, "returned %u, expected 102\n", value);
+
+ value = animation->lpVtbl->GetMaxNumEvents(animation);
+ ok(value == 103, "returned %u, expected 103\n", value);
+
+ animation->lpVtbl->Release(animation);
+}
+
START_TEST(mesh)
{
D3DXBoundProbeTest();
@@ -10975,6 +11026,7 @@ START_TEST(mesh)
D3DXCreateCylinderTest();
D3DXCreateTextTest();
D3DXCreateTorusTest();
+ D3DXCreateAnimationControllerTest();
test_get_decl_length();
test_get_decl_vertex_size();
test_fvf_decl_conversion();
--
2.6.1

Some files were not shown because too many files have changed in this diff Show More