Compare commits

..

38 Commits
v7.6 ... v7.8

Author SHA1 Message Date
Alistair Leslie-Hughes
8382473334 Release v7.8 2022-05-07 16:23:27 +10:00
Alistair Leslie-Hughes
699309db0f Rebase against 3ded60bd1654dc689d24a23305f4a93acce3a6f2. 2022-05-07 16:07:11 +10:00
Alistair Leslie-Hughes
828a61e0bb Updated sapi-iteration-tokens patchset
Fixes: Bless Unlimited Launcher.
2022-05-06 11:52:22 +10:00
Alistair Leslie-Hughes
6a9fb5a923 Rebase against 7de36f8e98b2cbbdcc360bdba96a5fe83e815d1a. 2022-05-06 10:48:57 +10:00
Alistair Leslie-Hughes
38391a1d70 sapi-iteration-tokens: Updated patchset 2022-05-05 15:02:19 +10:00
Alistair Leslie-Hughes
486d9f3f74 Rebase against 1c4131ba788579f511318270410734d73575caa6. 2022-05-05 09:02:49 +10:00
Alistair Leslie-Hughes
9c37968a29 Added user32-alttab-focus patchset 2022-05-04 12:28:16 +10:00
Alistair Leslie-Hughes
0f597ea71c Rebase against 16901659588c14b8336e5b2d1a5ace985c72e1f8. 2022-05-04 08:18:03 +10:00
Alistair Leslie-Hughes
cd7567fdc1 Rebase against f91f4348356285ede39915f0d10ffae11c4871e5. 2022-05-03 09:02:07 +10:00
Alistair Leslie-Hughes
d7507fbe00 Added kernelbase-ResolveLocaleName patchset 2022-04-29 14:44:32 +10:00
Zebediah Figura
50067e77d5 Rebase against 64b96eec7d0aea470f897a3ed0ac9e1b3a680cc5. 2022-04-28 23:36:32 -05:00
Zebediah Figura
ad3c7cfc9a winedevice-Default_Drivers: Remove dependency on ntoskrnl-Stubs. 2022-04-28 18:29:34 -05:00
Zebediah Figura
5117eec7bf ntoskrnl-Stubs: Remove patches.
No known application is helped by these patches. If one is found they will be trivial to rewrite.
2022-04-27 18:54:56 -05:00
Zebediah Figura
8a35065016 api-ms-win-Stub_DLLs: Remove ext-ms-win-* patches.
No known application is helped by these patches. If one is found they will be trivial to rewrite.
2022-04-27 18:54:51 -05:00
Zebediah Figura
55c6cecd5c api-ms-win-Stub_DLLs: Remove the patch for iertutil.811.
No known application is helped by this patch. If one is found it will be trivial to rewrite.
2022-04-27 18:51:44 -05:00
Zebediah Figura
7de1ccb1fa Rebase against 2e9a72759cc8508d1ddb7be5d813fdd7bc64e6a5. 2022-04-27 16:34:32 -05:00
Zebediah Figura
b54ac2f2b2 winex11-CandidateWindowPos: Directly use win32u for user functions. 2022-04-26 18:02:07 -05:00
Zebediah Figura
9e823e7f3e winex11-CandidateWindowPos: Rebase and re-enable. 2022-04-26 17:50:51 -05:00
Zebediah Figura
87212e802d Rebase against 4ec67b7a6447dfc4af8c03c141c600b41b90ef53. 2022-04-26 17:50:51 -05:00
Zebediah Figura
91cb025138 user32-rawinput-mouse: Use malloc() instead of HeapAlloc() in winex11. 2022-04-25 23:09:31 -05:00
Zebediah Figura
d589a0bc44 user32-Mouse_Message_Hwnd: Use malloc() instead of HeapAlloc() in winex11. 2022-04-25 23:09:30 -05:00
Zebediah Figura
7b5a66b852 winex11-_NET_ACTIVE_WINDOW: Avoid another user32 API. 2022-04-25 23:08:57 -05:00
Alistair Leslie-Hughes
9d853b7c44 Rebase against 7af93f497c3e71f69511743f42b86b2ef5e13b32. 2022-04-26 13:50:30 +10:00
Alistair Leslie-Hughes
9df73ee345 Release v7.7 2022-04-23 16:16:02 +10:00
Zebediah Figura
6b4b9f1b5a Rebase against 43fe980818d93e8f407eb6447aaf7eb4381c3cee. 2022-04-20 15:13:50 -05:00
Zebediah Figura
9e6939027d Rebase against 6d4ec1255acceec7152ed98764ee29991ac04f10. 2022-04-19 16:09:12 -05:00
Zebediah Figura
5147239513 user32-rawinput-mouse: Directly use win32u for user functions. 2022-04-15 20:48:32 -05:00
Zebediah Figura
fff59d624e user32-Mouse_Message_Hwnd: Delete a stray spacing change. 2022-04-15 20:48:32 -05:00
Zebediah Figura
2aab2d521a Rebase against e254680ed15f43409114881d8ed613aa4b0de944. 2022-04-15 19:33:13 -05:00
Zebediah Figura
ccce92e0d3 winex11-XEMBED: Directly use win32u for user functions. 2022-04-14 17:47:44 -05:00
Zebediah Figura
cc4ecadad0 winex11-WM_WINDOWPOSCHANGING: Directly use win32u for user functions. 2022-04-14 17:45:48 -05:00
Zebediah Figura
0b3309a201 Rebase against 121851955e697b3158cbcf31801164eb627e78e9. 2022-04-14 17:17:08 -05:00
Zebediah Figura
9ddf82d860 Rebase against 07f22e20d73ce0a3c758d331400e765795d675a0. 2022-04-14 11:35:35 -05:00
Zebediah Figura
de2f0fee6f winex11-CandidateWindowPos: Partially rebase, and document the reason for disabling. 2022-04-12 17:45:41 -05:00
Zebediah Figura
94f94f3843 user32-Mouse_Message_Hwnd: Directly use win32u for GDI functions. 2022-04-12 17:26:44 -05:00
Zebediah Figura
1c911ccb63 user32-Mouse_Message_Hwnd: Avoid adding trailing whitespace.
Spotted by Dmitry Timoshkov.
2022-04-12 17:25:17 -05:00
Zebediah Figura
53fb22354e widl-SLTG_Typelib_Support: Correctly rebase against 4bc52e3324a505e6f12652a526cdbd09c24e7afc. 2022-04-12 17:23:45 -05:00
Zebediah Figura
1e406a4196 Rebase against ae9266992a54db660da08f881798c69c55033d9f. 2022-04-12 17:20:41 -05:00
52 changed files with 642 additions and 2239 deletions

View File

