From 7d496bf02cd41bdb4f51b030215bf94ec6a67922 Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Fri, 30 Apr 2021 17:50:37 -0500 Subject: [PATCH] Rebase against 2deb8c2825afcb88a9f106b73aa1f4da9253fb87. --- ...abling-of-EAX-support-in-the-registr.patch | 42 +++----- .../0022-dsound-Enable-EAX-by-default.patch | 8 +- ...ear-resampler-for-use-with-a-large-n.patch | 28 ++--- .../0042-kernel32-tests-Zigzag-test.patch | 12 +-- ...nt-CIF-reader-and-download-functions.patch | 20 ++-- ...user32-Improve-GetKeyboardLayoutList.patch | 100 ++++++++++-------- patches/patchinstall.sh | 4 +- ...02-shell32-Add-security-property-tab.patch | 12 ++- ...t-insert-paste-for-item-context-menu.patch | 38 +++---- staging/upstream-commit | 2 +- 10 files changed, 134 insertions(+), 132 deletions(-) diff --git a/patches/dsound-EAX/0019-dsound-Allow-disabling-of-EAX-support-in-the-registr.patch b/patches/dsound-EAX/0019-dsound-Allow-disabling-of-EAX-support-in-the-registr.patch index 09c29791..fb045e55 100644 --- a/patches/dsound-EAX/0019-dsound-Allow-disabling-of-EAX-support-in-the-registr.patch +++ b/patches/dsound-EAX/0019-dsound-Allow-disabling-of-EAX-support-in-the-registr.patch @@ -1,21 +1,21 @@ -From cdfc54a6363804cc8ee9146c3adbd51e431bcbf2 Mon Sep 17 00:00:00 2001 +From 4ff4b0b2c1a5aeabeec286dc76868acbccc8779d Mon Sep 17 00:00:00 2001 From: Sebastian Lackner Date: Sun, 5 Apr 2015 19:13:18 +0200 -Subject: dsound: Allow disabling of EAX support in the registry. +Subject: [PATCH] dsound: Allow disabling of EAX support in the registry. Based on a patch by Mark Harmstone. --- dlls/dsound/buffer.c | 16 ++++++---------- - dlls/dsound/dsound_main.c | 9 ++++++++- + dlls/dsound/dsound_main.c | 8 ++++++++ dlls/dsound/dsound_private.h | 2 ++ dlls/dsound/eax.c | 28 ++++++++++++++++++++++++++++ - 4 files changed, 44 insertions(+), 11 deletions(-) + 4 files changed, 44 insertions(+), 10 deletions(-) diff --git a/dlls/dsound/buffer.c b/dlls/dsound/buffer.c -index b763514..ca93972 100644 +index 926dbab1289..6393656c9fa 100644 --- a/dlls/dsound/buffer.c +++ b/dlls/dsound/buffer.c -@@ -35,6 +35,7 @@ +@@ -34,6 +34,7 @@ #include "dsconf.h" WINE_DEFAULT_DEBUG_CHANNEL(dsound); @@ -23,7 +23,7 @@ index b763514..ca93972 100644 /******************************************************************************* * IDirectSoundNotify -@@ -1329,16 +1330,11 @@ static HRESULT WINAPI IKsPropertySetImpl_QuerySupport(IKsPropertySet *iface, REF +@@ -1311,16 +1312,11 @@ static HRESULT WINAPI IKsPropertySetImpl_QuerySupport(IKsPropertySet *iface, REF TRACE("(%p,%s,%d,%p)\n",This,debugstr_guid(guidPropSet),dwPropID,pTypeSupport); @@ -46,31 +46,21 @@ index b763514..ca93972 100644 return E_PROP_ID_UNSUPPORTED; diff --git a/dlls/dsound/dsound_main.c b/dlls/dsound/dsound_main.c -index b349eb4..db2ca50 100644 +index fecb9489678..8b396a1939e 100644 --- a/dlls/dsound/dsound_main.c +++ b/dlls/dsound/dsound_main.c -@@ -94,8 +94,12 @@ WCHAR wine_vxd_drv[] = { 'w','i','n','e','m','m','.','v','x','d', 0 }; +@@ -93,6 +93,10 @@ const WCHAR wine_vxd_drv[] = L"winemm.vxd"; /* All default settings, you most likely don't want to touch these, see wiki on UsefulRegistryKeys */ int ds_hel_buflen = 32768 * 2; int ds_hq_buffers_max = 4; +BOOL ds_eax_enabled = FALSE; - static HINSTANCE instance; - ++ +#define IS_OPTION_TRUE(ch) \ + ((ch) == 'y' || (ch) == 'Y' || (ch) == 't' || (ch) == 'T' || (ch) == '1') -+ + /* * Get a config key from either the app-specific or the default config - */ -@@ -108,7 +112,6 @@ static inline DWORD get_config_key( HKEY defkey, HKEY appkey, const char *name, - return ERROR_FILE_NOT_FOUND; - } - -- - /* - * Setup the dsound options. - */ -@@ -149,11 +152,15 @@ void setup_dsound_options(void) +@@ -147,11 +151,15 @@ void setup_dsound_options(void) if (!get_config_key( hkey, appkey, "HQBuffersMax", buffer, MAX_PATH )) ds_hq_buffers_max = atoi(buffer); @@ -87,7 +77,7 @@ index b349eb4..db2ca50 100644 static const char * get_device_id(LPCGUID pGuid) diff --git a/dlls/dsound/dsound_private.h b/dlls/dsound/dsound_private.h -index 5a986ba..4e928a4 100644 +index bca2bf46601..47a42e62e7c 100644 --- a/dlls/dsound/dsound_private.h +++ b/dlls/dsound/dsound_private.h @@ -37,6 +37,7 @@ @@ -98,7 +88,7 @@ index 5a986ba..4e928a4 100644 /***************************************************************************** * Predeclare the interface implementation structures -@@ -230,6 +231,7 @@ LONG capped_refcount_dec(LONG *ref) DECLSPEC_HIDDEN; +@@ -228,6 +229,7 @@ LONG capped_refcount_dec(LONG *ref) DECLSPEC_HIDDEN; HRESULT DSOUND_FullDuplexCreate(REFIID riid, void **ppv) DECLSPEC_HIDDEN; /* eax.c */ @@ -107,7 +97,7 @@ index 5a986ba..4e928a4 100644 ULONG dwPropID, void *pInstanceData, ULONG cbInstanceData, void *pPropData, ULONG cbPropData, ULONG *pcbReturned) DECLSPEC_HIDDEN; diff --git a/dlls/dsound/eax.c b/dlls/dsound/eax.c -index e10156e..857f924 100644 +index ef802b95a7d..570207709f0 100644 --- a/dlls/dsound/eax.c +++ b/dlls/dsound/eax.c @@ -809,6 +809,28 @@ void free_eax_buffer(IDirectSoundBufferImpl *dsb) @@ -160,5 +150,5 @@ index e10156e..857f924 100644 buf->device->eax.using_eax = TRUE; -- -2.8.0 +2.30.2 diff --git a/patches/dsound-EAX/0022-dsound-Enable-EAX-by-default.patch b/patches/dsound-EAX/0022-dsound-Enable-EAX-by-default.patch index f816813b..90cb3b67 100644 --- a/patches/dsound-EAX/0022-dsound-Enable-EAX-by-default.patch +++ b/patches/dsound-EAX/0022-dsound-Enable-EAX-by-default.patch @@ -1,4 +1,4 @@ -From 25450e6cf073bde4f26fec40c59224087017f332 Mon Sep 17 00:00:00 2001 +From 173f555d0d4639122bd47d30310152263c1b27bf Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Fri, 1 Jan 2021 13:32:48 +1100 Subject: [PATCH] dsound: Enable EAX by default @@ -8,7 +8,7 @@ Subject: [PATCH] dsound: Enable EAX by default 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dlls/dsound/dsound_main.c b/dlls/dsound/dsound_main.c -index e12c2208199..bda9a446a08 100644 +index 8b396a1939e..44463992e92 100644 --- a/dlls/dsound/dsound_main.c +++ b/dlls/dsound/dsound_main.c @@ -93,7 +93,7 @@ const WCHAR wine_vxd_drv[] = L"winemm.vxd"; @@ -17,9 +17,9 @@ index e12c2208199..bda9a446a08 100644 int ds_hq_buffers_max = 4; -BOOL ds_eax_enabled = FALSE; +BOOL ds_eax_enabled = TRUE; - static HINSTANCE instance; #define IS_OPTION_TRUE(ch) \ + ((ch) == 'y' || (ch) == 'Y' || (ch) == 't' || (ch) == 'T' || (ch) == '1') -- -2.29.2 +2.30.2 diff --git a/patches/dsound-Fast_Mixer/0001-dsound-Add-a-linear-resampler-for-use-with-a-large-n.patch b/patches/dsound-Fast_Mixer/0001-dsound-Add-a-linear-resampler-for-use-with-a-large-n.patch index 4c5f9863..d169462b 100644 --- a/patches/dsound-Fast_Mixer/0001-dsound-Add-a-linear-resampler-for-use-with-a-large-n.patch +++ b/patches/dsound-Fast_Mixer/0001-dsound-Add-a-linear-resampler-for-use-with-a-large-n.patch @@ -1,28 +1,28 @@ -From fe24cfe8b8e99c4e41fc9d147d7815bce37d2fa0 Mon Sep 17 00:00:00 2001 +From cdbe11004fe8b7fb87fff18f2a458259be02fe2d Mon Sep 17 00:00:00 2001 From: "Alexander E. Patrakov" Date: Thu, 7 Aug 2014 17:15:00 -0600 -Subject: dsound: Add a linear resampler for use with a large number of mixing - buffers. (rev 2) +Subject: [PATCH] dsound: Add a linear resampler for use with a large number of + mixing buffers. (rev 2) --- - dlls/dsound/dsound_main.c | 5 +++++ + dlls/dsound/dsound_main.c | 5 ++++ dlls/dsound/dsound_private.h | 1 + - dlls/dsound/mixer.c | 48 +++++++++++++++++++++++++++++++++++++++++--- + dlls/dsound/mixer.c | 48 +++++++++++++++++++++++++++++++++--- 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/dlls/dsound/dsound_main.c b/dlls/dsound/dsound_main.c -index 112ce78..b349eb4 100644 +index f3bce6062fe..fecb9489678 100644 --- a/dlls/dsound/dsound_main.c +++ b/dlls/dsound/dsound_main.c -@@ -93,6 +93,7 @@ WCHAR wine_vxd_drv[] = { 'w','i','n','e','m','m','.','v','x','d', 0 }; +@@ -92,6 +92,7 @@ const WCHAR wine_vxd_drv[] = L"winemm.vxd"; /* All default settings, you most likely don't want to touch these, see wiki on UsefulRegistryKeys */ int ds_hel_buflen = 32768 * 2; +int ds_hq_buffers_max = 4; - static HINSTANCE instance; /* -@@ -145,10 +146,14 @@ void setup_dsound_options(void) + * Get a config key from either the app-specific or the default config +@@ -143,10 +144,14 @@ void setup_dsound_options(void) if (!get_config_key( hkey, appkey, "HelBuflen", buffer, MAX_PATH )) ds_hel_buflen = atoi(buffer); @@ -38,7 +38,7 @@ index 112ce78..b349eb4 100644 static const char * get_device_id(LPCGUID pGuid) diff --git a/dlls/dsound/dsound_private.h b/dlls/dsound/dsound_private.h -index b980453..b6bce1d 100644 +index bdb9ebee544..d154e67b0a0 100644 --- a/dlls/dsound/dsound_private.h +++ b/dlls/dsound/dsound_private.h @@ -35,6 +35,7 @@ @@ -50,10 +50,10 @@ index b980453..b6bce1d 100644 /***************************************************************************** * Predeclare the interface implementation structures diff --git a/dlls/dsound/mixer.c b/dlls/dsound/mixer.c -index dec8ffd..c358385 100644 +index a6402b09eff..28f32e9d092 100644 --- a/dlls/dsound/mixer.c +++ b/dlls/dsound/mixer.c -@@ -278,7 +278,47 @@ static UINT cp_fields_noresample(IDirectSoundBufferImpl *dsb, UINT count) +@@ -295,7 +295,47 @@ static UINT cp_fields_noresample(IDirectSoundBufferImpl *dsb, UINT count) return count; } @@ -102,7 +102,7 @@ index dec8ffd..c358385 100644 { UINT i, channel; UINT istride = dsb->pwfx->nBlockAlign; -@@ -349,9 +389,11 @@ static void cp_fields(IDirectSoundBufferImpl *dsb, UINT count, LONG64 *freqAccNu +@@ -374,9 +414,11 @@ static void cp_fields(IDirectSoundBufferImpl *dsb, UINT count, LONG64 *freqAccNu DWORD ipos, adv; if (dsb->freqAdjustNum == dsb->freqAdjustDen) @@ -117,5 +117,5 @@ index dec8ffd..c358385 100644 ipos = dsb->sec_mixpos + adv * dsb->pwfx->nBlockAlign; if (ipos >= dsb->buflen) { -- -2.8.0 +2.30.2 diff --git a/patches/eventfd_synchronization/0042-kernel32-tests-Zigzag-test.patch b/patches/eventfd_synchronization/0042-kernel32-tests-Zigzag-test.patch index c9fa2a1d..5f49eb2a 100644 --- a/patches/eventfd_synchronization/0042-kernel32-tests-Zigzag-test.patch +++ b/patches/eventfd_synchronization/0042-kernel32-tests-Zigzag-test.patch @@ -1,4 +1,4 @@ -From 22b05332c3dc04e44327931a307e899d9a59d074 Mon Sep 17 00:00:00 2001 +From c076b2fef32e83de8e1ee2bee7a4a4ad997fcfff Mon Sep 17 00:00:00 2001 From: Zebediah Figura Date: Tue, 26 Jun 2018 18:44:44 -0500 Subject: [PATCH] kernel32/tests: Zigzag test. @@ -9,11 +9,11 @@ The primary function is to check for races. The secondary function is to measure 1 file changed, 79 insertions(+) diff --git a/dlls/kernel32/tests/sync.c b/dlls/kernel32/tests/sync.c -index 42184d22517..82a236879e7 100644 +index 7df1b1406b4..666318cb2c3 100644 --- a/dlls/kernel32/tests/sync.c +++ b/dlls/kernel32/tests/sync.c -@@ -3123,6 +3123,84 @@ static void test_QueueUserAPC(void) - CloseHandle(thread); +@@ -3135,6 +3135,84 @@ static void test_QueueUserAPC(void) + ok( ret == WAIT_OBJECT_0, "SleepEx returned %u\n", ret); } +static int zigzag_state, zigzag_count[2], zigzag_stop; @@ -97,7 +97,7 @@ index 42184d22517..82a236879e7 100644 START_TEST(sync) { char **argv; -@@ -3188,5 +3266,6 @@ START_TEST(sync) +@@ -3200,5 +3278,6 @@ START_TEST(sync) test_srwlock_example(); test_alertable_wait(); test_apc_deadlock(); @@ -105,5 +105,5 @@ index 42184d22517..82a236879e7 100644 test_crit_section(); } -- -2.30.1 +2.30.2 diff --git a/patches/inseng-Implementation/0001-inseng-Implement-CIF-reader-and-download-functions.patch b/patches/inseng-Implementation/0001-inseng-Implement-CIF-reader-and-download-functions.patch index bbb28174..1a1e2aa1 100644 --- a/patches/inseng-Implementation/0001-inseng-Implement-CIF-reader-and-download-functions.patch +++ b/patches/inseng-Implementation/0001-inseng-Implement-CIF-reader-and-download-functions.patch @@ -1,4 +1,4 @@ -From 10fbfd11d5fd45b0e84c1b987dab7831e8567ece Mon Sep 17 00:00:00 2001 +From cc5f08165c512cecaafc19bb4157d2bea31f4770 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Mon, 5 Sep 2016 15:31:29 +0200 Subject: [PATCH] inseng: Implement CIF reader and download functions. @@ -2249,7 +2249,7 @@ index 82c0b4d5fe1..7ae46fad3a7 100644 +@ stdcall GetICifRWFileFromFile(ptr str) @ stub PurgeDownloadDirectory diff --git a/dlls/inseng/inseng_main.c b/dlls/inseng/inseng_main.c -index c9a5988478c..c465e2d3ed7 100644 +index 2c95a2e72bd..6a926ccb379 100644 --- a/dlls/inseng/inseng_main.c +++ b/dlls/inseng/inseng_main.c @@ -2,6 +2,7 @@ @@ -2260,7 +2260,7 @@ index c9a5988478c..c465e2d3ed7 100644 * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public -@@ -28,19 +29,70 @@ +@@ -28,17 +29,68 @@ #include "winuser.h" #include "ole2.h" #include "rpcproxy.h" @@ -2276,8 +2276,6 @@ index c9a5988478c..c465e2d3ed7 100644 WINE_DEFAULT_DEBUG_CHANNEL(inseng); - static HINSTANCE instance; - +enum thread_operation +{ + OP_DOWNLOAD, @@ -2332,7 +2330,7 @@ index c9a5988478c..c465e2d3ed7 100644 }; static inline InstallEngine *impl_from_IInstallEngine2(IInstallEngine2 *iface) -@@ -48,6 +100,250 @@ static inline InstallEngine *impl_from_IInstallEngine2(IInstallEngine2 *iface) +@@ -46,6 +98,250 @@ static inline InstallEngine *impl_from_IInstallEngine2(IInstallEngine2 *iface) return CONTAINING_RECORD(iface, InstallEngine, IInstallEngine2_iface); } @@ -2583,7 +2581,7 @@ index c9a5988478c..c465e2d3ed7 100644 static HRESULT WINAPI InstallEngine_QueryInterface(IInstallEngine2 *iface, REFIID riid, void **ppv) { InstallEngine *This = impl_from_IInstallEngine2(iface); -@@ -61,13 +357,16 @@ static HRESULT WINAPI InstallEngine_QueryInterface(IInstallEngine2 *iface, REFII +@@ -59,13 +355,16 @@ static HRESULT WINAPI InstallEngine_QueryInterface(IInstallEngine2 *iface, REFII }else if(IsEqualGUID(&IID_IInstallEngine2, riid)) { TRACE("(%p)->(IID_IInstallEngine2 %p)\n", This, ppv); *ppv = &This->IInstallEngine2_iface; @@ -2602,7 +2600,7 @@ index c9a5988478c..c465e2d3ed7 100644 return S_OK; } -@@ -88,181 +387,726 @@ static ULONG WINAPI InstallEngine_Release(IInstallEngine2 *iface) +@@ -86,181 +385,726 @@ static ULONG WINAPI InstallEngine_Release(IInstallEngine2 *iface) TRACE("(%p) ref=%d\n", This, ref); @@ -3365,7 +3363,7 @@ index c9a5988478c..c465e2d3ed7 100644 InstallEngine_QueryInterface, InstallEngine_AddRef, InstallEngine_Release, -@@ -292,6 +1136,70 @@ static const IInstallEngine2Vtbl InstallEngine2Vtbl = { +@@ -290,6 +1134,70 @@ static const IInstallEngine2Vtbl InstallEngine2Vtbl = { InstallEngine2_GetICifFile }; @@ -3436,7 +3434,7 @@ index c9a5988478c..c465e2d3ed7 100644 static HRESULT WINAPI ClassFactory_QueryInterface(IClassFactory *iface, REFIID riid, void **ppv) { *ppv = NULL; -@@ -336,12 +1244,14 @@ static HRESULT WINAPI InstallEngineCF_CreateInstance(IClassFactory *iface, IUnkn +@@ -334,12 +1242,14 @@ static HRESULT WINAPI InstallEngineCF_CreateInstance(IClassFactory *iface, IUnkn TRACE("(%p %s %p)\n", outer, debugstr_guid(riid), ppv); @@ -3864,5 +3862,5 @@ index 8a3f4c4d270..82927418a99 100644 +cpp_quote("HRESULT WINAPI GetICifFileFromFile(ICifFile **, const char *);") +cpp_quote("HRESULT WINAPI GetICifRWFileFromFile(ICifRWFile **, const char *);") -- -2.20.1 +2.30.2 diff --git a/patches/loader-KeyboardLayouts/0002-user32-Improve-GetKeyboardLayoutList.patch b/patches/loader-KeyboardLayouts/0002-user32-Improve-GetKeyboardLayoutList.patch index 0b5e45c3..6f442c58 100644 --- a/patches/loader-KeyboardLayouts/0002-user32-Improve-GetKeyboardLayoutList.patch +++ b/patches/loader-KeyboardLayouts/0002-user32-Improve-GetKeyboardLayoutList.patch @@ -1,64 +1,76 @@ -From dd0c922c02e793aba906cfad855c2474a3c2fe3b Mon Sep 17 00:00:00 2001 +From 0572bef41d224ebb69c6c3fd647bddf844a3a29d Mon Sep 17 00:00:00 2001 From: Alistair Leslie-Hughes Date: Tue, 9 Jul 2019 14:13:28 +1000 -Subject: [PATCH] user32: Improve GetKeyboardLayoutList +Subject: [PATCH] user32: Do not enumerate the registry in + GetKeyboardLayoutList(). This function returns the current list of *installed* Keyboard layouts not the complete list from the registry. --- - dlls/user32/driver.c | 26 -------------------------- + dlls/user32/input.c | 32 +++----------------------------- dlls/user32/tests/input.c | 35 +++++++++++++++++++++++++++++++++++ - 2 files changed, 35 insertions(+), 26 deletions(-) + 2 files changed, 38 insertions(+), 29 deletions(-) -diff --git a/dlls/user32/driver.c b/dlls/user32/driver.c -index 7ac77141696..56009667b00 100644 ---- a/dlls/user32/driver.c -+++ b/dlls/user32/driver.c -@@ -198,8 +198,6 @@ static void CDECL nulldrv_Beep(void) - - static UINT CDECL nulldrv_GetKeyboardLayoutList( INT size, HKL *layouts ) +diff --git a/dlls/user32/input.c b/dlls/user32/input.c +index 97be83369d9..42145c13105 100644 +--- a/dlls/user32/input.c ++++ b/dlls/user32/input.c +@@ -1336,9 +1336,7 @@ BOOL WINAPI BlockInput(BOOL fBlockIt) + */ + UINT WINAPI GetKeyboardLayoutList( INT size, HKL *layouts ) { -- HKEY hKeyKeyboard; -- DWORD rc; - INT count = 0; - ULONG_PTR baselayout; - LANGID langid; -@@ -211,30 +209,6 @@ static UINT CDECL nulldrv_GetKeyboardLayoutList( INT size, HKL *layouts ) - else - baselayout |= baselayout << 16; +- WCHAR klid[KL_NAMELENGTH], value[5]; +- DWORD value_size, count, tmp, i = 0; +- HKEY hkey; ++ DWORD count; + HKL layout; -- /* Enumerate the Registry */ -- rc = RegOpenKeyW(HKEY_LOCAL_MACHINE,L"System\\CurrentControlSet\\Control\\Keyboard Layouts",&hKeyKeyboard); -- if (rc == ERROR_SUCCESS) + TRACE_(keyboard)( "size %d, layouts %p.\n", size, layouts ); +@@ -1346,37 +1344,13 @@ UINT WINAPI GetKeyboardLayoutList( INT size, HKL *layouts ) + if ((count = USER_Driver->pGetKeyboardLayoutList( size, layouts )) != ~0) return count; + + layout = get_locale_kbd_layout(); +- count = 0; + +- count++; + if (size && layouts) + { +- layouts[count - 1] = layout; +- if (count == size) return count; ++ layouts[0] = layout; + } + +- if (!RegOpenKeyW( HKEY_LOCAL_MACHINE, L"System\\CurrentControlSet\\Control\\Keyboard Layouts", &hkey )) - { -- do { -- WCHAR szKeyName[9]; -- HKL layout; -- rc = RegEnumKeyW(hKeyKeyboard, count, szKeyName, 9); -- if (rc == ERROR_SUCCESS) +- while (!RegEnumKeyW( hkey, i++, klid, ARRAY_SIZE(klid) )) +- { +- tmp = wcstoul( klid, NULL, 16 ); +- value_size = sizeof(value); +- if (!RegGetValueW( hkey, klid, L"Layout Id", RRF_RT_REG_SZ, NULL, (void *)&value, &value_size )) +- tmp = MAKELONG( LOWORD( tmp ), 0xf000 | (wcstoul( value, NULL, 16 ) & 0xfff) ); +- +- if (layout == UlongToHandle( tmp )) continue; +- +- count++; +- if (size && layouts) - { -- layout = (HKL)(ULONG_PTR)wcstoul(szKeyName,NULL,16); -- if (baselayout != 0 && layout == (HKL)baselayout) -- baselayout = 0; /* found in the registry do not add again */ -- if (size && layouts) -- { -- if (count >= size ) break; -- layouts[count] = layout; -- } -- count ++; +- layouts[count - 1] = UlongToHandle( tmp ); +- if (count == size) break; - } -- } while (rc == ERROR_SUCCESS); -- RegCloseKey(hKeyKeyboard); +- } +- RegCloseKey( hkey ); - } - - /* make sure our base layout is on the list */ - if (baselayout != 0) - { +- return count; ++ return 1; + } + + diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c -index 2397b4104e4..a5c8521c0e9 100644 +index c4c361575cd..070c22a4349 100644 --- a/dlls/user32/tests/input.c +++ b/dlls/user32/tests/input.c -@@ -4322,6 +4322,40 @@ static void test_SendInput(void) +@@ -4363,6 +4363,40 @@ static void test_SendInput(void) DestroyWindow( hwnd ); } @@ -99,7 +111,7 @@ index 2397b4104e4..a5c8521c0e9 100644 START_TEST(input) { char **argv; -@@ -4364,6 +4398,7 @@ START_TEST(input) +@@ -4405,6 +4439,7 @@ START_TEST(input) test_GetRawInputBuffer(); test_RegisterRawInputDevices(); test_rawinput(argv[0]); diff --git a/patches/patchinstall.sh b/patches/patchinstall.sh index 32881140..183ce988 100755 --- a/patches/patchinstall.sh +++ b/patches/patchinstall.sh @@ -51,7 +51,7 @@ usage() # Get the upstream commit sha upstream_commit() { - echo "ca03802a456e7cf4efd834edfeddc483ac72e4b5" + echo "2deb8c2825afcb88a9f106b73aa1f4da9253fb87" } # Show version information @@ -2661,7 +2661,7 @@ fi # | * [#47439] loader: Add Keyboard Layouts registry enteries. # | # | Modified files: -# | * dlls/user32/driver.c, dlls/user32/tests/input.c, loader/wine.inf.in +# | * dlls/user32/input.c, dlls/user32/tests/input.c, loader/wine.inf.in # | if test "$enable_loader_KeyboardLayouts" -eq 1; then patch_apply loader-KeyboardLayouts/0001-loader-Add-Keyboard-Layouts-registry-enteries.patch diff --git a/patches/shell32-ACE_Viewer/0002-shell32-Add-security-property-tab.patch b/patches/shell32-ACE_Viewer/0002-shell32-Add-security-property-tab.patch index ea97cdc8..18edc93d 100644 --- a/patches/shell32-ACE_Viewer/0002-shell32-Add-security-property-tab.patch +++ b/patches/shell32-ACE_Viewer/0002-shell32-Add-security-property-tab.patch @@ -1,4 +1,4 @@ -From 464489a607fc03a7a157e779c0c152e833cfab33 Mon Sep 17 00:00:00 2001 +From 407cf938ab003880cc74273e172fbce2b1eec539 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Mon, 8 May 2017 23:33:45 +0200 Subject: [PATCH] shell32: Add security property tab. @@ -62,10 +62,10 @@ index 1324a5449a3..3fc9d205c25 100644 /* FIXME: Some will be unused until desktop.ini support is implemented */ IDS_PROGRAMS "Programs" diff --git a/dlls/shell32/shlview_cmenu.c b/dlls/shell32/shlview_cmenu.c -index 04ac0b6fd3c..3ea61dd730d 100644 +index e7c1cf16e10..b3bcd37fa56 100644 --- a/dlls/shell32/shlview_cmenu.c +++ b/dlls/shell32/shlview_cmenu.c -@@ -39,12 +39,131 @@ +@@ -39,14 +39,133 @@ #include "shresdef.h" #include "shlwapi.h" @@ -80,6 +80,8 @@ index 04ac0b6fd3c..3ea61dd730d 100644 + WINE_DEFAULT_DEBUG_CHANNEL(shell); + #define FCIDM_BASE 0x7000 + +/* According to https://blogs.msdn.microsoft.com/oldnewthing/20070726-00/?p=25833 */ +static const SI_ACCESS access_rights_files[] = +{ @@ -197,7 +199,7 @@ index 04ac0b6fd3c..3ea61dd730d 100644 typedef struct { IContextMenu3 IContextMenu3_iface; -@@ -615,6 +734,269 @@ error: +@@ -649,6 +768,269 @@ error: heap_free(props); } @@ -467,7 +469,7 @@ index 04ac0b6fd3c..3ea61dd730d 100644 #define MAX_PROP_PAGES 99 static void DoOpenProperties(ContextMenu *This, HWND hwnd) -@@ -697,6 +1079,7 @@ static void DoOpenProperties(ContextMenu *This, HWND hwnd) +@@ -731,6 +1113,7 @@ static void DoOpenProperties(ContextMenu *This, HWND hwnd) if (SUCCEEDED(ret)) { init_file_properties_pages(lpDo, Properties_AddPropSheetCallback, (LPARAM)&psh); diff --git a/patches/shell32-Context_Menu/0003-shell32-Implement-insert-paste-for-item-context-menu.patch b/patches/shell32-Context_Menu/0003-shell32-Implement-insert-paste-for-item-context-menu.patch index 8ad94f62..ef0acf70 100644 --- a/patches/shell32-Context_Menu/0003-shell32-Implement-insert-paste-for-item-context-menu.patch +++ b/patches/shell32-Context_Menu/0003-shell32-Implement-insert-paste-for-item-context-menu.patch @@ -1,15 +1,15 @@ -From 103583fcc07412ede80a00edc1f07a9d0ada28e3 Mon Sep 17 00:00:00 2001 +From 9272578ec7000b28be8e1454f4e2dd2ee7017146 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20M=C3=BCller?= Date: Sat, 2 Apr 2016 01:39:40 +0200 -Subject: [PATCH 3/7] shell32: Implement insert/paste for item context menus. +Subject: [PATCH] shell32: Implement insert/paste for item context menus. --- dlls/shell32/shell32.rc | 1 + - dlls/shell32/shlview_cmenu.c | 64 +++++++++++++++++++++++++++++++++++++++----- + dlls/shell32/shlview_cmenu.c | 64 ++++++++++++++++++++++++++++++++---- 2 files changed, 58 insertions(+), 7 deletions(-) diff --git a/dlls/shell32/shell32.rc b/dlls/shell32/shell32.rc -index 6585416..0c75786 100644 +index ff859381593..e7324c9af5e 100644 --- a/dlls/shell32/shell32.rc +++ b/dlls/shell32/shell32.rc @@ -99,6 +99,7 @@ BEGIN @@ -21,10 +21,10 @@ index 6585416..0c75786 100644 MENUITEM "Create &Link", FCIDM_SHVIEW_CREATELINK MENUITEM "&Delete", FCIDM_SHVIEW_DELETE diff --git a/dlls/shell32/shlview_cmenu.c b/dlls/shell32/shlview_cmenu.c -index 677bb3f..0394da3 100644 +index f8b6a8572de..0e72e13c80f 100644 --- a/dlls/shell32/shlview_cmenu.c +++ b/dlls/shell32/shlview_cmenu.c -@@ -59,6 +59,8 @@ typedef struct +@@ -66,6 +66,8 @@ typedef struct BOOL desktop; } ContextMenu; @@ -33,8 +33,8 @@ index 677bb3f..0394da3 100644 static inline ContextMenu *impl_from_IContextMenu3(IContextMenu3 *iface) { return CONTAINING_RECORD(iface, ContextMenu, IContextMenu3_iface); -@@ -123,6 +125,30 @@ static ULONG WINAPI ContextMenu_Release(IContextMenu3 *iface) - return ref; +@@ -175,6 +177,30 @@ static UINT max_menu_id(HMENU hmenu, UINT offset, UINT last) + return max_id; } +static BOOL CheckClipboard(void) @@ -64,7 +64,7 @@ index 677bb3f..0394da3 100644 static HRESULT WINAPI ItemMenu_QueryContextMenu( IContextMenu3 *iface, HMENU hmenu, -@@ -133,6 +159,7 @@ static HRESULT WINAPI ItemMenu_QueryContextMenu( +@@ -185,6 +211,7 @@ static HRESULT WINAPI ItemMenu_QueryContextMenu( { ContextMenu *This = impl_from_IContextMenu3(iface); INT uIDMax; @@ -72,7 +72,7 @@ index 677bb3f..0394da3 100644 TRACE("(%p)->(%p %d 0x%x 0x%x 0x%x )\n", This, hmenu, indexMenu, idCmdFirst, idCmdLast, uFlags); -@@ -169,6 +196,9 @@ static HRESULT WINAPI ItemMenu_QueryContextMenu( +@@ -222,6 +249,9 @@ static HRESULT WINAPI ItemMenu_QueryContextMenu( SetMenuDefaultItem(hmenu, 0, MF_BYPOSITION); @@ -80,9 +80,9 @@ index 677bb3f..0394da3 100644 + IShellFolder_GetAttributesOf(This->parent, 1, (LPCITEMIDLIST*)This->apidl, &attr); + if(uFlags & ~CMF_CANRENAME) - RemoveMenu(hmenu, FCIDM_SHVIEW_RENAME, MF_BYCOMMAND); + RemoveMenu(hmenu, FCIDM_SHVIEW_RENAME - FCIDM_BASE + idCmdFirst, MF_BYCOMMAND); else -@@ -179,16 +209,14 @@ static HRESULT WINAPI ItemMenu_QueryContextMenu( +@@ -232,16 +262,14 @@ static HRESULT WINAPI ItemMenu_QueryContextMenu( if (!This->apidl || This->cidl > 1) enable |= MFS_DISABLED; else @@ -93,16 +93,16 @@ index 677bb3f..0394da3 100644 enable |= (attr & SFGAO_CANRENAME) ? MFS_ENABLED : MFS_DISABLED; - } - EnableMenuItem(hmenu, FCIDM_SHVIEW_RENAME, enable); + EnableMenuItem(hmenu, FCIDM_SHVIEW_RENAME - FCIDM_BASE + idCmdFirst, enable); } + if ((attr & (SFGAO_FILESYSTEM|SFGAO_FOLDER)) != (SFGAO_FILESYSTEM|SFGAO_FOLDER) || !CheckClipboard()) -+ RemoveMenu(hmenu, FCIDM_SHVIEW_INSERT + idCmdFirst, MF_BYCOMMAND); ++ RemoveMenu(hmenu, FCIDM_SHVIEW_INSERT - FCIDM_BASE + idCmdFirst, MF_BYCOMMAND); + return MAKE_HRESULT(SEVERITY_SUCCESS, 0, uIDMax-idCmdFirst); } return MAKE_HRESULT(SEVERITY_SUCCESS, 0, 0); -@@ -447,6 +475,10 @@ static HRESULT WINAPI ItemMenu_InvokeCommand( +@@ -814,6 +842,10 @@ static HRESULT WINAPI ItemMenu_InvokeCommand( TRACE("Verb FCIDM_SHVIEW_CUT\n"); DoCopyOrCut(This, lpcmi->hwnd, TRUE); break; @@ -113,7 +113,7 @@ index 677bb3f..0394da3 100644 case FCIDM_SHVIEW_PROPERTIES: TRACE("Verb FCIDM_SHVIEW_PROPERTIES\n"); DoOpenProperties(This, lpcmi->hwnd); -@@ -478,6 +510,7 @@ static HRESULT WINAPI ItemMenu_GetCommandString(IContextMenu3 *iface, UINT_PTR c +@@ -845,6 +877,7 @@ static HRESULT WINAPI ItemMenu_GetCommandString(IContextMenu3 *iface, UINT_PTR c static const WCHAR exploreW[] = {'e','x','p','l','o','r','e',0}; static const WCHAR cutW[] = {'c','u','t',0}; static const WCHAR copyW[] = {'c','o','p','y',0}; @@ -121,7 +121,7 @@ index 677bb3f..0394da3 100644 static const WCHAR linkW[] = {'l','i','n','k',0}; static const WCHAR deleteW[] = {'d','e','l','e','t','e',0}; static const WCHAR propertiesW[] = {'p','r','o','p','e','r','t','i','e','s',0}; -@@ -511,6 +544,9 @@ static HRESULT WINAPI ItemMenu_GetCommandString(IContextMenu3 *iface, UINT_PTR c +@@ -878,6 +911,9 @@ static HRESULT WINAPI ItemMenu_GetCommandString(IContextMenu3 *iface, UINT_PTR c case FCIDM_SHVIEW_COPY: cmdW = copyW; break; @@ -131,7 +131,7 @@ index 677bb3f..0394da3 100644 case FCIDM_SHVIEW_CREATELINK: cmdW = linkW; break; -@@ -726,8 +762,22 @@ static BOOL DoPaste(ContextMenu *This) +@@ -1177,8 +1213,22 @@ static BOOL DoPaste(ContextMenu *This) if (psfFrom) { /* get source and destination shellfolder */ @@ -157,5 +157,5 @@ index 677bb3f..0394da3 100644 /* do the copy/move */ -- -2.7.4 +2.30.2 diff --git a/staging/upstream-commit b/staging/upstream-commit index 13b48efc..2bbe0c81 100644 --- a/staging/upstream-commit +++ b/staging/upstream-commit @@ -1 +1 @@ -ca03802a456e7cf4efd834edfeddc483ac72e4b5 +2deb8c2825afcb88a9f106b73aa1f4da9253fb87