You've already forked wine-staging
mirror of
https://gitlab.winehq.org/wine/wine-staging.git
synced 2025-04-13 14:42:51 -07:00
Compare commits
38 Commits
Author | SHA1 | Date | |
---|---|---|---|
|
8382473334 | ||
|
699309db0f | ||
|
828a61e0bb | ||
|
6a9fb5a923 | ||
|
38391a1d70 | ||
|
486d9f3f74 | ||
|
9c37968a29 | ||
|
0f597ea71c | ||
|
cd7567fdc1 | ||
|
d7507fbe00 | ||
|
50067e77d5 | ||
|
ad3c7cfc9a | ||
|
5117eec7bf | ||
|
8a35065016 | ||
|
55c6cecd5c | ||
|
7de1ccb1fa | ||
|
b54ac2f2b2 | ||
|
9e823e7f3e | ||
|
87212e802d | ||
|
91cb025138 | ||
|
d589a0bc44 | ||
|
7b5a66b852 | ||
|
9d853b7c44 | ||
|
9df73ee345 | ||
|
6b4b9f1b5a | ||
|
9e6939027d | ||
|
5147239513 | ||
|
fff59d624e | ||
|
2aab2d521a | ||
|
ccce92e0d3 | ||
|
cc4ecadad0 | ||
|
0b3309a201 | ||
|
9ddf82d860 | ||
|
de2f0fee6f | ||
|
94f94f3843 | ||
|
1c911ccb63 | ||
|
53fb22354e | ||
|
1e406a4196 |
@@ -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
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
@@ -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
|
||||
|
||||
|
@@ -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 );
|
||||
|
||||
|
@@ -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;
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -1,2 +0,0 @@
|
||||
Fixes: Add stub for ntoskrnl.Mm{Map,Unmap}LockedPages
|
||||
Fixes: Add stub for ntoskrnl.IoGetDeviceAttachmentBaseRef
|
@@ -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:
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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
Reference in New Issue
Block a user