@@ -1,17 +1,18 @@
From 7d77edaea3c4ba8067e4b73034df5c58940daebc Mon Sep 17 00:00:00 2001
From a9cf27a493697c97249ce526483d25c871c053c4 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sun, 1 Jun 2014 22:51:32 +0200
Subject: winex11.drv: Indicate direct rendering through OpenGL extension
Subject: [PATCH] winex11.drv: Indicate direct rendering through OpenGL
extension
---
dlls/winex11.drv/opengl.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
dlls/winex11.drv/opengl.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c
index 71af3db..966d32d 100644
index 92555841f71..71e7ecbcf7c 100644
--- a/dlls/winex11.drv/opengl.c
+++ b/dlls/winex11.drv/opengl.c
@@ -440,6 +440,7 @@ static int GLXErrorHandler(Display *dpy,
@@ -410,6 +410,7 @@ static int GLXErrorHandler(Display *dpy, XErrorEvent *event, void *arg)
static BOOL X11DRV_WineGL_InitOpenglInfo(void)
{
static const char legacy_extensions[] = " WGL_EXT_extensions_string WGL_EXT_swap_control";
@@ -19,14 +20,14 @@ index 71af3db..966d32d 100644
int screen = DefaultScreen(gdi_display);
Window win = 0, root = 0;
@@ -493,16 +494,18 @@ static BOOL X11DRV_WineGL_InitOpenglInfo
@@ -465,16 +466,18 @@ static BOOL X11DRV_WineGL_InitOpenglInfo(void)
}
gl_renderer = (const char *)opengl_funcs.gl.p_glGetString(GL_RENDERER);
gl_version = (const char *)opengl_funcs.gl.p_glGetString(GL_VERSION);
+ glx_direct = pglXIsDirect(gdi_display, ctx);
str = (const char *) opengl_funcs.gl.p_glGetString(GL_EXTENSIONS);
- glExtensions = HeapAlloc(GetProcessHeap(), 0, strlen(str)+sizeof(legacy_extensions));
+ glExtensions = HeapAlloc(GetProcessHeap(), 0, strlen(str)+sizeof(legacy_extensions)+sizeof(direct_extension));
- glExtensions = malloc( strlen(str) + sizeof(legacy_extensions) );
+ glExtensions = malloc( strlen(str)+sizeof(legacy_extensions)+sizeof(direct_extension) );
strcpy(glExtensions, str);
strcat(glExtensions, legacy_extensions);
+ if (glx_direct)
@@ -41,4 +42,5 @@ index 71af3db..966d32d 100644
TRACE("GL version : %s.\n", gl_version);
TRACE("GL renderer : %s.\n", gl_renderer);
--
1.7.9.5
2.35.1

View File

@@ -1,94 +0,0 @@
From 49de5f50cf6eb5a3c4ab07be05ca25f96991ab8a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sun, 17 Jan 2016 17:07:35 +0100
Subject: [PATCH] ext-ms-win-xaml-pal-l1-1-0: Add dll and add stub for
XamlBehaviorEnabled.
---
configure.ac | 1 +
dlls/ext-ms-win-xaml-pal-l1-1-0/Makefile.in | 4 +++
.../ext-ms-win-xaml-pal-l1-1-0.spec | 6 ++++
dlls/ext-ms-win-xaml-pal-l1-1-0/main.c | 35 +++++++++++++++++++
4 files changed, 46 insertions(+)
create mode 100644 dlls/ext-ms-win-xaml-pal-l1-1-0/Makefile.in
create mode 100644 dlls/ext-ms-win-xaml-pal-l1-1-0/ext-ms-win-xaml-pal-l1-1-0.spec
create mode 100644 dlls/ext-ms-win-xaml-pal-l1-1-0/main.c
diff --git a/configure.ac b/configure.ac
index 7fb2da63a0b..e9ea24f2680 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2572,6 +2572,7 @@ WINE_CONFIG_MAKEFILE(dlls/evr)
WINE_CONFIG_MAKEFILE(dlls/evr/tests)
WINE_CONFIG_MAKEFILE(dlls/explorerframe)
WINE_CONFIG_MAKEFILE(dlls/explorerframe/tests)
+WINE_CONFIG_MAKEFILE(dlls/ext-ms-win-xaml-pal-l1-1-0)
WINE_CONFIG_MAKEFILE(dlls/faultrep)
WINE_CONFIG_MAKEFILE(dlls/faultrep/tests)
WINE_CONFIG_MAKEFILE(dlls/feclient)
diff --git a/dlls/ext-ms-win-xaml-pal-l1-1-0/Makefile.in b/dlls/ext-ms-win-xaml-pal-l1-1-0/Makefile.in
new file mode 100644
index 00000000000..6382d85272b
--- /dev/null
+++ b/dlls/ext-ms-win-xaml-pal-l1-1-0/Makefile.in
@@ -0,0 +1,4 @@
+MODULE = ext-ms-win-xaml-pal-l1-1-0.dll
+
+C_SRCS = \
+ main.c
diff --git a/dlls/ext-ms-win-xaml-pal-l1-1-0/ext-ms-win-xaml-pal-l1-1-0.spec b/dlls/ext-ms-win-xaml-pal-l1-1-0/ext-ms-win-xaml-pal-l1-1-0.spec
new file mode 100644
index 00000000000..c167f5e753e
--- /dev/null
+++ b/dlls/ext-ms-win-xaml-pal-l1-1-0/ext-ms-win-xaml-pal-l1-1-0.spec
@@ -0,0 +1,6 @@
+@ stub CreatePhoneAppBarProxy
+@ stub CreateWinTextBoxProxy
+@ stub GetThemeServices
+@ stdcall XamlBehaviorEnabled(ptr)
+@ stub XamlPalInitialize
+@ stub XamlPalUninitialize
diff --git a/dlls/ext-ms-win-xaml-pal-l1-1-0/main.c b/dlls/ext-ms-win-xaml-pal-l1-1-0/main.c
new file mode 100644
index 00000000000..3e282758f41
--- /dev/null
+++ b/dlls/ext-ms-win-xaml-pal-l1-1-0/main.c
@@ -0,0 +1,35 @@
+/*
+ * ext-ms-win-xaml-pal-l1-1-0
+ *
+ * Copyright 2016 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
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <stdarg.h>
+#include <stdio.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "winuser.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(xaml);
+
+BOOL WINAPI XamlBehaviorEnabled(void *unknown)
+{
+ FIXME("(%p): stub\n", unknown);
+ return TRUE;
+}
--
2.34.1

View File

@@ -1,91 +0,0 @@
From adf1cce491f1580f73599ba2ec951a4004b4e091 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sun, 17 Jan 2016 17:12:45 +0100
Subject: [PATCH] ext-ms-win-appmodel-usercontext-l1-1-0: Add dll and add stub
for UserContextExtInitialize.
---
configure.ac | 1 +
.../Makefile.in | 4 +++
...xt-ms-win-appmodel-usercontext-l1-1-0.spec | 3 ++
.../main.c | 35 +++++++++++++++++++
4 files changed, 43 insertions(+)
create mode 100644 dlls/ext-ms-win-appmodel-usercontext-l1-1-0/Makefile.in
create mode 100644 dlls/ext-ms-win-appmodel-usercontext-l1-1-0/ext-ms-win-appmodel-usercontext-l1-1-0.spec
create mode 100644 dlls/ext-ms-win-appmodel-usercontext-l1-1-0/main.c
diff --git a/configure.ac b/configure.ac
index e9ea24f2680..54c8fcb183b 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2572,6 +2572,7 @@ WINE_CONFIG_MAKEFILE(dlls/evr)
WINE_CONFIG_MAKEFILE(dlls/evr/tests)
WINE_CONFIG_MAKEFILE(dlls/explorerframe)
WINE_CONFIG_MAKEFILE(dlls/explorerframe/tests)
+WINE_CONFIG_MAKEFILE(dlls/ext-ms-win-appmodel-usercontext-l1-1-0)
WINE_CONFIG_MAKEFILE(dlls/ext-ms-win-xaml-pal-l1-1-0)
WINE_CONFIG_MAKEFILE(dlls/faultrep)
WINE_CONFIG_MAKEFILE(dlls/faultrep/tests)
diff --git a/dlls/ext-ms-win-appmodel-usercontext-l1-1-0/Makefile.in b/dlls/ext-ms-win-appmodel-usercontext-l1-1-0/Makefile.in
new file mode 100644
index 00000000000..16eee7588ff
--- /dev/null
+++ b/dlls/ext-ms-win-appmodel-usercontext-l1-1-0/Makefile.in
@@ -0,0 +1,4 @@
+MODULE = ext-ms-win-appmodel-usercontext-l1-1-0.dll
+
+C_SRCS = \
+ main.c
diff --git a/dlls/ext-ms-win-appmodel-usercontext-l1-1-0/ext-ms-win-appmodel-usercontext-l1-1-0.spec b/dlls/ext-ms-win-appmodel-usercontext-l1-1-0/ext-ms-win-appmodel-usercontext-l1-1-0.spec
new file mode 100644
index 00000000000..7642d156c94
--- /dev/null
+++ b/dlls/ext-ms-win-appmodel-usercontext-l1-1-0/ext-ms-win-appmodel-usercontext-l1-1-0.spec
@@ -0,0 +1,3 @@
+@ stub UserContextExtCleanup
+@ stdcall UserContextExtInitialize()
+@ stub UserContextExtSetToken
diff --git a/dlls/ext-ms-win-appmodel-usercontext-l1-1-0/main.c b/dlls/ext-ms-win-appmodel-usercontext-l1-1-0/main.c
new file mode 100644
index 00000000000..7a9e75f7109
--- /dev/null
+++ b/dlls/ext-ms-win-appmodel-usercontext-l1-1-0/main.c
@@ -0,0 +1,35 @@
+/*
+ * ext-ms-win-appmodel-usercontext-l1-1-0
+ *
+ * Copyright 2016 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
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#include <stdarg.h>
+#include <stdio.h>
+
+#include "windef.h"
+#include "winbase.h"
+#include "winuser.h"
+#include "wine/debug.h"
+
+WINE_DEFAULT_DEBUG_CHANNEL(usercontext);
+
+HRESULT WINAPI UserContextExtInitialize(void)
+{
+ FIXME("(): stub\n");
+ return S_OK;
+}
--
2.34.1

View File

@@ -1,41 +0,0 @@
From 751d2904a1ac0831cab220eaedbbd01ba8a14356 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Thu, 21 Jan 2016 00:40:29 +0100
Subject: [PATCH] ext-ms-win-xaml-pal-l1-1-0: Add stub for GetThemeServices.
---
dlls/ext-ms-win-xaml-pal-l1-1-0/ext-ms-win-xaml-pal-l1-1-0.spec | 2 +-
dlls/ext-ms-win-xaml-pal-l1-1-0/main.c | 8 ++++++++
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/dlls/ext-ms-win-xaml-pal-l1-1-0/ext-ms-win-xaml-pal-l1-1-0.spec b/dlls/ext-ms-win-xaml-pal-l1-1-0/ext-ms-win-xaml-pal-l1-1-0.spec
index c167f5e..042e037 100644
--- a/dlls/ext-ms-win-xaml-pal-l1-1-0/ext-ms-win-xaml-pal-l1-1-0.spec
+++ b/dlls/ext-ms-win-xaml-pal-l1-1-0/ext-ms-win-xaml-pal-l1-1-0.spec
@@ -1,6 +1,6 @@
@ stub CreatePhoneAppBarProxy
@ stub CreateWinTextBoxProxy
-@ stub GetThemeServices
+@ stdcall GetThemeServices(ptr)
@ stdcall XamlBehaviorEnabled(ptr)
@ stub XamlPalInitialize
@ stub XamlPalUninitialize
diff --git a/dlls/ext-ms-win-xaml-pal-l1-1-0/main.c b/dlls/ext-ms-win-xaml-pal-l1-1-0/main.c
index 3e28275..45353ba 100644
--- a/dlls/ext-ms-win-xaml-pal-l1-1-0/main.c
+++ b/dlls/ext-ms-win-xaml-pal-l1-1-0/main.c
@@ -33,3 +33,11 @@ BOOL WINAPI XamlBehaviorEnabled(void *unknown)
FIXME("(%p): stub\n", unknown);
return TRUE;
}
+
+HRESULT WINAPI GetThemeServices(void **interface)
+{
+ FIXME("(%p): stub\n", interface);
+
+ *interface = NULL;
+ return E_NOTIMPL;
+}
--
1.9.1

View File

@@ -1,5 +0,0 @@
Fixes: Add ext-ms-win-xaml-pal-l1-1-0 dll and XamlBehaviourEnabled() stub
Fixes: Add ext-ms-win-xaml-pal-l1-1-0.GetThemeServices() stub
Fixes: Add ext-ms-win-appmodel-usercontext-l1-1-0 dll and UserContextExtInitialize() stub
Fixes: Add iertutil dll
Fixes: Return dummy interface in some uiautomationcore functions

View File

@@ -1,4 +1,4 @@
From 7e0e8ea02fa2670a29e1c312f88205b870521a9e Mon Sep 17 00:00:00 2001
From e2505b43f26d0517aad97c2778958886568ad58b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sat, 30 May 2015 02:55:03 +0200
Subject: [PATCH] ddraw: Allow size and format conversions in
@@ -9,10 +9,10 @@ Subject: [PATCH] ddraw: Allow size and format conversions in
1 file changed, 82 insertions(+), 71 deletions(-)
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c
index f5c3528cfa4..a8b919c05c2 100644
index 421ce68fa1c..b2c674eba7a 100644
--- a/dlls/ddraw/surface.c
+++ b/dlls/ddraw/surface.c
@@ -5316,6 +5316,46 @@ static struct ddraw_surface *get_sub_mimaplevel(struct ddraw_surface *surface)
@@ -5321,6 +5321,46 @@ static struct ddraw_surface *get_sub_mimaplevel(struct ddraw_surface *surface)
return impl_from_IDirectDrawSurface7(next_level);
}
@@ -59,7 +59,7 @@ index f5c3528cfa4..a8b919c05c2 100644
/*****************************************************************************
* IDirect3DTexture2::Load
*
@@ -5337,7 +5377,7 @@ static HRESULT WINAPI d3d_texture2_Load(IDirect3DTexture2 *iface, IDirect3DTextu
@@ -5342,7 +5382,7 @@ static HRESULT WINAPI d3d_texture2_Load(IDirect3DTexture2 *iface, IDirect3DTextu
{
struct ddraw_surface *dst_surface = impl_from_IDirect3DTexture2(iface);
struct ddraw_surface *src_surface = unsafe_impl_from_IDirect3DTexture2(src_texture);
@@ -68,7 +68,7 @@ index f5c3528cfa4..a8b919c05c2 100644
HRESULT hr;
TRACE("iface %p, src_texture %p.\n", iface, src_texture);
@@ -5350,90 +5390,62 @@ static HRESULT WINAPI d3d_texture2_Load(IDirect3DTexture2 *iface, IDirect3DTextu
@@ -5355,90 +5395,62 @@ static HRESULT WINAPI d3d_texture2_Load(IDirect3DTexture2 *iface, IDirect3DTextu
wined3d_mutex_lock();
@@ -159,7 +159,7 @@ index f5c3528cfa4..a8b919c05c2 100644
- if (FAILED(hr = wined3d_resource_map(src_resource,
- src_surface->sub_resource_idx, &src_map_desc, NULL, WINED3D_MAP_READ)))
- {
- ERR("Failed to lock source surface, hr %#x.\n", hr);
- ERR("Failed to lock source surface, hr %#lx.\n", hr);
- wined3d_mutex_unlock();
- return D3DERR_TEXTURE_LOAD_FAILED;
- }
@@ -167,7 +167,7 @@ index f5c3528cfa4..a8b919c05c2 100644
- if (FAILED(hr = wined3d_resource_map(dst_resource,
- dst_surface->sub_resource_idx, &dst_map_desc, NULL, WINED3D_MAP_WRITE)))
- {
- ERR("Failed to lock destination surface, hr %#x.\n", hr);
- ERR("Failed to lock destination surface, hr %#lx.\n", hr);
- wined3d_resource_unmap(src_resource, src_surface->sub_resource_idx);
- wined3d_mutex_unlock();
- return D3DERR_TEXTURE_LOAD_FAILED;
@@ -191,13 +191,13 @@ index f5c3528cfa4..a8b919c05c2 100644
+ src_surface->sub_resource_idx, &src_rect, 0, NULL, WINED3D_TEXF_LINEAR);
+ if (FAILED(hr))
+ {
+ ERR("Failed to blit surface, hr %#x.\n", hr);
+ ERR("Failed to blit surface, hr %#lx.\n", hr);
+ wined3d_mutex_unlock();
+ return hr;
}
if (src_surface->surface_desc.ddsCaps.dwCaps & DDSCAPS_MIPMAP)
@@ -5446,12 +5458,11 @@ static HRESULT WINAPI d3d_texture2_Load(IDirect3DTexture2 *iface, IDirect3DTextu
@@ -5451,12 +5463,11 @@ static HRESULT WINAPI d3d_texture2_Load(IDirect3DTexture2 *iface, IDirect3DTextu
else
dst_surface = NULL;
@@ -214,5 +214,5 @@ index f5c3528cfa4..a8b919c05c2 100644
wined3d_mutex_unlock();
--
2.30.2
2.34.1

View File

@@ -1,4 +1,4 @@
From 9b66229c8a8857e4dfbcee80698b83ca0ca7f2f9 Mon Sep 17 00:00:00 2001
From b052dd526d176c8b842f446279ee78542b184f08 Mon Sep 17 00:00:00 2001
From: Fabian Maurer <dark.shadow4@web.de>
Date: Fri, 10 Apr 2020 18:47:18 +0200
Subject: [PATCH] kernelbase: Implement sortkey generation on official tables
@@ -10,10 +10,10 @@ Signed-off-by: Fabian Maurer <dark.shadow4@web.de>
2 files changed, 413 insertions(+), 123 deletions(-)
diff --git a/dlls/kernel32/tests/locale.c b/dlls/kernel32/tests/locale.c
index 3b43dea2a2b..ac9b4da0d67 100644
index 8dc5814162a..d6084e3f328 100644
--- a/dlls/kernel32/tests/locale.c
+++ b/dlls/kernel32/tests/locale.c
@@ -2568,6 +2568,13 @@ static void test_lcmapstring_unicode(lcmapstring_wrapper func_ptr, const char *f
@@ -2586,6 +2586,13 @@ static void test_lcmapstring_unicode(lcmapstring_wrapper func_ptr, const char *f
lstrlenW(symbols_stripped) + 1, ret);
ok(!lstrcmpW(buf, symbols_stripped), "%s string comparison mismatch\n", func_name);
@@ -27,7 +27,7 @@ index 3b43dea2a2b..ac9b4da0d67 100644
/* test srclen = 0 */
SetLastError(0xdeadbeef);
ret = func_ptr(0, upper_case, 0, buf, ARRAY_SIZE(buf));
@@ -3101,6 +3108,135 @@ static void test_sorting(void)
@@ -3222,6 +3229,135 @@ static void test_sorting(void)
}
}
@@ -163,7 +163,7 @@ index 3b43dea2a2b..ac9b4da0d67 100644
static void test_FoldStringA(void)
{
int ret, i, j;
@@ -7492,6 +7628,7 @@ START_TEST(locale)
@@ -7649,6 +7785,7 @@ START_TEST(locale)
test_locale_nls();
test_geo_name();
test_sorting();
@@ -172,10 +172,10 @@ index 3b43dea2a2b..ac9b4da0d67 100644
test_EnumCalendarInfoW();
test_EnumCalendarInfoExA();
diff --git a/dlls/kernelbase/locale.c b/dlls/kernelbase/locale.c
index 997c7b6f4bc..e494fe6bb48 100644
index d046cefd749..993ac707a55 100644
--- a/dlls/kernelbase/locale.c
+++ b/dlls/kernelbase/locale.c
@@ -2857,127 +2857,6 @@ static int wcstombs_codepage( UINT codepage, DWORD flags, const WCHAR *src, int
@@ -3048,127 +3048,6 @@ static int wcstombs_codepage( const CPTABLEINFO *info, DWORD flags, const WCHAR
return wcstombs_sbcs( info, src, srclen, dst, dstlen );
}
@@ -301,9 +301,9 @@ index 997c7b6f4bc..e494fe6bb48 100644
-
-
/* compose a full-width katakana. return consumed source characters. */
static int compose_katakana( const WCHAR *src, int srclen, WCHAR *dst )
static int map_to_fullwidth( const WCHAR *src, int srclen, WCHAR *dst )
{
@@ -3305,6 +3184,280 @@ static int compare_weights(int flags, const WCHAR *str1, int len1,
@@ -3358,6 +3237,280 @@ static int compare_weights(int flags, const WCHAR *str1, int len1,
return len1 - len2;
}
@@ -584,7 +584,7 @@ index 997c7b6f4bc..e494fe6bb48 100644
static int compare_tzdate( const TIME_FIELDS *tf, const SYSTEMTIME *compare )
{
@@ -5759,8 +5912,8 @@ INT WINAPI DECLSPEC_HOTPATCH LCMapStringEx( const WCHAR *locale, DWORD flags, co
@@ -5713,8 +5866,8 @@ INT WINAPI DECLSPEC_HOTPATCH LCMapStringEx( const WCHAR *locale, DWORD flags, co
TRACE( "(%s,0x%08lx,%s,%d,%p,%d)\n",
debugstr_w(locale), flags, debugstr_wn(src, srclen), srclen, dst, dstlen );

View File

@@ -1,4 +1,4 @@
From dc71919fd156f8fabcb47594cb13ee3210ff571c Mon Sep 17 00:00:00 2001
From cc964cf26e79a89fb3d7345847a23d93368e3eed Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Tue, 9 Jul 2019 14:13:28 +1000
Subject: [PATCH] user32: Do not enumerate the registry in
@@ -9,23 +9,23 @@ not the complete list from the registry.
---
dlls/user32/input.c | 1 -
dlls/user32/tests/input.c | 35 +++++++++++++++++++++++++++++++++++
dlls/win32u/input.c | 35 ++---------------------------------
3 files changed, 37 insertions(+), 34 deletions(-)
dlls/win32u/input.c | 33 +--------------------------------
3 files changed, 36 insertions(+), 33 deletions(-)
diff --git a/dlls/user32/input.c b/dlls/user32/input.c
index 6cf60abeae2..3907430dd22 100644
index 06756b5551e..99abab38ccf 100644
--- a/dlls/user32/input.c
+++ b/dlls/user32/input.c
@@ -802,7 +802,6 @@ static void CALLBACK TrackMouseEventProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent,
}
@@ -521,7 +521,6 @@ BOOL WINAPI UnloadKeyboardLayout( HKL layout )
return FALSE;
}
-
/***********************************************************************
* TrackMouseEvent [USER32]
*
* EnableMouseInPointer (USER32.@)
*/
diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c
index 79f3dfc3dc0..b3c1bd560ae 100644
index 8b84a39d009..d7520459c6d 100644
--- a/dlls/user32/tests/input.c
+++ b/dlls/user32/tests/input.c
@@ -4481,6 +4481,40 @@ static void test_SendInput(void)
@@ -78,10 +78,10 @@ index 79f3dfc3dc0..b3c1bd560ae 100644
if(pGetMouseMovePointsEx)
test_GetMouseMovePointsEx(argv[0]);
diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c
index 72af32fd471..a18f81fc331 100644
index 28fc5a918c8..24782e405a7 100644
--- a/dlls/win32u/input.c
+++ b/dlls/win32u/input.c
@@ -821,11 +821,7 @@ HKL WINAPI NtUserActivateKeyboardLayout( HKL layout, UINT flags )
@@ -933,11 +933,7 @@ HKL WINAPI NtUserActivateKeyboardLayout( HKL layout, UINT flags )
*/
UINT WINAPI NtUserGetKeyboardLayoutList( INT size, HKL *layouts )
{
@@ -94,7 +94,7 @@ index 72af32fd471..a18f81fc331 100644
HKL layout;
TRACE_(keyboard)( "size %d, layouts %p.\n", size, layouts );
@@ -839,33 +835,6 @@ UINT WINAPI NtUserGetKeyboardLayoutList( INT size, HKL *layouts )
@@ -951,33 +947,6 @@ UINT WINAPI NtUserGetKeyboardLayoutList( INT size, HKL *layouts )
if (size && layouts)
{
layouts[count - 1] = layout;

View File

@@ -1,219 +1,74 @@
From 50e78099e8c5fbd74131e339b8e48488e1581c74 Mon Sep 17 00:00:00 2001
From cad538b5197b0488f50d10eb58fa1b220e7d05dc Mon Sep 17 00:00:00 2001
From: Sebastian Lackner <sebastian@fds-team.de>
Date: Sat, 5 Aug 2017 03:39:23 +0200
Subject: [PATCH] ntdll: Use fast CS functions for heap locking.
---
dlls/ntdll/heap.c | 50 +++++++++++++++++++++++------------------------
1 file changed, 25 insertions(+), 25 deletions(-)
dlls/ntdll/heap.c | 16 ++++++++--------
1 file changed, 8 insertions(+), 8 deletions(-)
diff --git a/dlls/ntdll/heap.c b/dlls/ntdll/heap.c
index af2a489b727..178f81006d0 100644
index d7ac44a4247..3fd02770b7b 100644
--- a/dlls/ntdll/heap.c
+++ b/dlls/ntdll/heap.c
@@ -1338,7 +1338,7 @@ static BOOL HEAP_IsRealArena( HEAP *heapPtr, /* [in] ptr to the heap */
flags |= heapPtr->flags;
/* calling HeapLock may result in infinite recursion, so do the critsect directly */
if (!(flags & HEAP_NO_SERIALIZE))
- RtlEnterCriticalSection( &heapPtr->critSection );
+ enter_critical_section( &heapPtr->critSection );
if (block) /* only check this single memory block */
{
@@ -1384,7 +1384,7 @@ static BOOL HEAP_IsRealArena( HEAP *heapPtr, /* [in] ptr to the heap */
ret = TRUE;
done:
- if (!(flags & HEAP_NO_SERIALIZE)) RtlLeaveCriticalSection( &heapPtr->critSection );
+ if (!(flags & HEAP_NO_SERIALIZE)) leave_critical_section( &heapPtr->critSection );
return ret;
@@ -340,13 +340,13 @@ static inline ULONG heap_get_flags( const HEAP *heap, ULONG flags )
static void heap_lock( HEAP *heap, ULONG flags )
{
if (heap_get_flags( heap, flags ) & HEAP_NO_SERIALIZE) return;
- RtlEnterCriticalSection( &heap->cs );
+ enter_critical_section( &heap->cs );
}
@@ -1558,9 +1558,9 @@ HANDLE WINAPI RtlCreateHeap( ULONG flags, PVOID addr, SIZE_T totalSize, SIZE_T c
static void heap_unlock( HEAP *heap, ULONG flags )
{
if (heap_get_flags( heap, flags ) & HEAP_NO_SERIALIZE) return;
- RtlLeaveCriticalSection( &heap->cs );
+ leave_critical_section( &heap->cs );
}
/***********************************************************************
@@ -1583,9 +1583,9 @@ HANDLE WINAPI RtlCreateHeap( ULONG flags, PVOID addr, SIZE_T totalSize, SIZE_T c
if (processHeap)
{
HEAP *heapPtr = subheap->heap;
- RtlEnterCriticalSection( &processHeap->critSection );
+ enter_critical_section( &processHeap->critSection );
- RtlEnterCriticalSection( &processHeap->cs );
+ enter_critical_section( &processHeap->cs );
list_add_head( &processHeap->entry, &heapPtr->entry );
- RtlLeaveCriticalSection( &processHeap->critSection );
+ leave_critical_section( &processHeap->critSection );
- RtlLeaveCriticalSection( &processHeap->cs );
+ leave_critical_section( &processHeap->cs );
}
else if (!addr)
{
@@ -1598,9 +1598,9 @@ HANDLE WINAPI RtlDestroyHeap( HANDLE heap )
@@ -1629,9 +1629,9 @@ HANDLE WINAPI RtlDestroyHeap( HANDLE heap )
if (heap == processHeap) return heap; /* cannot delete the main process heap */
/* remove it from the per-process list */
- RtlEnterCriticalSection( &processHeap->critSection );
+ enter_critical_section( &processHeap->critSection );
- RtlEnterCriticalSection( &processHeap->cs );
+ enter_critical_section( &processHeap->cs );
list_remove( &heapPtr->entry );
- RtlLeaveCriticalSection( &processHeap->critSection );
+ leave_critical_section( &processHeap->critSection );
- RtlLeaveCriticalSection( &processHeap->cs );
+ leave_critical_section( &processHeap->cs );
heapPtr->critSection.DebugInfo->Spare[0] = 0;
RtlDeleteCriticalSection( &heapPtr->critSection );
@@ -1673,12 +1673,12 @@ void * WINAPI DECLSPEC_HOTPATCH RtlAllocateHeap( HANDLE heap, ULONG flags, SIZE_
}
if (rounded_size < HEAP_MIN_DATA_SIZE) rounded_size = HEAP_MIN_DATA_SIZE;
- if (!(flags & HEAP_NO_SERIALIZE)) RtlEnterCriticalSection( &heapPtr->critSection );
+ if (!(flags & HEAP_NO_SERIALIZE)) enter_critical_section( &heapPtr->critSection );
if (rounded_size >= HEAP_MIN_LARGE_BLOCK_SIZE && (flags & HEAP_GROWABLE))
{
void *ret = allocate_large_block( heap, flags, size );
- if (!(flags & HEAP_NO_SERIALIZE)) RtlLeaveCriticalSection( &heapPtr->critSection );
+ if (!(flags & HEAP_NO_SERIALIZE)) leave_critical_section( &heapPtr->critSection );
if (!ret && (flags & HEAP_GENERATE_EXCEPTIONS)) RtlRaiseStatus( STATUS_NO_MEMORY );
TRACE("(%p,%08x,%08lx): returning %p\n", heap, flags, size, ret );
return ret;
@@ -1690,7 +1690,7 @@ void * WINAPI DECLSPEC_HOTPATCH RtlAllocateHeap( HANDLE heap, ULONG flags, SIZE_
{
TRACE("(%p,%08x,%08lx): returning NULL\n",
heap, flags, size );
- if (!(flags & HEAP_NO_SERIALIZE)) RtlLeaveCriticalSection( &heapPtr->critSection );
+ if (!(flags & HEAP_NO_SERIALIZE)) leave_critical_section( &heapPtr->critSection );
if (flags & HEAP_GENERATE_EXCEPTIONS) RtlRaiseStatus( STATUS_NO_MEMORY );
return NULL;
}
@@ -1716,7 +1716,7 @@ void * WINAPI DECLSPEC_HOTPATCH RtlAllocateHeap( HANDLE heap, ULONG flags, SIZE_
notify_alloc( pInUse + 1, size, flags & HEAP_ZERO_MEMORY );
initialize_block( pInUse + 1, size, pInUse->unused_bytes, flags );
- if (!(flags & HEAP_NO_SERIALIZE)) RtlLeaveCriticalSection( &heapPtr->critSection );
+ if (!(flags & HEAP_NO_SERIALIZE)) leave_critical_section( &heapPtr->critSection );
TRACE("(%p,%08x,%08lx): returning %p\n", heap, flags, size, pInUse + 1 );
return pInUse + 1;
@@ -1756,7 +1756,7 @@ BOOLEAN WINAPI DECLSPEC_HOTPATCH RtlFreeHeap( HANDLE heap, ULONG flags, void *pt
flags &= HEAP_NO_SERIALIZE;
flags |= heapPtr->flags;
- if (!(flags & HEAP_NO_SERIALIZE)) RtlEnterCriticalSection( &heapPtr->critSection );
+ if (!(flags & HEAP_NO_SERIALIZE)) enter_critical_section( &heapPtr->critSection );
/* Inform valgrind we are trying to free memory, so it can throw up an error message */
notify_free( ptr );
@@ -1770,12 +1770,12 @@ BOOLEAN WINAPI DECLSPEC_HOTPATCH RtlFreeHeap( HANDLE heap, ULONG flags, void *pt
else
HEAP_MakeInUseBlockFree( subheap, pInUse );
- if (!(flags & HEAP_NO_SERIALIZE)) RtlLeaveCriticalSection( &heapPtr->critSection );
+ if (!(flags & HEAP_NO_SERIALIZE)) leave_critical_section( &heapPtr->critSection );
TRACE("(%p,%08x,%p): returning TRUE\n", heap, flags, ptr );
return TRUE;
error:
- if (!(flags & HEAP_NO_SERIALIZE)) RtlLeaveCriticalSection( &heapPtr->critSection );
+ if (!(flags & HEAP_NO_SERIALIZE)) leave_critical_section( &heapPtr->critSection );
RtlSetLastWin32ErrorAndNtStatusFromNtStatus( STATUS_INVALID_PARAMETER );
TRACE("(%p,%08x,%p): returning FALSE\n", heap, flags, ptr );
return FALSE;
@@ -1817,7 +1817,7 @@ PVOID WINAPI RtlReAllocateHeap( HANDLE heap, ULONG flags, PVOID ptr, SIZE_T size
flags &= HEAP_GENERATE_EXCEPTIONS | HEAP_NO_SERIALIZE | HEAP_ZERO_MEMORY |
HEAP_REALLOC_IN_PLACE_ONLY;
flags |= heapPtr->flags;
- if (!(flags & HEAP_NO_SERIALIZE)) RtlEnterCriticalSection( &heapPtr->critSection );
+ if (!(flags & HEAP_NO_SERIALIZE)) enter_critical_section( &heapPtr->critSection );
rounded_size = ROUND_SIZE(size) + HEAP_TAIL_EXTRA_SIZE(flags);
if (rounded_size < size) goto oom; /* overflow */
@@ -1911,19 +1911,19 @@ PVOID WINAPI RtlReAllocateHeap( HANDLE heap, ULONG flags, PVOID ptr, SIZE_T size
ret = pArena + 1;
done:
- if (!(flags & HEAP_NO_SERIALIZE)) RtlLeaveCriticalSection( &heapPtr->critSection );
+ if (!(flags & HEAP_NO_SERIALIZE)) leave_critical_section( &heapPtr->critSection );
TRACE("(%p,%08x,%p,%08lx): returning %p\n", heap, flags, ptr, size, ret );
return ret;
oom:
- if (!(flags & HEAP_NO_SERIALIZE)) RtlLeaveCriticalSection( &heapPtr->critSection );
+ if (!(flags & HEAP_NO_SERIALIZE)) leave_critical_section( &heapPtr->critSection );
if (flags & HEAP_GENERATE_EXCEPTIONS) RtlRaiseStatus( STATUS_NO_MEMORY );
RtlSetLastWin32ErrorAndNtStatusFromNtStatus( STATUS_NO_MEMORY );
TRACE("(%p,%08x,%p,%08lx): returning NULL\n", heap, flags, ptr, size );
return NULL;
error:
- if (!(flags & HEAP_NO_SERIALIZE)) RtlLeaveCriticalSection( &heapPtr->critSection );
+ if (!(flags & HEAP_NO_SERIALIZE)) leave_critical_section( &heapPtr->critSection );
RtlSetLastWin32ErrorAndNtStatusFromNtStatus( STATUS_INVALID_PARAMETER );
TRACE("(%p,%08x,%p,%08lx): returning NULL\n", heap, flags, ptr, size );
return NULL;
@@ -1969,7 +1969,7 @@ BOOLEAN WINAPI RtlLockHeap( HANDLE heap )
{
HEAP *heapPtr = HEAP_GetPtr( heap );
if (!heapPtr) return FALSE;
- RtlEnterCriticalSection( &heapPtr->critSection );
+ enter_critical_section( &heapPtr->critSection );
return TRUE;
}
@@ -1990,7 +1990,7 @@ BOOLEAN WINAPI RtlUnlockHeap( HANDLE heap )
{
HEAP *heapPtr = HEAP_GetPtr( heap );
if (!heapPtr) return FALSE;
- RtlLeaveCriticalSection( &heapPtr->critSection );
+ leave_critical_section( &heapPtr->critSection );
return TRUE;
}
@@ -2026,7 +2026,7 @@ SIZE_T WINAPI RtlSizeHeap( HANDLE heap, ULONG flags, const void *ptr )
}
flags &= HEAP_NO_SERIALIZE;
flags |= heapPtr->flags;
- if (!(flags & HEAP_NO_SERIALIZE)) RtlEnterCriticalSection( &heapPtr->critSection );
+ if (!(flags & HEAP_NO_SERIALIZE)) enter_critical_section( &heapPtr->critSection );
pArena = (const ARENA_INUSE *)ptr - 1;
if (!validate_block_pointer( heapPtr, &subheap, pArena ))
@@ -2043,7 +2043,7 @@ SIZE_T WINAPI RtlSizeHeap( HANDLE heap, ULONG flags, const void *ptr )
{
ret = (pArena->size & ARENA_SIZE_MASK) - pArena->unused_bytes;
}
- if (!(flags & HEAP_NO_SERIALIZE)) RtlLeaveCriticalSection( &heapPtr->critSection );
+ if (!(flags & HEAP_NO_SERIALIZE)) leave_critical_section( &heapPtr->critSection );
TRACE("(%p,%08x,%p): returning %08lx\n", heap, flags, ptr, ret );
return ret;
@@ -2090,7 +2090,7 @@ NTSTATUS WINAPI RtlWalkHeap( HANDLE heap, PVOID entry_ptr )
if (!heapPtr || !entry) return STATUS_INVALID_PARAMETER;
- if (!(heapPtr->flags & HEAP_NO_SERIALIZE)) RtlEnterCriticalSection( &heapPtr->critSection );
+ if (!(heapPtr->flags & HEAP_NO_SERIALIZE)) enter_critical_section( &heapPtr->critSection );
/* FIXME: enumerate large blocks too */
@@ -2195,7 +2195,7 @@ NTSTATUS WINAPI RtlWalkHeap( HANDLE heap, PVOID entry_ptr )
if (TRACE_ON(heap)) HEAP_DumpEntry(entry);
HW_end:
- if (!(heapPtr->flags & HEAP_NO_SERIALIZE)) RtlLeaveCriticalSection( &heapPtr->critSection );
+ if (!(heapPtr->flags & HEAP_NO_SERIALIZE)) leave_critical_section( &heapPtr->critSection );
return ret;
}
@@ -2218,7 +2218,7 @@ ULONG WINAPI RtlGetProcessHeaps( ULONG count, HANDLE *heaps )
heapPtr->cs.DebugInfo->Spare[0] = 0;
RtlDeleteCriticalSection( &heapPtr->cs );
@@ -2242,7 +2242,7 @@ ULONG WINAPI RtlGetProcessHeaps( ULONG count, HANDLE *heaps )
ULONG total = 1; /* main heap */
struct list *ptr;
- RtlEnterCriticalSection( &processHeap->critSection );
+ enter_critical_section( &processHeap->critSection );
- RtlEnterCriticalSection( &processHeap->cs );
+ enter_critical_section( &processHeap->cs );
LIST_FOR_EACH( ptr, &processHeap->entry ) total++;
if (total <= count)
{
@@ -2226,7 +2226,7 @@ ULONG WINAPI RtlGetProcessHeaps( ULONG count, HANDLE *heaps )
@@ -2250,7 +2250,7 @@ ULONG WINAPI RtlGetProcessHeaps( ULONG count, HANDLE *heaps )
LIST_FOR_EACH( ptr, &processHeap->entry )
*heaps++ = LIST_ENTRY( ptr, HEAP, entry );
}
- RtlLeaveCriticalSection( &processHeap->critSection );
+ leave_critical_section( &processHeap->critSection );
- RtlLeaveCriticalSection( &processHeap->cs );
+ leave_critical_section( &processHeap->cs );
return total;
}
--
2.17.1
2.35.1

View File

@@ -1,48 +0,0 @@
From 33948747d5b11b2d61004632bf1038dc95060fd3 Mon Sep 17 00:00:00 2001
From: Christian Costa <titan.costa@gmail.com>
Date: Sun, 1 Feb 2015 12:53:09 +0100
Subject: [PATCH] ntoskrnl.exe: Implement MmMapLockedPages and
MmUnmapLockedPages.
---
dlls/ntoskrnl.exe/ntoskrnl.c | 20 ++++++++++++++++++++
dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +-
2 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index c1e6a9c..cca3066 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -2821,6 +2821,16 @@ VOID WINAPI MmLockPagableSectionByHandle(PVOID ImageSectionHandle)
FIXME("stub %p\n", ImageSectionHandle);
}
+ /***********************************************************************
+ * MmMapLockedPages (NTOSKRNL.EXE.@)
+ */
+PVOID WINAPI MmMapLockedPages(PMDL MemoryDescriptorList, KPROCESSOR_MODE AccessMode)
+{
+ TRACE("%p %d\n", MemoryDescriptorList, AccessMode);
+ return MemoryDescriptorList->MappedSystemVa;
+}
+
+
/***********************************************************************
* MmMapLockedPagesSpecifyCache (NTOSKRNL.EXE.@)
*/
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
index 633a8c4..cc74261 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
@@ -703,7 +703,7 @@
@ stub MmLockPagableImageSection
@ stdcall MmLockPagableSectionByHandle(ptr)
@ stdcall MmMapIoSpace(int64 long long)
-@ stub MmMapLockedPages
+@ stdcall MmMapLockedPages(ptr long)
@ stdcall MmMapLockedPagesSpecifyCache(ptr long long ptr long long)
@ stub MmMapLockedPagesWithReservedMapping
@ stub MmMapMemoryDumpMdl
--
1.9.1

View File

@@ -1,47 +0,0 @@
From a9f3caf61dd6cf1ace65e7c7e2edef0456f6a9d1 Mon Sep 17 00:00:00 2001
From: Jarkko Korpi <jarkko_korpi@hotmail.com>
Date: Sat, 19 Mar 2016 21:54:19 +0200
Subject: [PATCH] ntoskrnl.exe: Add IoGetDeviceAttachmentBaseRef stub.
---
dlls/ntoskrnl.exe/ntoskrnl.c | 10 ++++++++++
dlls/ntoskrnl.exe/ntoskrnl.exe.spec | 2 +-
2 files changed, 11 insertions(+), 1 deletion(-)
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.c b/dlls/ntoskrnl.exe/ntoskrnl.c
index 8f025a108d4..f5964b4d90b 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.c
+++ b/dlls/ntoskrnl.exe/ntoskrnl.c
@@ -1580,6 +1580,16 @@ NTSTATUS WINAPI IoDeleteSymbolicLink( UNICODE_STRING *name )
return status;
}
+/***********************************************************************
+ * IoGetDeviceAttachmentBaseRef (NTOSKRNL.EXE.@)
+ */
+PDEVICE_OBJECT WINAPI IoGetDeviceAttachmentBaseRef( PDEVICE_OBJECT device )
+{
+ FIXME( "(%p): stub\n", device );
+ return NULL;
+}
+
+
/***********************************************************************
* IoGetDeviceInterfaces (NTOSKRNL.EXE.@)
*/
diff --git a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
index 87afae008e1..9ebedf21a5e 100644
--- a/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
+++ b/dlls/ntoskrnl.exe/ntoskrnl.exe.spec
@@ -392,7 +392,7 @@
@ stub IoGetBootDiskInformation
@ stdcall IoGetConfigurationInformation()
@ stdcall IoGetCurrentProcess()
-@ stub IoGetDeviceAttachmentBaseRef
+@ stdcall IoGetDeviceAttachmentBaseRef(ptr)
@ stub IoGetDeviceInterfaceAlias
@ stdcall IoGetDeviceInterfaces(ptr ptr long ptr)
@ stdcall IoGetDeviceObjectPointer(ptr long ptr ptr)
--
2.17.1

View File

@@ -1,2 +0,0 @@
Fixes: Add stub for ntoskrnl.Mm{Map,Unmap}LockedPages
Fixes: Add stub for ntoskrnl.IoGetDeviceAttachmentBaseRef

View File

@@ -51,13 +51,13 @@ usage()
# Get the upstream commit sha
upstream_commit()
{
echo "a4e4e19fe0f15b0b9bf67273bb1b27e97474b606"
echo "3ded60bd1654dc689d24a23305f4a93acce3a6f2"
}
# Show version information
version()
{
echo "Wine Staging 7.6"
echo "Wine Staging 7.8"
echo "Copyright (C) 2014-2019 the Wine Staging project authors."
echo "Copyright (C) 2018-2020 Alistair Leslie-Hughes"
echo ""
@@ -86,7 +86,6 @@ patch_enable_all ()
enable_Pipelight="$1"
enable_Staging="$1"
enable_advapi32_LsaLookupPrivilegeName="$1"
enable_api_ms_win_Stub_DLLs="$1"
enable_cmd_launch_association="$1"
enable_comctl32_rebar_capture="$1"
enable_comctl32_version_6="$1"
@@ -155,7 +154,6 @@ patch_enable_all ()
enable_ntdll_Syscall_Emulation="$1"
enable_ntdll_WRITECOPY="$1"
enable_ntdll_ext4_case_folder="$1"
enable_ntoskrnl_Stubs="$1"
enable_nvapi_Stub_DLL="$1"
enable_nvcuda_CUDA_Support="$1"
enable_nvcuvid_CUDA_Video_Support="$1"
@@ -173,7 +171,6 @@ patch_enable_all ()
enable_sapi_iteration_tokens="$1"
enable_secur32_InitializeSecurityContextW="$1"
enable_server_File_Permissions="$1"
enable_server_Key_State="$1"
enable_server_PeekMessage="$1"
enable_server_Realtime_Priority="$1"
enable_server_Signal_Thread="$1"
@@ -210,6 +207,7 @@ patch_enable_all ()
enable_user32_QueryDisplayConfig="$1"
enable_user32_Refresh_MDI_Menus="$1"
enable_user32_ScrollWindowEx="$1"
enable_user32_alttab_focus="$1"
enable_user32_message_order="$1"
enable_user32_msgbox_Support_WM_COPY_mesg="$1"
enable_user32_rawinput_mouse="$1"
@@ -247,6 +245,7 @@ patch_enable_all ()
enable_winemenubuilder_integration="$1"
enable_wineps_drv_PostScript_Fixes="$1"
enable_winepulse_PulseAudio_Support="$1"
enable_winex11_CandidateWindowPos="$1"
enable_winex11_MWM_Decorations="$1"
enable_winex11_UpdateLayeredWindow="$1"
enable_winex11_Vulkan_support="$1"
@@ -255,7 +254,6 @@ patch_enable_all ()
enable_winex11_XEMBED="$1"
enable_winex11__NET_ACTIVE_WINDOW="$1"
enable_winex11_ime_check_thread_data="$1"
enable_winex11_key_translation="$1"
enable_winex11_wglShareLists="$1"
enable_winex11_drv_Query_server_position="$1"
enable_wininet_Cleanup="$1"
@@ -286,9 +284,6 @@ patch_enable ()
advapi32-LsaLookupPrivilegeName)
enable_advapi32_LsaLookupPrivilegeName="$2"
;;
api-ms-win-Stub_DLLs)
enable_api_ms_win_Stub_DLLs="$2"
;;
cmd-launch-association)
enable_cmd_launch_association="$2"
;;
@@ -493,9 +488,6 @@ patch_enable ()
ntdll-ext4-case-folder)
enable_ntdll_ext4_case_folder="$2"
;;
ntoskrnl-Stubs)
enable_ntoskrnl_Stubs="$2"
;;
nvapi-Stub_DLL)
enable_nvapi_Stub_DLL="$2"
;;
@@ -547,9 +539,6 @@ patch_enable ()
server-File_Permissions)
enable_server_File_Permissions="$2"
;;
server-Key_State)
enable_server_Key_State="$2"
;;
server-PeekMessage)
enable_server_PeekMessage="$2"
;;
@@ -658,6 +647,9 @@ patch_enable ()
user32-ScrollWindowEx)
enable_user32_ScrollWindowEx="$2"
;;
user32-alttab-focus)
enable_user32_alttab_focus="$2"
;;
user32-message-order)
enable_user32_message_order="$2"
;;
@@ -769,6 +761,9 @@ patch_enable ()
winepulse-PulseAudio_Support)
enable_winepulse_PulseAudio_Support="$2"
;;
winex11-CandidateWindowPos)
enable_winex11_CandidateWindowPos="$2"
;;
winex11-MWM_Decorations)
enable_winex11_MWM_Decorations="$2"
;;
@@ -793,9 +788,6 @@ patch_enable ()
winex11-ime-check-thread-data)
enable_winex11_ime_check_thread_data="$2"
;;
winex11-key_translation)
enable_winex11_key_translation="$2"
;;
winex11-wglShareLists)
enable_winex11_wglShareLists="$2"
;;
@@ -1207,6 +1199,13 @@ if test "$enable_user32_rawinput_mouse_experimental" -eq 1; then
enable_user32_rawinput_mouse=1
fi
if test "$enable_user32_alttab_focus" -eq 1; then
if test "$enable_winex11__NET_ACTIVE_WINDOW" -gt 1; then
abort "Patchset winex11-_NET_ACTIVE_WINDOW disabled, but user32-alttab-focus depends on that."
fi
enable_winex11__NET_ACTIVE_WINDOW=1
fi
if test "$enable_stdole32_tlb_SLTG_Typelib" -eq 1; then
if test "$enable_widl_SLTG_Typelib_Support" -gt 1; then
abort "Patchset widl-SLTG_Typelib_Support disabled, but stdole32.tlb-SLTG_Typelib depends on that."
@@ -1313,13 +1312,6 @@ if test "$enable_fltmgr_sys_FltBuildDefaultSecurityDescriptor" -eq 1; then
enable_winedevice_Default_Drivers=1
fi
if test "$enable_winedevice_Default_Drivers" -eq 1; then
if test "$enable_ntoskrnl_Stubs" -gt 1; then
abort "Patchset ntoskrnl-Stubs disabled, but winedevice-Default_Drivers depends on that."
fi
enable_ntoskrnl_Stubs=1
fi
if test "$enable_eventfd_synchronization" -eq 1; then
if test "$enable_ntdll_Junction_Points" -gt 1; then
abort "Patchset ntdll-Junction_Points disabled, but eventfd_synchronization depends on that."
@@ -1339,13 +1331,6 @@ if test "$enable_eventfd_synchronization" -eq 1; then
enable_server_Signal_Thread=1
fi
if test "$enable_server_PeekMessage" -eq 1; then
if test "$enable_server_Key_State" -gt 1; then
abort "Patchset server-Key_State disabled, but server-PeekMessage depends on that."
fi
enable_server_Key_State=1
fi
if test "$enable_ntdll_Junction_Points" -eq 1; then
if test "$enable_ntdll_DOS_Attributes" -gt 1; then
abort "Patchset ntdll-DOS_Attributes disabled, but ntdll-Junction_Points depends on that."
@@ -1437,21 +1422,6 @@ if test "$enable_advapi32_LsaLookupPrivilegeName" -eq 1; then
patch_apply advapi32-LsaLookupPrivilegeName/0001-advapi32-Fix-error-code-when-calling-LsaOpenPolicy-f.patch
fi
# Patchset api-ms-win-Stub_DLLs
# |
# | Modified files:
# | * configure.ac, dlls/ext-ms-win-appmodel-usercontext-l1-1-0/Makefile.in, dlls/ext-ms-win-appmodel-usercontext-l1-1-0/ext-
# | ms-win-appmodel-usercontext-l1-1-0.spec, dlls/ext-ms-win-appmodel-usercontext-l1-1-0/main.c, dlls/ext-ms-win-xaml-
# | pal-l1-1-0/Makefile.in, dlls/ext-ms-win-xaml-pal-l1-1-0/ext-ms-win-xaml-pal-l1-1-0.spec, dlls/ext-ms-win-xaml-
# | pal-l1-1-0/main.c, dlls/iertutil/Makefile.in, dlls/iertutil/iertutil.spec, dlls/iertutil/main.c
# |
if test "$enable_api_ms_win_Stub_DLLs" -eq 1; then
patch_apply api-ms-win-Stub_DLLs/0006-iertutil-Add-dll-and-add-stub-for-ordinal-811.patch
patch_apply api-ms-win-Stub_DLLs/0009-ext-ms-win-xaml-pal-l1-1-0-Add-dll-and-add-stub-for-.patch
patch_apply api-ms-win-Stub_DLLs/0010-ext-ms-win-appmodel-usercontext-l1-1-0-Add-dll-and-a.patch
patch_apply api-ms-win-Stub_DLLs/0012-ext-ms-win-xaml-pal-l1-1-0-Add-stub-for-GetThemeServ.patch
fi
# Patchset cmd-launch-association
# |
# | This patchset fixes the following Wine bugs:
@@ -1874,30 +1844,8 @@ if test "$enable_ntdll_Junction_Points" -eq 1; then
patch_apply ntdll-Junction_Points/0040-Fix-warnings.patch
fi
# Patchset server-Key_State
# |
# | This patchset fixes the following Wine bugs:
# | * [#26269] BioShock 2: Loss of keyboard input on loading screen
# | * [#31899] No keyboard input in La-Mulana remake (GetKeyState should behave similar to GetAsyncKeyState for specific
# | window messages / queue states)
# | * [#35907] Caps Lock state gets confused with multiple processes/threads
# | * [#45385] Wrong state of virtual keys after cycling windows. Usually VK_MENU, VK_SHIFT and VK_CONTROL, but every key can
# | be affected.
# |
# | Modified files:
# | * dlls/user32/tests/input.c, server/queue.c
# |
if test "$enable_server_Key_State" -eq 1; then
patch_apply server-Key_State/0001-server-Create-message-queue-and-thread-input-in-set_.patch
patch_apply server-Key_State/0002-server-Lock-thread-input-keystate-whenever-it-is-mod.patch
patch_apply server-Key_State/0003-server-Create-message-queue-and-thread-input-in-get_.patch
fi
# Patchset server-PeekMessage
# |
# | This patchset has the following (direct or indirect) dependencies:
# | * server-Key_State
# |
# | This patchset fixes the following Wine bugs:
# | * [#28884] GetMessage should remove already seen messages with higher priority
# |
@@ -1929,8 +1877,8 @@ fi
# Patchset eventfd_synchronization
# |
# | This patchset has the following (direct or indirect) dependencies:
# | * ntdll-DOS_Attributes, ntdll-NtQueryEaFile, ntdll-Junction_Points, server-Key_State, server-PeekMessage, server-
# | Realtime_Priority, server-Signal_Thread
# | * ntdll-DOS_Attributes, ntdll-NtQueryEaFile, ntdll-Junction_Points, server-PeekMessage, server-Realtime_Priority, server-
# | Signal_Thread
# |
# | This patchset fixes the following Wine bugs:
# | * [#36692] Many multi-threaded applications have poor performance due to heavy use of synchronization primitives
@@ -2015,21 +1963,8 @@ if test "$enable_explorer_Video_Registry_Key" -eq 1; then
patch_apply explorer-Video_Registry_Key/0001-explorer-Create-CurrentControlSet-Control-Video-regi.patch
fi
# Patchset ntoskrnl-Stubs
# |
# | Modified files:
# | * dlls/ntoskrnl.exe/ntoskrnl.c, dlls/ntoskrnl.exe/ntoskrnl.exe.spec
# |
if test "$enable_ntoskrnl_Stubs" -eq 1; then
patch_apply ntoskrnl-Stubs/0009-ntoskrnl.exe-Implement-MmMapLockedPages-and-MmUnmapL.patch
patch_apply ntoskrnl-Stubs/0011-ntoskrnl.exe-Add-IoGetDeviceAttachmentBaseRef-stub.patch
fi
# Patchset winedevice-Default_Drivers
# |
# | This patchset has the following (direct or indirect) dependencies:
# | * ntoskrnl-Stubs
# |
# | Modified files:
# | * configure.ac, dlls/dxgkrnl.sys/Makefile.in, dlls/dxgkrnl.sys/dxgkrnl.sys.spec, dlls/dxgkrnl.sys/main.c,
# | dlls/dxgmms1.sys/Makefile.in, dlls/dxgmms1.sys/dxgmms1.sys.spec, dlls/dxgmms1.sys/main.c,
@@ -2046,7 +1981,7 @@ fi
# Patchset fltmgr.sys-FltBuildDefaultSecurityDescriptor
# |
# | This patchset has the following (direct or indirect) dependencies:
# | * ntoskrnl-Stubs, winedevice-Default_Drivers
# | * winedevice-Default_Drivers
# |
# | This patchset fixes the following Wine bugs:
# | * [#49089] fltmgr.sys: Implement FltBuildDefaultSecurityDescriptor
@@ -3235,8 +3170,7 @@ fi
# | * [#9512] Make sure popups don't block access to objects underneath in DVDPro
# |
# | Modified files:
# | * dlls/user32/message.c, dlls/user32/tests/input.c, dlls/win32u/message.c, dlls/winex11.drv/bitblt.c, server/protocol.def,
# | server/window.c
# | * dlls/user32/tests/input.c, dlls/win32u/message.c, dlls/winex11.drv/bitblt.c, server/protocol.def, server/window.c
# |
if test "$enable_user32_Mouse_Message_Hwnd" -eq 1; then
patch_apply user32-Mouse_Message_Hwnd/0001-user32-Try-harder-to-find-a-target-for-mouse-message.patch
@@ -3282,6 +3216,35 @@ if test "$enable_user32_ScrollWindowEx" -eq 1; then
patch_apply user32-ScrollWindowEx/0001-user32-Fix-return-value-of-ScrollWindowEx-for-invisi.patch
fi
# Patchset winex11-_NET_ACTIVE_WINDOW
# |
# | This patchset fixes the following Wine bugs:
# | * [#2155] Forward activate window requests to WM using _NET_ACTIVE_WINDOW
# |
# | Modified files:
# | * dlls/win32u/driver.c, dlls/win32u/input.c, dlls/winex11.drv/event.c, dlls/winex11.drv/init.c, dlls/winex11.drv/window.c,
# | dlls/winex11.drv/x11drv.h, dlls/winex11.drv/x11drv_main.c, include/wine/gdi_driver.h
# |
if test "$enable_winex11__NET_ACTIVE_WINDOW" -eq 1; then
patch_apply winex11-_NET_ACTIVE_WINDOW/0001-winex11.drv-Add-support-for-_NET_ACTIVE_WINDOW.patch
patch_apply winex11-_NET_ACTIVE_WINDOW/0002-user32-Before-asking-a-WM-to-activate-a-window-make-.patch
fi
# Patchset user32-alttab-focus
# |
# | This patchset has the following (direct or indirect) dependencies:
# | * winex11-_NET_ACTIVE_WINDOW
# |
# | This patchset fixes the following Wine bugs:
# | * [#48121] Improve Alt+tab for unity games.
# |
# | Modified files:
# | * dlls/win32u/input.c
# |
if test "$enable_user32_alttab_focus" -eq 1; then
patch_apply user32-alttab-focus/0001-Send-WM_NCPOINTERUP-on-focus-regain.patch
fi
# Patchset user32-message-order
# |
# | This patchset fixes the following Wine bugs:
@@ -3357,7 +3320,7 @@ fi
# | * [#46274] user32: Prevent a recursive loop with the activation messages.
# |
# | Modified files:
# | * dlls/user32/focus.c, dlls/user32/tests/msg.c, dlls/win32u/input.c, dlls/win32u/ntuser_private.h
# | * dlls/user32/tests/msg.c, dlls/win32u/input.c, dlls/win32u/ntuser_private.h
# |
if test "$enable_user32_recursive_activation" -eq 1; then
patch_apply user32-recursive-activation/0001-user32-focus-Prevent-a-recursive-loop-with-the-activ.patch
@@ -3736,6 +3699,19 @@ if test "$enable_winepulse_PulseAudio_Support" -eq 1; then
patch_apply winepulse-PulseAudio_Support/0001-winepulse.drv-Use-a-separate-mainloop-and-ctx-for-pu.patch
fi
# Patchset winex11-CandidateWindowPos
# |
# | This patchset fixes the following Wine bugs:
# | * [#30938] Update a XIM candidate position when cursor location changes
# |
# | Modified files:
# | * dlls/win32u/driver.c, dlls/win32u/input.c, dlls/winex11.drv/init.c, dlls/winex11.drv/x11drv.h, dlls/winex11.drv/xim.c,
# | include/wine/gdi_driver.h
# |
if test "$enable_winex11_CandidateWindowPos" -eq 1; then
patch_apply winex11-CandidateWindowPos/0001-winex11.drv-Update-a-candidate-window-s-position-wit.patch
fi
# Patchset winex11-MWM_Decorations
# |
# | This patchset fixes the following Wine bugs:
@@ -3773,20 +3749,6 @@ if test "$enable_winex11_Vulkan_support" -eq 1; then
patch_apply winex11-Vulkan_support/0001-winex11-Specify-a-default-vulkan-driver-if-one-not-f.patch
fi
# Patchset winex11-_NET_ACTIVE_WINDOW
# |
# | This patchset fixes the following Wine bugs:
# | * [#2155] Forward activate window requests to WM using _NET_ACTIVE_WINDOW
# |
# | Modified files:
# | * dlls/win32u/driver.c, dlls/win32u/input.c, dlls/winex11.drv/event.c, dlls/winex11.drv/init.c, dlls/winex11.drv/window.c,
# | dlls/winex11.drv/x11drv.h, dlls/winex11.drv/x11drv_main.c, include/wine/gdi_driver.h
# |
if test "$enable_winex11__NET_ACTIVE_WINDOW" -eq 1; then
patch_apply winex11-_NET_ACTIVE_WINDOW/0001-winex11.drv-Add-support-for-_NET_ACTIVE_WINDOW.patch
patch_apply winex11-_NET_ACTIVE_WINDOW/0002-user32-Before-asking-a-WM-to-activate-a-window-make-.patch
fi
# Patchset winex11-WM_WINDOWPOSCHANGING
# |
# | This patchset has the following (direct or indirect) dependencies:
@@ -3836,21 +3798,6 @@ if test "$enable_winex11_ime_check_thread_data" -eq 1; then
patch_apply winex11-ime-check-thread-data/0001-winex11.drv-handle-missing-thread-data-in-X11DRV_get_ic.patch
fi
# Patchset winex11-key_translation
# |
# | This patchset fixes the following Wine bugs:
# | * [#30984] Improve key translation.
# | * [#45605] Letter keys doesn't work in DirectX aplications
# |
# | Modified files:
# | * dlls/winex11.drv/keyboard.c
# |
if test "$enable_winex11_key_translation" -eq 1; then
patch_apply winex11-key_translation/0001-winex11-Match-keyboard-in-Unicode.patch
patch_apply winex11-key_translation/0002-winex11-Fix-more-key-translation.patch
patch_apply winex11-key_translation/0003-winex11.drv-Fix-main-Russian-keyboard-layout.patch
fi
# Patchset winex11-wglShareLists
# |
# | This patchset fixes the following Wine bugs:

