You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-04-13 14:42:51 -07:00
Compare commits
41 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
67dffe4dc6 | ||
|
d8cf46384c | ||
|
6494429c2f | ||
|
be51f622f7 | ||
|
922e5a0e06 | ||
|
9b1ac08c87 | ||
|
bfabcd117e | ||
|
b8c9f3454e | ||
|
3f46a6acb7 | ||
|
c83adcf25b | ||
|
091bcbce3c | ||
|
6971149e11 | ||
|
1f9e5b10e0 | ||
|
0c3120e10d | ||
|
550a60731f | ||
|
3bf5b8762a | ||
|
188b345d2e | ||
|
458dd1fbce | ||
|
216a2d8994 | ||
|
032bf69aa7 | ||
|
e80a1b9b96 | ||
|
d1801f5a5e | ||
|
317fa9382c | ||
|
e3ea1eef0d | ||
|
cc0556df4a | ||
|
0dddb28c32 | ||
|
46bd2a545f | ||
|
fbce85675d | ||
|
1ab89ae9bc | ||
|
55379f6926 | ||
|
48c78157ae | ||
|
fdf5bad886 | ||
|
b1d20ea747 | ||
|
d8c4d47bbc | ||
|
ee5271ee57 | ||
|
4adc56f74f | ||
|
4fe40942a6 | ||
|
2dc572f110 | ||
|
3307e90080 | ||
|
6b720c8cd2 | ||
|
76aa292beb |
30
README.md
30
README.md
@@ -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
45
debian/changelog
vendored
@@ -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.
|
||||
|
33
debian/tools/patchupdate.py
vendored
33
debian/tools/patchupdate.py
vendored
@@ -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:
|
||||
|
@@ -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
|
||||
|
@@ -1 +0,0 @@
|
||||
Fixes: RegOpenKeyExA, RegCloseKey and RegQueryValueExA should be hotpatchable
|
@@ -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
|
||||
|
@@ -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
|
||||
|
1
patches/advapi32-SetSecurityInfo/definition
Normal file
1
patches/advapi32-SetSecurityInfo/definition
Normal file
@@ -0,0 +1 @@
|
||||
Fixes: [38423] Fix the initialization of combined DACLs when the new DACL is empty
|
@@ -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
|
||||
|
@@ -1 +0,0 @@
|
||||
Fixes: Translate flags in LaunchINFSectionW
|
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -1 +0,0 @@
|
||||
Fixes: [35375] Support for LoadIconMetric
|
@@ -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
|
||||
|
@@ -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
|
||||
|
1
patches/comctl32-PROPSHEET_InsertPage/definition
Normal file
1
patches/comctl32-PROPSHEET_InsertPage/definition
Normal file
@@ -0,0 +1 @@
|
||||
Fixes: [25625] Add implementation for comctl32.PROPSHEET_InsertPage.
|
@@ -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
|
||||
|
@@ -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
Reference in New Issue
Block a user