View File

@@ -1,14 +1,14 @@
From 0aab7e8ef8f33b63fd3589ecf3413822cc36c37b Mon Sep 17 00:00:00 2001
From 5326c101e7cd8f0d0197319fd0d7d652d845c20e Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Wed, 22 Sep 2021 19:01:44 +1000
Subject: [PATCH 4/8] sapi: EnumTokens setup enumeration members
Subject: [PATCH] sapi: EnumTokens setup enumeration members
---
dlls/sapi/token.c | 47 ++++++++++++++++++++++++++++++-----------------
1 file changed, 30 insertions(+), 17 deletions(-)
dlls/sapi/token.c | 48 ++++++++++++++++++++++++++++++-----------------
1 file changed, 31 insertions(+), 17 deletions(-)
diff --git a/dlls/sapi/token.c b/dlls/sapi/token.c
index 0a160455d2b..6bf66bc0d5b 100644
index 853dc2fd21f..957ef77b41e 100644
--- a/dlls/sapi/token.c
+++ b/dlls/sapi/token.c
@@ -48,6 +48,22 @@ static struct data_key *impl_from_ISpRegDataKey( ISpRegDataKey *iface )
@@ -95,6 +95,14 @@ index 0a160455d2b..6bf66bc0d5b 100644
heap_free( This->req );
heap_free( This->opt );
heap_free( This );
@@ -817,6 +830,7 @@ HRESULT token_enum_create( IUnknown *outer, REFIID iid, void **obj )
This->opt = NULL;
This->init = FALSE;
This->count = 0;
+ This->key = NULL;
hr = ISpObjectTokenEnumBuilder_QueryInterface( &This->ISpObjectTokenEnumBuilder_iface, iid, obj );
--
2.33.0
2.35.1

View File

@@ -1,39 +1,74 @@
From ef059a443a88414b0c551608b5f8302002d5f6f0 Mon Sep 17 00:00:00 2001
From dad59a707bbb8a8d7be8132743f47465f235c929 Mon Sep 17 00:00:00 2001
From: Alistair Leslie-Hughes <leslie_alistair@hotmail.com>
Date: Tue, 28 Sep 2021 14:41:16 +1000
Subject: [PATCH] sapi: Return dump object in ISpObjectTokenEnumBuilder Next
---
dlls/sapi/token.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)
dlls/sapi/token.c | 30 +++++++++++++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)
diff --git a/dlls/sapi/token.c b/dlls/sapi/token.c
index 859d916fa43..12b3e0e8a6e 100644
index c9c17a58589..55194feab22 100644
--- a/dlls/sapi/token.c
+++ b/dlls/sapi/token.c
@@ -705,6 +705,7 @@ static HRESULT WINAPI token_enum_Next( ISpObjectTokenEnumBuilder *iface,
@@ -57,6 +57,7 @@ struct token_enum
WCHAR *req, *opt;
ULONG count;
HKEY key;
+ DWORD index;
};
static struct token_enum *impl_from_ISpObjectTokenEnumBuilder( ISpObjectTokenEnumBuilder *iface )
@@ -705,6 +706,12 @@ static HRESULT WINAPI token_enum_Next( ISpObjectTokenEnumBuilder *iface,
ULONG *fetched )
{
struct token_enum *This = impl_from_ISpObjectTokenEnumBuilder( iface );
+ struct object_token *object;
+ HRESULT hr;
+ DWORD retCode;
+ WCHAR subKeyName[128];
+ DWORD size_sub = sizeof(subKeyName);
+ HKEY sub_key;
TRACE( "(%p)->(%lu %p %p)\n", This, num, tokens, fetched );
@@ -712,8 +713,12 @@ static HRESULT WINAPI token_enum_Next( ISpObjectTokenEnumBuilder *iface,
@@ -713,7 +720,27 @@ static HRESULT WINAPI token_enum_Next( ISpObjectTokenEnumBuilder *iface,
FIXME( "semi-stub: Returning an empty enumerator\n" );
- if (fetched) *fetched = 0;
if (fetched) *fetched = 0;
- return S_FALSE;
+ *tokens = NULL;
+
+ retCode = RegEnumKeyExW(This->key, This->index, subKeyName, &size_sub, NULL, NULL, NULL, NULL);
+ if (retCode != ERROR_SUCCESS)
+ return S_FALSE;
+
+ This->index++;
+
+ if( RegOpenKeyExW( This->key, subKeyName, 0, KEY_READ, &sub_key ) != ERROR_SUCCESS )
+ return E_FAIL;
+
+ hr = token_create( NULL, &IID_ISpObjectToken, (void**)tokens );
+ if (FAILED(hr))
+ return hr;
+
+ object = impl_from_ISpObjectToken( *tokens );
+ object->token_key = sub_key;
+ object->token_id = heap_strdupW( subKeyName );
+
+ if (fetched) *fetched = 1;
+ return hr;
}
static HRESULT WINAPI token_enum_Skip( ISpObjectTokenEnumBuilder *iface,
@@ -882,6 +909,7 @@ HRESULT token_enum_create( IUnknown *outer, REFIID iid, void **obj )
This->init = FALSE;
This->count = 0;
This->key = NULL;
+ This->index = 0;
hr = ISpObjectTokenEnumBuilder_QueryInterface( &This->ISpObjectTokenEnumBuilder_iface, iid, obj );
--
2.34.1
2.35.1

View File

@@ -1,167 +0,0 @@
From d0142599d03573c50c889a7f9091a9ff2459304b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
Date: Thu, 1 Apr 2021 23:19:18 +0200
Subject: [PATCH] server: Create message queue and thread input in
set_key_state.
This marks one test case as todo, but it was an outlier, and the 'X' key
state is now wrong in all cases. Overall this makes the tests results
more coherent.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=26269
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=27238
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=31899
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=35907
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45385
---
dlls/user32/tests/input.c | 52 +++++++++++++++++++--------------------
server/queue.c | 3 ++-
2 files changed, 28 insertions(+), 27 deletions(-)
diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c
index 6cbf0d6254e..853c0f66df6 100644
--- a/dlls/user32/tests/input.c
+++ b/dlls/user32/tests/input.c
@@ -3962,8 +3962,8 @@ struct get_key_state_thread_params
int index;
};
-#define check_get_keyboard_state(i, j, c, x, todo_c, todo_x) check_get_keyboard_state_(i, j, c, x, todo_c, todo_x, __LINE__)
-static void check_get_keyboard_state_(int i, int j, int c, int x, int todo_c, int todo_x, int line)
+#define check_get_keyboard_state(i, j, c, x, todo_x) check_get_keyboard_state_(i, j, c, x, todo_x, __LINE__)
+static void check_get_keyboard_state_(int i, int j, int c, int x, int todo_x, int line)
{
unsigned char keystate[256];
BOOL ret;
@@ -3972,18 +3972,18 @@ static void check_get_keyboard_state_(int i, int j, int c, int x, int todo_c, in
ret = GetKeyboardState(keystate);
ok_(__FILE__, line)(ret, "GetKeyboardState failed, %lu\n", GetLastError());
todo_wine_if(todo_x) ok_(__FILE__, line)(!(keystate['X'] & 0x80) == !x, "%d:%d: expected that X keystate is %s\n", i, j, x ? "set" : "unset");
- todo_wine_if(todo_c) ok_(__FILE__, line)(!(keystate['C'] & 0x80) == !c, "%d:%d: expected that C keystate is %s\n", i, j, c ? "set" : "unset");
+ ok_(__FILE__, line)(!(keystate['C'] & 0x80) == !c, "%d:%d: expected that C keystate is %s\n", i, j, c ? "set" : "unset");
/* calling it twice shouldn't change */
memset(keystate, 0, sizeof(keystate));
ret = GetKeyboardState(keystate);
ok_(__FILE__, line)(ret, "GetKeyboardState failed, %lu\n", GetLastError());
todo_wine_if(todo_x) ok_(__FILE__, line)(!(keystate['X'] & 0x80) == !x, "%d:%d: expected that X keystate is %s\n", i, j, x ? "set" : "unset");
- todo_wine_if(todo_c) ok_(__FILE__, line)(!(keystate['C'] & 0x80) == !c, "%d:%d: expected that C keystate is %s\n", i, j, c ? "set" : "unset");
+ ok_(__FILE__, line)(!(keystate['C'] & 0x80) == !c, "%d:%d: expected that C keystate is %s\n", i, j, c ? "set" : "unset");
}
-#define check_get_key_state(i, j, c, x, todo_c, todo_x) check_get_key_state_(i, j, c, x, todo_c, todo_x, __LINE__)
-static void check_get_key_state_(int i, int j, int c, int x, int todo_c, int todo_x, int line)
+#define check_get_key_state(i, j, c, x, todo_x) check_get_key_state_(i, j, c, x, todo_x, __LINE__)
+static void check_get_key_state_(int i, int j, int c, int x, int todo_x, int line)
{
SHORT state;
@@ -3992,7 +3992,7 @@ static void check_get_key_state_(int i, int j, int c, int x, int todo_c, int tod
ok_(__FILE__, line)(!(state & 0x007e), "%d:%d: expected that X undefined bits are unset, got %#x\n", i, j, state);
state = GetKeyState('C');
- todo_wine_if(todo_c) ok_(__FILE__, line)(!(state & 0x8000) == !c, "%d:%d: expected that C highest bit is %s, got %#x\n", i, j, c ? "set" : "unset", state);
+ ok_(__FILE__, line)(!(state & 0x8000) == !c, "%d:%d: expected that C highest bit is %s, got %#x\n", i, j, c ? "set" : "unset", state);
ok_(__FILE__, line)(!(state & 0x007e), "%d:%d: expected that C undefined bits are unset, got %#x\n", i, j, state);
}
@@ -4009,7 +4009,7 @@ static DWORD WINAPI get_key_state_thread(void *arg)
int i = params->index, j;
test = get_key_state_tests + i;
- has_queue = test->peek_message;
+ has_queue = test->peek_message || test->set_keyboard_state;
if (test->peek_message)
{
@@ -4042,18 +4042,18 @@ static DWORD WINAPI get_key_state_thread(void *arg)
if (test->set_keyboard_state) expect_c = TRUE;
else expect_c = FALSE;
- check_get_keyboard_state(i, j, expect_c, FALSE, /* todo */ i == 6, !has_queue);
- check_get_key_state(i, j, expect_c, expect_x, /* todo */ i == 6, i != 6 && (has_queue || j == 0));
- check_get_keyboard_state(i, j, expect_c, expect_x, /* todo */ i == 6, i != 6 && (has_queue || j == 0));
+ check_get_keyboard_state(i, j, expect_c, FALSE, /* todo */ !has_queue);
+ check_get_key_state(i, j, expect_c, expect_x, /* todo */ has_queue || j == 0);
+ check_get_keyboard_state(i, j, expect_c, expect_x, /* todo */ has_queue || j == 0);
/* key released */
ReleaseSemaphore(semaphores[0], 1, NULL);
result = WaitForSingleObject(semaphores[1], 1000);
ok(result == WAIT_OBJECT_0, "%d: WaitForSingleObject returned %lu\n", i, result);
- check_get_keyboard_state(i, j, expect_c, expect_x, /* todo */ i == 6, has_queue || i == 6 || j > 0);
- check_get_key_state(i, j, expect_c, FALSE, /* todo */ i == 6, FALSE);
- check_get_keyboard_state(i, j, expect_c, FALSE, /* todo */ i == 6, FALSE);
+ check_get_keyboard_state(i, j, expect_c, expect_x, /* todo */ has_queue || j > 0);
+ check_get_key_state(i, j, expect_c, FALSE, /* todo */ FALSE);
+ check_get_keyboard_state(i, j, expect_c, FALSE, /* todo */ FALSE);
}
return 0;
@@ -4121,18 +4121,18 @@ static void test_GetKeyState(void)
}
else expect_c = FALSE;
- check_get_keyboard_state(i, j, expect_c, FALSE, /* todo */ FALSE, FALSE);
- check_get_key_state(i, j, expect_c, FALSE, /* todo */ FALSE, FALSE);
- check_get_keyboard_state(i, j, expect_c, FALSE, /* todo */ FALSE, FALSE);
+ check_get_keyboard_state(i, j, expect_c, FALSE, /* todo */ FALSE);
+ check_get_key_state(i, j, expect_c, FALSE, /* todo */ FALSE);
+ check_get_keyboard_state(i, j, expect_c, FALSE, /* todo */ FALSE);
if (test->peek_message_main) while (PeekMessageA(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessageA(&msg);
if (test->peek_message_main) expect_x = TRUE;
else expect_x = FALSE;
- check_get_keyboard_state(i, j, expect_c, expect_x, /* todo */ FALSE, FALSE);
- check_get_key_state(i, j, expect_c, expect_x, /* todo */ FALSE, FALSE);
- check_get_keyboard_state(i, j, expect_c, expect_x, /* todo */ FALSE, FALSE);
+ check_get_keyboard_state(i, j, expect_c, expect_x, /* todo */ FALSE);
+ check_get_key_state(i, j, expect_c, expect_x, /* todo */ FALSE);
+ check_get_keyboard_state(i, j, expect_c, expect_x, /* todo */ FALSE);
ReleaseSemaphore(params.semaphores[1], 1, NULL);
@@ -4148,15 +4148,15 @@ static void test_GetKeyState(void)
SetKeyboardState(keystate);
}
- check_get_keyboard_state(i, j, FALSE, expect_x, /* todo */ FALSE, FALSE);
- check_get_key_state(i, j, FALSE, expect_x, /* todo */ FALSE, FALSE);
- check_get_keyboard_state(i, j, FALSE, expect_x, /* todo */ FALSE, FALSE);
+ check_get_keyboard_state(i, j, FALSE, expect_x, /* todo */ FALSE);
+ check_get_key_state(i, j, FALSE, expect_x, /* todo */ FALSE);
+ check_get_keyboard_state(i, j, FALSE, expect_x, /* todo */ FALSE);
if (test->peek_message_main) while (PeekMessageA(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessageA(&msg);
- check_get_keyboard_state(i, j, FALSE, FALSE, /* todo */ FALSE, FALSE);
- check_get_key_state(i, j, FALSE, FALSE, /* todo */ FALSE, FALSE);
- check_get_keyboard_state(i, j, FALSE, FALSE, /* todo */ FALSE, FALSE);
+ check_get_keyboard_state(i, j, FALSE, FALSE, /* todo */ FALSE);
+ check_get_key_state(i, j, FALSE, FALSE, /* todo */ FALSE);
+ check_get_keyboard_state(i, j, FALSE, FALSE, /* todo */ FALSE);
ReleaseSemaphore(params.semaphores[1], 1, NULL);
}
diff --git a/server/queue.c b/server/queue.c
index 4f69a082b74..561fa825ee7 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -3080,9 +3080,10 @@ DECL_HANDLER(get_key_state)
DECL_HANDLER(set_key_state)
{
struct desktop *desktop;
+ struct msg_queue *queue = get_current_queue();
data_size_t size = min( 256, get_req_data_size() );
- if (current->queue) memcpy( current->queue->input->keystate, get_req_data(), size );
+ memcpy( queue->input->keystate, get_req_data(), size );
if (req->async && (desktop = get_thread_desktop( current, 0 )))
{
memcpy( desktop->keystate, get_req_data(), size );
--
2.35.1

View File

@@ -1,187 +0,0 @@
From ffa3222c7cfdd76ec21342e9540b01073d2e4bd7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
Date: Thu, 1 Apr 2021 23:30:46 +0200
Subject: [PATCH] server: Lock thread input keystate whenever it is modified.
And synchronize it with desktop async keystate, on GetKeyState calls,
if it is not locked yet.
Based on a patch from Sebastian Lackner <sebastian@fds-team.de>.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=26269
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=27238
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=31899
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=35907
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45385
---
dlls/user32/tests/input.c | 6 ++---
server/queue.c | 51 ++++++++++++++++++++++++++++++++++++++-
2 files changed, 53 insertions(+), 4 deletions(-)
diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c
index 853c0f66df6..848b52d3870 100644
--- a/dlls/user32/tests/input.c
+++ b/dlls/user32/tests/input.c
@@ -4043,15 +4043,15 @@ static DWORD WINAPI get_key_state_thread(void *arg)
else expect_c = FALSE;
check_get_keyboard_state(i, j, expect_c, FALSE, /* todo */ !has_queue);
- check_get_key_state(i, j, expect_c, expect_x, /* todo */ has_queue || j == 0);
- check_get_keyboard_state(i, j, expect_c, expect_x, /* todo */ has_queue || j == 0);
+ check_get_key_state(i, j, expect_c, expect_x, /* todo */ !has_queue && j == 0);
+ check_get_keyboard_state(i, j, expect_c, expect_x, /* todo */ !has_queue && j == 0);
/* key released */
ReleaseSemaphore(semaphores[0], 1, NULL);
result = WaitForSingleObject(semaphores[1], 1000);
ok(result == WAIT_OBJECT_0, "%d: WaitForSingleObject returned %lu\n", i, result);
- check_get_keyboard_state(i, j, expect_c, expect_x, /* todo */ has_queue || j > 0);
+ check_get_keyboard_state(i, j, expect_c, expect_x, /* todo */ !has_queue && j > 0);
check_get_key_state(i, j, expect_c, FALSE, /* todo */ FALSE);
check_get_keyboard_state(i, j, expect_c, FALSE, /* todo */ FALSE);
}
diff --git a/server/queue.c b/server/queue.c
index 561fa825ee7..9e0b9836965 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -112,6 +112,8 @@ struct thread_input
int cursor_count; /* cursor show count */
struct list msg_list; /* list of hardware messages */
unsigned char keystate[256]; /* state of each key */
+ unsigned char desktop_keystate[256]; /* desktop keystate when keystate was synced */
+ int keystate_lock; /* keystate is locked */
};
struct msg_queue
@@ -138,6 +140,7 @@ struct msg_queue
struct thread_input *input; /* thread input descriptor */
struct hook_table *hooks; /* hook table */
timeout_t last_get_msg; /* time of last get message call */
+ int keystate_lock; /* owns an input keystate lock */
};
struct hotkey
@@ -263,12 +266,14 @@ static struct thread_input *create_thread_input( struct thread *thread )
list_init( &input->msg_list );
set_caret_window( input, 0 );
memset( input->keystate, 0, sizeof(input->keystate) );
+ input->keystate_lock = 0;
if (!(input->desktop = get_thread_desktop( thread, 0 /* FIXME: access rights */ )))
{
release_object( input );
return NULL;
}
+ memcpy( input->desktop_keystate, input->desktop->keystate, sizeof(input->desktop_keystate) );
}
return input;
}
@@ -303,6 +308,7 @@ static struct msg_queue *create_msg_queue( struct thread *thread, struct thread_
queue->input = (struct thread_input *)grab_object( input );
queue->hooks = NULL;
queue->last_get_msg = current_time;
+ queue->keystate_lock = 0;
list_init( &queue->send_result );
list_init( &queue->callback_result );
list_init( &queue->pending_timers );
@@ -324,6 +330,31 @@ void free_msg_queue( struct thread *thread )
thread->queue = NULL;
}
+/* synchronize thread input keystate with the desktop */
+static void sync_input_keystate( struct thread_input *input )
+{
+ int i;
+ if (!input->desktop || input->keystate_lock) return;
+ for (i = 0; i < sizeof(input->keystate); ++i)
+ {
+ if (input->desktop_keystate[i] == input->desktop->keystate[i]) continue;
+ input->keystate[i] = input->desktop_keystate[i] = input->desktop->keystate[i];
+ }
+}
+
+/* locks thread input keystate to prevent synchronization */
+static void lock_input_keystate( struct thread_input *input )
+{
+ input->keystate_lock++;
+}
+
+/* unlock the thread input keystate and synchronize it again */
+static void unlock_input_keystate( struct thread_input *input )
+{
+ input->keystate_lock--;
+ if (!input->keystate_lock) sync_input_keystate( input );
+}
+
/* change the thread input data of a given thread */
static int assign_thread_input( struct thread *thread, struct thread_input *new_input )
{
@@ -337,9 +368,11 @@ static int assign_thread_input( struct thread *thread, struct thread_input *new_
if (queue->input)
{
queue->input->cursor_count -= queue->cursor_count;
+ if (queue->keystate_lock) unlock_input_keystate( queue->input );
release_object( queue->input );
}
queue->input = (struct thread_input *)grab_object( new_input );
+ if (queue->keystate_lock) lock_input_keystate( queue->input );
new_input->cursor_count += queue->cursor_count;
return 1;
}
@@ -476,6 +509,11 @@ static inline int is_signaled( struct msg_queue *queue )
/* set some queue bits */
static inline void set_queue_bits( struct msg_queue *queue, unsigned int bits )
{
+ if (bits & (QS_KEY | QS_MOUSEBUTTON))
+ {
+ if (!queue->keystate_lock) lock_input_keystate( queue->input );
+ queue->keystate_lock = 1;
+ }
queue->wake_bits |= bits;
queue->changed_bits |= bits;
if (is_signaled( queue )) wake_up( &queue->obj, 0 );
@@ -486,6 +524,11 @@ static inline void clear_queue_bits( struct msg_queue *queue, unsigned int bits
{
queue->wake_bits &= ~bits;
queue->changed_bits &= ~bits;
+ if (!(queue->wake_bits & (QS_KEY | QS_MOUSEBUTTON)))
+ {
+ if (queue->keystate_lock) unlock_input_keystate( queue->input );
+ queue->keystate_lock = 0;
+ }
}
/* check whether msg is a keyboard message */
@@ -1030,6 +1073,7 @@ static void msg_queue_destroy( struct object *obj )
}
if (queue->timeout) remove_timeout_user( queue->timeout );
queue->input->cursor_count -= queue->cursor_count;
+ if (queue->keystate_lock) unlock_input_keystate( queue->input );
release_object( queue->input );
if (queue->hooks) release_object( queue->hooks );
if (queue->fd) release_object( queue->fd );
@@ -3070,7 +3114,11 @@ DECL_HANDLER(get_key_state)
else
{
unsigned char *keystate = current->queue->input->keystate;
- if (req->key >= 0) reply->state = keystate[req->key & 0xff];
+ if (req->key >= 0)
+ {
+ if (current->queue) sync_input_keystate( current->queue->input );
+ reply->state = keystate[req->key & 0xff];
+ }
set_reply_data( keystate, size );
}
}
@@ -3084,6 +3132,7 @@ DECL_HANDLER(set_key_state)
data_size_t size = min( 256, get_req_data_size() );
memcpy( queue->input->keystate, get_req_data(), size );
+ memcpy( queue->input->desktop_keystate, queue->input->desktop->keystate, 256 );
if (req->async && (desktop = get_thread_desktop( current, 0 )))
{
memcpy( desktop->keystate, get_req_data(), size );
--
2.35.1

View File

@@ -1,172 +0,0 @@
From b93e17f4dbd548edff543c2607755ba0d7a844d0 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
Date: Thu, 1 Apr 2021 23:41:31 +0200
Subject: [PATCH] server: Create message queue and thread input in
get_key_state.
This removes the fallback to desktop async keystate and uses instead the
keystate synchronization logic in all cases.
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=26269
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=27238
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=31899
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=35907
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=45385
---
dlls/user32/tests/input.c | 50 +++++++++++++++++++--------------------
server/queue.c | 18 +++-----------
2 files changed, 28 insertions(+), 40 deletions(-)
diff --git a/dlls/user32/tests/input.c b/dlls/user32/tests/input.c
index 848b52d3870..71eaace7d7f 100644
--- a/dlls/user32/tests/input.c
+++ b/dlls/user32/tests/input.c
@@ -3962,8 +3962,8 @@ struct get_key_state_thread_params
int index;
};
-#define check_get_keyboard_state(i, j, c, x, todo_x) check_get_keyboard_state_(i, j, c, x, todo_x, __LINE__)
-static void check_get_keyboard_state_(int i, int j, int c, int x, int todo_x, int line)
+#define check_get_keyboard_state(i, j, c, x) check_get_keyboard_state_(i, j, c, x, __LINE__)
+static void check_get_keyboard_state_(int i, int j, int c, int x, int line)
{
unsigned char keystate[256];
BOOL ret;
@@ -3971,24 +3971,24 @@ static void check_get_keyboard_state_(int i, int j, int c, int x, int todo_x, in
memset(keystate, 0, sizeof(keystate));
ret = GetKeyboardState(keystate);
ok_(__FILE__, line)(ret, "GetKeyboardState failed, %lu\n", GetLastError());
- todo_wine_if(todo_x) ok_(__FILE__, line)(!(keystate['X'] & 0x80) == !x, "%d:%d: expected that X keystate is %s\n", i, j, x ? "set" : "unset");
+ ok_(__FILE__, line)(!(keystate['X'] & 0x80) == !x, "%d:%d: expected that X keystate is %s\n", i, j, x ? "set" : "unset");
ok_(__FILE__, line)(!(keystate['C'] & 0x80) == !c, "%d:%d: expected that C keystate is %s\n", i, j, c ? "set" : "unset");
/* calling it twice shouldn't change */
memset(keystate, 0, sizeof(keystate));
ret = GetKeyboardState(keystate);
ok_(__FILE__, line)(ret, "GetKeyboardState failed, %lu\n", GetLastError());
- todo_wine_if(todo_x) ok_(__FILE__, line)(!(keystate['X'] & 0x80) == !x, "%d:%d: expected that X keystate is %s\n", i, j, x ? "set" : "unset");
+ ok_(__FILE__, line)(!(keystate['X'] & 0x80) == !x, "%d:%d: expected that X keystate is %s\n", i, j, x ? "set" : "unset");
ok_(__FILE__, line)(!(keystate['C'] & 0x80) == !c, "%d:%d: expected that C keystate is %s\n", i, j, c ? "set" : "unset");
}
-#define check_get_key_state(i, j, c, x, todo_x) check_get_key_state_(i, j, c, x, todo_x, __LINE__)
-static void check_get_key_state_(int i, int j, int c, int x, int todo_x, int line)
+#define check_get_key_state(i, j, c, x) check_get_key_state_(i, j, c, x, __LINE__)
+static void check_get_key_state_(int i, int j, int c, int x, int line)
{
SHORT state;
state = GetKeyState('X');
- todo_wine_if(todo_x) ok_(__FILE__, line)(!(state & 0x8000) == !x, "%d:%d: expected that X highest bit is %s, got %#x\n", i, j, x ? "set" : "unset", state);
+ ok_(__FILE__, line)(!(state & 0x8000) == !x, "%d:%d: expected that X highest bit is %s, got %#x\n", i, j, x ? "set" : "unset", state);
ok_(__FILE__, line)(!(state & 0x007e), "%d:%d: expected that X undefined bits are unset, got %#x\n", i, j, state);
state = GetKeyState('C');
@@ -4042,18 +4042,18 @@ static DWORD WINAPI get_key_state_thread(void *arg)
if (test->set_keyboard_state) expect_c = TRUE;
else expect_c = FALSE;
- check_get_keyboard_state(i, j, expect_c, FALSE, /* todo */ !has_queue);
- check_get_key_state(i, j, expect_c, expect_x, /* todo */ !has_queue && j == 0);
- check_get_keyboard_state(i, j, expect_c, expect_x, /* todo */ !has_queue && j == 0);
+ check_get_keyboard_state(i, j, expect_c, FALSE);
+ check_get_key_state(i, j, expect_c, expect_x);
+ check_get_keyboard_state(i, j, expect_c, expect_x);
/* key released */
ReleaseSemaphore(semaphores[0], 1, NULL);
result = WaitForSingleObject(semaphores[1], 1000);
ok(result == WAIT_OBJECT_0, "%d: WaitForSingleObject returned %lu\n", i, result);
- check_get_keyboard_state(i, j, expect_c, expect_x, /* todo */ !has_queue && j > 0);
- check_get_key_state(i, j, expect_c, FALSE, /* todo */ FALSE);
- check_get_keyboard_state(i, j, expect_c, FALSE, /* todo */ FALSE);
+ check_get_keyboard_state(i, j, expect_c, expect_x);
+ check_get_key_state(i, j, expect_c, FALSE);
+ check_get_keyboard_state(i, j, expect_c, FALSE);
}
return 0;
@@ -4121,18 +4121,18 @@ static void test_GetKeyState(void)
}
else expect_c = FALSE;
- check_get_keyboard_state(i, j, expect_c, FALSE, /* todo */ FALSE);
- check_get_key_state(i, j, expect_c, FALSE, /* todo */ FALSE);
- check_get_keyboard_state(i, j, expect_c, FALSE, /* todo */ FALSE);
+ check_get_keyboard_state(i, j, expect_c, FALSE);
+ check_get_key_state(i, j, expect_c, FALSE);
+ check_get_keyboard_state(i, j, expect_c, FALSE);
if (test->peek_message_main) while (PeekMessageA(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessageA(&msg);
if (test->peek_message_main) expect_x = TRUE;
else expect_x = FALSE;
- check_get_keyboard_state(i, j, expect_c, expect_x, /* todo */ FALSE);
- check_get_key_state(i, j, expect_c, expect_x, /* todo */ FALSE);
- check_get_keyboard_state(i, j, expect_c, expect_x, /* todo */ FALSE);
+ check_get_keyboard_state(i, j, expect_c, expect_x);
+ check_get_key_state(i, j, expect_c, expect_x);
+ check_get_keyboard_state(i, j, expect_c, expect_x);
ReleaseSemaphore(params.semaphores[1], 1, NULL);
@@ -4148,15 +4148,15 @@ static void test_GetKeyState(void)
SetKeyboardState(keystate);
}
- check_get_keyboard_state(i, j, FALSE, expect_x, /* todo */ FALSE);
- check_get_key_state(i, j, FALSE, expect_x, /* todo */ FALSE);
- check_get_keyboard_state(i, j, FALSE, expect_x, /* todo */ FALSE);
+ check_get_keyboard_state(i, j, FALSE, expect_x);
+ check_get_key_state(i, j, FALSE, expect_x);
+ check_get_keyboard_state(i, j, FALSE, expect_x);
if (test->peek_message_main) while (PeekMessageA(&msg, NULL, 0, 0, PM_REMOVE)) DispatchMessageA(&msg);
- check_get_keyboard_state(i, j, FALSE, FALSE, /* todo */ FALSE);
- check_get_key_state(i, j, FALSE, FALSE, /* todo */ FALSE);
- check_get_keyboard_state(i, j, FALSE, FALSE, /* todo */ FALSE);
+ check_get_keyboard_state(i, j, FALSE, FALSE);
+ check_get_key_state(i, j, FALSE, FALSE);
+ check_get_keyboard_state(i, j, FALSE, FALSE);
ReleaseSemaphore(params.semaphores[1], 1, NULL);
}
diff --git a/server/queue.c b/server/queue.c
index 9e0b9836965..d79add56fba 100644
--- a/server/queue.c
+++ b/server/queue.c
@@ -3098,25 +3098,13 @@ DECL_HANDLER(get_key_state)
set_reply_data( desktop->keystate, size );
release_object( desktop );
}
- else if (!current->queue)
- {
- unsigned char *keystate;
- /* fallback to desktop keystate */
- if (!(desktop = get_thread_desktop( current, 0 ))) return;
- if (req->key >= 0) reply->state = desktop->keystate[req->key & 0xff] & ~0x40;
- if ((keystate = set_reply_data_size( size )))
- {
- unsigned int i;
- for (i = 0; i < size; i++) keystate[i] = desktop->keystate[i] & ~0x40;
- }
- release_object( desktop );
- }
else
{
- unsigned char *keystate = current->queue->input->keystate;
+ struct msg_queue *queue = get_current_queue();
+ unsigned char *keystate = queue->input->keystate;
if (req->key >= 0)
{
- if (current->queue) sync_input_keystate( current->queue->input );
+ sync_input_keystate( queue->input );
reply->state = keystate[req->key & 0xff];
}
set_reply_data( keystate, size );
--
2.35.1

View File

@@ -1,5 +0,0 @@
Fixes: [26269] BioShock 2: Loss of keyboard input on loading screen
# Fixes: [27238] Tesla: The Weather Man demo: movement keys not working (GetKeyState should fallback to GetAsyncKeyState for threads without message queue)
Fixes: [31899] No keyboard input in La-Mulana remake (GetKeyState should behave similar to GetAsyncKeyState for specific window messages / queue states)
Fixes: [35907] Caps Lock state gets confused with multiple processes/threads
Fixes: [45385] Wrong state of virtual keys after cycling windows. Usually VK_MENU, VK_SHIFT and VK_CONTROL, but every key can be affected.

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