Compare commits

...

8 Commits
v8.5 ... v8.6

Author SHA1 Message Date
Zebediah Figura
26a1ee0ee9 Release v8.6 2023-04-15 22:16:28 -05:00
Zebediah Figura
9d65092519 Rebase against 4d610717bbc21d65e41a29f9fe9ab5f2963cf16d. 2023-04-15 18:33:17 -05:00
Zebediah Figura
49dcc78363 Rebase against f512b3c08ccfc9b9c235964002e644e2cbd657cf. 2023-04-12 17:10:01 -05:00
Alistair Leslie-Hughes
64774ec3e5 Rebase against 1546ef3015999ee27066b317773050a5641c2023. 2023-04-12 08:17:52 +10:00
Alistair Leslie-Hughes
4211bac798 Rebase against 9909631f23c037e90fe3ef1ccfeebfff2804d7ed. 2023-04-08 14:18:34 +10:00
Alistair Leslie-Hughes
aaa21bda9c Rebase against e658a30a917b0403a1e8f7ed86a8fc0138d990a8. 2023-04-07 08:28:31 +10:00
Alistair Leslie-Hughes
9d5115a9ee Rebase against b5bc026798c127d5bb4c471d94f7fb5e32b4861c. 2023-04-06 09:14:54 +10:00
Alistair Leslie-Hughes
9cb0330037 Rebase against 64cca153292833151d1adeb185252ca57e2d1625. 2023-04-04 10:40:07 +10:00
16 changed files with 129 additions and 497 deletions

View File

@@ -1,4 +1,4 @@
From eba9e414d60a33dfde7e7b978fcdddbaf9bfe5b6 Mon Sep 17 00:00:00 2001
From c7b306e0f85a0cd5ef1f5c0849edc56483989d7c Mon Sep 17 00:00:00 2001
From: Zebediah Figura <z.figura12@gmail.com>
Date: Wed, 21 Oct 2020 16:03:21 -0500
Subject: [PATCH] winegstreamer: Allow videoconvert to parallelize.
@@ -11,19 +11,19 @@ Signed-off-by: Zebediah Figura <z.figura12@gmail.com>
1 file changed, 3 insertions(+)
diff --git a/dlls/winegstreamer/wg_parser.c b/dlls/winegstreamer/wg_parser.c
index 0573c99858b..5df08dc5fd7 100644
index 2fa87ac611b..2b3cc2633e3 100644
--- a/dlls/winegstreamer/wg_parser.c
+++ b/dlls/winegstreamer/wg_parser.c
@@ -760,6 +760,9 @@ static void pad_added_cb(GstElement *element, GstPad *pad, gpointer user)
if (!(vconv = create_element("videoconvert", "base")))
@@ -812,6 +812,9 @@ static void pad_added_cb(GstElement *element, GstPad *pad, gpointer user)
|| !append_element(parser->container, element, &first, &last))
goto out;
+ /* Let GStreamer choose a default number of threads. */
+ gst_util_set_object_arg(G_OBJECT(vconv), "n-threads", "0");
+
/* GStreamer outputs RGB video top-down, but DirectShow expects bottom-up. */
if (!(flip = create_element("videoflip", "good")))
goto out;
if (!(element = create_element("videoflip", "good"))
|| !append_element(parser->container, element, &first, &last))
--
2.37.2
2.39.2

View File

@@ -1,4 +1,4 @@
From 56ad22a46d27fdc5313aff459f6334bb0051e21a Mon Sep 17 00:00:00 2001
From af54761b8536f81831f2813ef0ff9b627dcc5ca4 Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <nsivov@codeweavers.com>
Date: Wed, 12 Jan 2022 22:48:35 +0300
Subject: [PATCH] winegstreamer: Add MFVideoFormat_ARGB32 output for the
@@ -12,10 +12,10 @@ CW-Bug-Id: #19975
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/dlls/winegstreamer/media_source.c b/dlls/winegstreamer/media_source.c
index de6a2c2b232..042c635ae93 100644
index 00c40dc2f47..7a0f65b4247 100644
--- a/dlls/winegstreamer/media_source.c
+++ b/dlls/winegstreamer/media_source.c
@@ -855,7 +855,7 @@ static HRESULT new_media_stream(struct media_source *source,
@@ -856,7 +856,7 @@ static HRESULT new_media_stream(struct media_source *source,
static HRESULT media_stream_init_desc(struct media_stream *stream)
{
IMFMediaTypeHandler *type_handler = NULL;
@@ -24,14 +24,14 @@ index de6a2c2b232..042c635ae93 100644
struct wg_format format;
DWORD type_count = 0;
unsigned int i;
@@ -874,6 +874,7 @@ static HRESULT media_stream_init_desc(struct media_stream *stream)
&MFVideoFormat_YUY2,
&MFVideoFormat_IYUV,
&MFVideoFormat_I420,
+ &MFVideoFormat_ARGB32,
@@ -875,6 +875,7 @@ static HRESULT media_stream_init_desc(struct media_stream *stream)
WG_VIDEO_FORMAT_YV12,
WG_VIDEO_FORMAT_YUY2,
WG_VIDEO_FORMAT_I420,
+ WG_VIDEO_FORMAT_BGRA,
};
IMFMediaType *base_type = mf_media_type_from_wg_format(&format);
--
2.37.2
2.40.0

View File

@@ -1,4 +1,4 @@
From 0dfebc8cb8ed9804c6616fe7eec519b7c3e7ea13 Mon Sep 17 00:00:00 2001
From 3c2f30734ab4ab7a602f1f66d415a245063ee6d8 Mon Sep 17 00:00:00 2001
From: "Erich E. Hoover" <erich.e.hoover@gmail.com>
Date: Thu, 16 Jan 2014 20:56:49 -0700
Subject: [PATCH] ntdll: Add support for creating reparse points.
@@ -13,10 +13,10 @@ Signed-off-by: Erich E. Hoover <erich.e.hoover@gmail.com>
5 files changed, 447 insertions(+), 19 deletions(-)
diff --git a/configure.ac b/configure.ac
index 16c4c33d816..e492a707a48 100644
index c4f34e9e851..ec76805b3e6 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2061,6 +2061,8 @@ AC_CHECK_FUNCS(\
@@ -2025,6 +2025,8 @@ AC_CHECK_FUNCS(\
prctl \
proc_pidinfo \
sched_yield \
@@ -26,12 +26,12 @@ index 16c4c33d816..e492a707a48 100644
setprogname \
sigprocmask \
diff --git a/dlls/ntdll/Makefile.in b/dlls/ntdll/Makefile.in
index 89e4d5bb579..07688a5fcf6 100644
index 2e862c68b7e..f8ca3e689ec 100644
--- a/dlls/ntdll/Makefile.in
+++ b/dlls/ntdll/Makefile.in
@@ -4,7 +4,7 @@ UNIXLIB = ntdll.so
IMPORTLIB = ntdll
IMPORTS = winecrt0
IMPORTS = $(MUSL_PE_LIBS) winecrt0
UNIX_CFLAGS = $(UNWIND_CFLAGS)
-UNIX_LIBS = $(IOKIT_LIBS) $(COREFOUNDATION_LIBS) $(CORESERVICES_LIBS) $(RT_LIBS) $(PTHREAD_LIBS) $(UNWIND_LIBS) $(I386_LIBS) $(PROCSTAT_LIBS)
+UNIX_LIBS = $(IOKIT_LIBS) $(COREFOUNDATION_LIBS) $(CORESERVICES_LIBS) $(RT_LIBS) $(PTHREAD_LIBS) $(UNWIND_LIBS) $(I386_LIBS) $(PROCSTAT_LIBS) -lm
@@ -39,7 +39,7 @@ index 89e4d5bb579..07688a5fcf6 100644
EXTRADLLFLAGS = -nodefaultlibs
i386_EXTRADLLFLAGS = -Wl,--image-base,0x7bc00000
diff --git a/dlls/ntdll/tests/file.c b/dlls/ntdll/tests/file.c
index 98d9e6b3b0a..93e50bd6952 100644
index 6186afdfb63..7f753caef47 100644
--- a/dlls/ntdll/tests/file.c
+++ b/dlls/ntdll/tests/file.c
@@ -38,6 +38,7 @@
@@ -50,7 +50,7 @@ index 98d9e6b3b0a..93e50bd6952 100644
#ifndef IO_COMPLETION_ALL_ACCESS
#define IO_COMPLETION_ALL_ACCESS 0x001F0003
@@ -5326,32 +5327,154 @@ static void test_mailslot_name(void)
@@ -5406,32 +5407,154 @@ static void test_mailslot_name(void)
CloseHandle( device );
}
@@ -101,7 +101,9 @@ index 98d9e6b3b0a..93e50bd6952 100644
+ INT buffer_len;
+ HANDLE handle;
+ BOOL bret;
+
- pRtlInitUnicodeString( &nameW, L"\\??\\C:\\" );
- InitializeObjectAttributes( &attr, &nameW, 0, NULL, NULL );
+ /* Create a temporary folder for the junction point tests */
+ GetTempFileNameW(dotW, fooW, 0, path);
+ DeleteFileW(path);
@@ -110,7 +112,9 @@ index 98d9e6b3b0a..93e50bd6952 100644
+ win_skip("Unable to create a temporary junction point directory.\n");
+ return;
+ }
+
- status = pNtOpenFile( &handle, READ_CONTROL, &attr, &io, 0, 0 );
- ok( !status, "open %s failed %#lx\n", wine_dbgstr_w(nameW.Buffer), status );
+ /* Check that the volume this folder is located on supports junction points */
+ pRtlDosPathNameToNtPathName_U(path, &nameW, NULL, NULL);
+ volW[0] = nameW.Buffer[4];
@@ -127,15 +131,17 @@ index 98d9e6b3b0a..93e50bd6952 100644
+ RemoveDirectoryW(path);
+ return;
+ }
+
- status = pNtFsControlFile( handle, NULL, NULL, NULL, &io, FSCTL_GET_REPARSE_POINT, NULL, 0, NULL, 0 );
- ok( status == STATUS_INVALID_USER_BUFFER, "expected %#lx, got %#lx\n", STATUS_INVALID_USER_BUFFER, status );
+ /* Create the folder to be replaced by a junction point */
+ lstrcpyW(reparse_path, path);
+ lstrcatW(reparse_path, reparseW);
+ bret = CreateDirectoryW(reparse_path, NULL);
+ ok(bret, "Failed to create junction point directory.\n");
- pRtlInitUnicodeString( &nameW, L"\\??\\C:\\" );
- InitializeObjectAttributes( &attr, &nameW, 0, NULL, NULL );
- status = pNtFsControlFile( handle, NULL, NULL, NULL, &io, FSCTL_GET_REPARSE_POINT, NULL, 0, reparse_data, 0 );
- ok( status == STATUS_INVALID_USER_BUFFER, "expected %#lx, got %#lx\n", STATUS_INVALID_USER_BUFFER, status );
+ /* Create a destination folder for the junction point to target */
+ lstrcpyW(target_path, path);
+ for (int i=0; i<1; i++)
@@ -148,8 +154,9 @@ index 98d9e6b3b0a..93e50bd6952 100644
+ ok(bret, "Failed to create junction point target directory.\n");
+ pRtlDosPathNameToNtPathName_U(path, &nameW, NULL, NULL);
- status = pNtOpenFile( &handle, READ_CONTROL, &attr, &io, 0, 0 );
- ok( !status, "open %s failed %#lx\n", wine_dbgstr_w(nameW.Buffer), status );
- /* a volume cannot be a reparse point by definition */
- status = pNtFsControlFile( handle, NULL, NULL, NULL, &io, FSCTL_GET_REPARSE_POINT, NULL, 0, reparse_data, 1 );
- ok( status == STATUS_NOT_A_REPARSE_POINT, "expected %#lx, got %#lx\n", STATUS_NOT_A_REPARSE_POINT, status );
+ /* construct a too long pathname (resulting reparse buffer over 16 kiB limit) */
+ long_path = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, 32767);
+ lstrcpyW(long_path, nameW.Buffer);
@@ -159,7 +166,8 @@ index 98d9e6b3b0a..93e50bd6952 100644
+ lstrcatW(long_path, path);
+ }
+ lstrcatW(long_path, targetW);
+
- CloseHandle( handle );
+ /* Create the junction point */
+ handle = CreateFileW(reparse_path, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING,
+ FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT, 0);
@@ -173,9 +181,7 @@ index 98d9e6b3b0a..93e50bd6952 100644
+ ok(!bret && GetLastError()==ERROR_INVALID_REPARSE_DATA, "Unexpected error (0x%lx)\n", GetLastError());
+ HeapFree(GetProcessHeap(), 0, buffer);
+ CloseHandle(handle);
- status = pNtFsControlFile( handle, NULL, NULL, NULL, &io, FSCTL_GET_REPARSE_POINT, NULL, 0, NULL, 0 );
- ok( status == STATUS_INVALID_USER_BUFFER, "expected %#lx, got %#lx\n", STATUS_INVALID_USER_BUFFER, status );
+
+ /* construct a long pathname to demonstrate correct behavior with very large reparse points */
+ pRtlDosPathNameToNtPathName_U(path, &nameW, NULL, NULL);
+ lstrcpyW(long_path, nameW.Buffer);
@@ -185,16 +191,11 @@ index 98d9e6b3b0a..93e50bd6952 100644
+ lstrcatW(long_path, path);
+ }
+ lstrcatW(long_path, targetW);
- status = pNtFsControlFile( handle, NULL, NULL, NULL, &io, FSCTL_GET_REPARSE_POINT, NULL, 0, reparse_data, 0 );
- ok( status == STATUS_INVALID_USER_BUFFER, "expected %#lx, got %#lx\n", STATUS_INVALID_USER_BUFFER, status );
+
+ /* use a sane (not obscenely long) target for the rest of testing */
+ pRtlFreeUnicodeString(&nameW);
+ pRtlDosPathNameToNtPathName_U(target_path, &nameW, NULL, NULL);
- /* a volume cannot be a reparse point by definition */
- status = pNtFsControlFile( handle, NULL, NULL, NULL, &io, FSCTL_GET_REPARSE_POINT, NULL, 0, reparse_data, 1 );
- ok( status == STATUS_NOT_A_REPARSE_POINT, "expected %#lx, got %#lx\n", STATUS_NOT_A_REPARSE_POINT, status );
+
+ /* Create the junction point */
+ handle = CreateFileW(reparse_path, GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING,
+ FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_OPEN_REPARSE_POINT, 0);
@@ -207,8 +208,7 @@ index 98d9e6b3b0a..93e50bd6952 100644
+ bret = DeviceIoControl(handle, FSCTL_SET_REPARSE_POINT, (LPVOID)buffer, buffer_len, NULL, 0, &dwret, 0);
+ ok(bret, "Failed to create junction point! (0x%lx)\n", GetLastError());
+ CloseHandle(handle);
- CloseHandle( handle );
+
+cleanup:
+ /* Cleanup */
+ pRtlFreeUnicodeString(&nameW);
@@ -222,7 +222,7 @@ index 98d9e6b3b0a..93e50bd6952 100644
}
START_TEST(file)
@@ -5426,6 +5549,6 @@ START_TEST(file)
@@ -5506,6 +5629,6 @@ START_TEST(file)
test_ioctl();
test_query_ea();
test_flush_buffers_file();
@@ -231,7 +231,7 @@ index 98d9e6b3b0a..93e50bd6952 100644
+ test_mailslot_name();
}
diff --git a/dlls/ntdll/unix/file.c b/dlls/ntdll/unix/file.c
index 6b73d9dc7e8..52b85cfc6d1 100644
index eca75b2d4fb..0cef6438c7e 100644
--- a/dlls/ntdll/unix/file.c
+++ b/dlls/ntdll/unix/file.c
@@ -36,6 +36,8 @@
@@ -243,7 +243,7 @@ index 6b73d9dc7e8..52b85cfc6d1 100644
#include <limits.h>
#include <unistd.h>
#ifdef HAVE_MNTENT_H
@@ -121,6 +123,7 @@
@@ -125,6 +127,7 @@
#include "wine/list.h"
#include "wine/debug.h"
#include "unix_private.h"
@@ -251,7 +251,7 @@ index 6b73d9dc7e8..52b85cfc6d1 100644
WINE_DEFAULT_DEBUG_CHANNEL(file);
WINE_DECLARE_DEBUG_CHANNEL(winediag);
@@ -132,6 +135,12 @@ WINE_DECLARE_DEBUG_CHANNEL(winediag);
@@ -136,6 +139,12 @@ WINE_DECLARE_DEBUG_CHANNEL(winediag);
#undef EXT2_IOC_GETFLAGS
#undef EXT4_CASEFOLD_FL
@@ -264,7 +264,7 @@ index 6b73d9dc7e8..52b85cfc6d1 100644
#ifdef linux
/* We want the real kernel dirent structure, not the libc one */
@@ -236,6 +245,95 @@ static const BOOL is_case_sensitive = FALSE;
@@ -247,6 +256,95 @@ static const BOOL is_case_sensitive = FALSE;
static pthread_mutex_t dir_mutex = PTHREAD_MUTEX_INITIALIZER;
static pthread_mutex_t mnt_mutex = PTHREAD_MUTEX_INITIALIZER;
@@ -360,7 +360,7 @@ index 6b73d9dc7e8..52b85cfc6d1 100644
/* check if a given Unicode char is OK in a DOS short name */
static inline BOOL is_invalid_dos_char( WCHAR ch )
{
@@ -1540,6 +1638,28 @@ static int parse_samba_dos_attrib_data( char *data, int len )
@@ -1562,6 +1660,28 @@ static int parse_samba_dos_attrib_data( char *data, int len )
}
@@ -389,7 +389,7 @@ index 6b73d9dc7e8..52b85cfc6d1 100644
static BOOL fd_is_mount_point( int fd, const struct stat *st )
{
struct stat parent;
@@ -3313,6 +3433,181 @@ done:
@@ -3335,6 +3455,181 @@ done:
}
@@ -571,7 +571,7 @@ index 6b73d9dc7e8..52b85cfc6d1 100644
/******************************************************************************
* lookup_unix_name
*
@@ -6072,6 +6367,13 @@ NTSTATUS WINAPI NtFsControlFile( HANDLE handle, HANDLE event, PIO_APC_ROUTINE ap
@@ -6099,6 +6394,13 @@ NTSTATUS WINAPI NtFsControlFile( HANDLE handle, HANDLE event, PIO_APC_ROUTINE ap
break;
}
@@ -586,10 +586,10 @@ index 6b73d9dc7e8..52b85cfc6d1 100644
TRACE("FSCTL_SET_SPARSE: Ignoring request\n");
io->Information = 0;
diff --git a/include/Makefile.in b/include/Makefile.in
index 28ac4b3f2dc..7c69ddbfddf 100644
index f52314e745d..2ec4d835743 100644
--- a/include/Makefile.in
+++ b/include/Makefile.in
@@ -564,6 +564,7 @@ SOURCES = \
@@ -572,6 +572,7 @@ SOURCES = \
ntdef.h \
ntdsapi.h \
ntgdi.h \
@@ -598,5 +598,5 @@ index 28ac4b3f2dc..7c69ddbfddf 100644
ntquery.h \
ntsecapi.h \
--
2.38.1
2.39.2

View File

@@ -1,4 +1,4 @@
From 5cd6a66d34a8844d757413804a6b4b358075993d Mon Sep 17 00:00:00 2001
From a96d0f2e49227bab4a3181ce083afabb65adb950 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
Date: Fri, 17 Jan 2020 16:33:11 +0100
Subject: [PATCH] winex11.drv: Split XInput2 thread initialization.
@@ -93,7 +93,7 @@ index c34f5fde77e..f9cf4a33255 100644
#if defined(SONAME_LIBXI) && defined(HAVE_X11_EXTENSIONS_XINPUT2_H)
int event, error;
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index 10a68779003..a8bbc207007 100644
index 9ceec5ee6d8..dbdb9c530bb 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -258,7 +258,8 @@ extern void X11DRV_ThreadDetach(void) DECLSPEC_HIDDEN;
@@ -107,7 +107,7 @@ index 10a68779003..a8bbc207007 100644
extern DWORD copy_image_bits( BITMAPINFO *info, BOOL is_r8g8b8, XImage *image,
const struct gdi_image_bits *src_bits, struct gdi_image_bits *dst_bits,
diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c
index 03a09a32d8a..657d8f52db0 100644
index 3a1e1973b24..6457c0a0b93 100644
--- a/dlls/winex11.drv/x11drv_main.c
+++ b/dlls/winex11.drv/x11drv_main.c
@@ -704,7 +704,7 @@ static NTSTATUS x11drv_init( void *arg )
@@ -121,7 +121,7 @@ index 03a09a32d8a..657d8f52db0 100644
X11DRV_InitKeyboard( gdi_display );
@@ -794,6 +794,8 @@ struct x11drv_thread_data *x11drv_init_thread_data(void)
if (use_xim) X11DRV_SetupXIM();
if (use_xim) xim_thread_attach( data );
+ x11drv_xinput_init();
+
@@ -129,5 +129,5 @@ index 03a09a32d8a..657d8f52db0 100644
}
--
2.39.2
2.40.0

View File

@@ -1,4 +1,4 @@
From 9f8722c6be41731d7913f804591a0c28999340cf Mon Sep 17 00:00:00 2001
From a09b36f783354e7cdd1e44fc57195b0136c8b2fd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
Date: Thu, 19 Dec 2019 22:34:44 +0100
Subject: [PATCH] winex11.drv: Keep track of pointer and device button
@@ -16,10 +16,10 @@ Original patch by Andrew Eikum <aeikum@codeweavers.com>.
4 files changed, 106 insertions(+), 8 deletions(-)
diff --git a/dlls/winex11.drv/keyboard.c b/dlls/winex11.drv/keyboard.c
index 616728be621..5d02da68313 100644
index b1c47d5258e..c6a167dc4c6 100644
--- a/dlls/winex11.drv/keyboard.c
+++ b/dlls/winex11.drv/keyboard.c
@@ -1863,13 +1863,24 @@ BOOL X11DRV_MappingNotify( HWND dummy, XEvent *event )
@@ -1811,13 +1811,24 @@ BOOL X11DRV_MappingNotify( HWND dummy, XEvent *event )
{
HWND hwnd;
@@ -196,7 +196,7 @@ index 00c55802245..e25b3e7728a 100644
xinput2_available = XQueryExtension( gdi_display, "XInputExtension", &xinput2_opcode, &event, &error );
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index 20172a99853..4394ea6d001 100644
index 7fcb9300ba0..38cacb4d3d4 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -702,6 +702,7 @@ extern void retry_grab_clipping_window(void) DECLSPEC_HIDDEN;
@@ -208,7 +208,7 @@ index 20172a99853..4394ea6d001 100644
extern HWND *build_hwnd_list(void) DECLSPEC_HIDDEN;
diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c
index 657d8f52db0..142bd596dd3 100644
index 6457c0a0b93..e449530749e 100644
--- a/dlls/winex11.drv/x11drv_main.c
+++ b/dlls/winex11.drv/x11drv_main.c
@@ -708,6 +708,7 @@ static NTSTATUS x11drv_init( void *arg )
@@ -216,9 +216,9 @@ index 657d8f52db0..142bd596dd3 100644
XkbUseExtension( gdi_display, NULL, NULL );
X11DRV_InitKeyboard( gdi_display );
+ X11DRV_InitMouse( gdi_display );
if (use_xim) use_xim = X11DRV_InitXIM( input_style );
if (use_xim) use_xim = xim_init( input_style );
init_user_driver();
--
2.39.2
2.40.0

View File

@@ -1,4 +1,4 @@
From 43a54849310a49babfee6c7ea08d92c4535514c3 Mon Sep 17 00:00:00 2001
From 5cf6861a6cff5f3f3bee4694f07ba8679cba607d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <rbernon@codeweavers.com>
Date: Mon, 25 Oct 2021 11:45:47 +0200
Subject: [PATCH] winex11.drv: Listen to RawMotion and RawButton* events in the
@@ -15,7 +15,7 @@ instance used in our dinput implementation.
4 files changed, 112 insertions(+), 8 deletions(-)
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c
index c8833671f12..a7bd4312737 100644
index ff654ae6647..33a3aca953d 100644
--- a/dlls/winex11.drv/event.c
+++ b/dlls/winex11.drv/event.c
@@ -320,6 +320,10 @@ static enum event_merge_action merge_raw_motion_events( XIRawEvent *prev, XIRawE
@@ -54,7 +54,7 @@ index c8833671f12..a7bd4312737 100644
#endif
}
diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c
index 17e88f87982..8547553215c 100644
index bb9807bf850..919cc8c7fb8 100644
--- a/dlls/winex11.drv/mouse.c
+++ b/dlls/winex11.drv/mouse.c
@@ -413,7 +413,18 @@ void x11drv_xinput_enable( Display *display, Window window, long event_mask )
@@ -77,7 +77,7 @@ index 17e88f87982..8547553215c 100644
pXISelectEvents( display, DefaultRootWindow( display ), &mask, 1 );
@@ -767,7 +778,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
@@ -766,7 +777,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
sync_window_cursor( window );
last_cursor_change = input->u.mi.time;
}
@@ -86,7 +86,7 @@ index 17e88f87982..8547553215c 100644
return;
}
@@ -808,7 +819,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
@@ -807,7 +818,7 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
SERVER_END_REQ;
}
@@ -95,7 +95,7 @@ index 17e88f87982..8547553215c 100644
}
#ifdef SONAME_LIBXCURSOR
@@ -1791,7 +1802,6 @@ void move_resize_window( HWND hwnd, int dir )
@@ -1790,7 +1801,6 @@ void move_resize_window( HWND hwnd, int dir )
{
MSG msg;
INPUT input;
@@ -103,7 +103,7 @@ index 17e88f87982..8547553215c 100644
int x, y, rootX, rootY;
if (!XQueryPointer( display, root_window, &root, &child, &rootX, &rootY, &x, &y, &xstate )) break;
@@ -1807,7 +1817,7 @@ void move_resize_window( HWND hwnd, int dir )
@@ -1806,7 +1816,7 @@ void move_resize_window( HWND hwnd, int dir )
input.u.mi.dwFlags = button_up_flags[button - 1] | MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE;
input.u.mi.time = NtGetTickCount();
input.u.mi.dwExtraInfo = 0;
@@ -112,7 +112,7 @@ index 17e88f87982..8547553215c 100644
}
while (NtUserPeekMessage( &msg, 0, 0, 0, PM_REMOVE ))
@@ -2019,6 +2029,7 @@ static BOOL map_raw_event_coords( XIRawEvent *event, INPUT *input )
@@ -2018,6 +2028,7 @@ static BOOL map_raw_event_coords( XIRawEvent *event, INPUT *input )
*/
static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
{
@@ -120,7 +120,7 @@ index 17e88f87982..8547553215c 100644
XIRawEvent *event = xev->data;
RAWINPUT rawinput;
INPUT input;
@@ -2038,7 +2049,85 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
@@ -2037,7 +2048,85 @@ static BOOL X11DRV_RawMotion( XGenericEventCookie *xev )
input.u.mi.dy = 0;
if (!map_raw_event_coords( event, &input )) return FALSE;
@@ -207,7 +207,7 @@ index 17e88f87982..8547553215c 100644
return TRUE;
}
@@ -2114,6 +2203,10 @@ BOOL X11DRV_GenericEvent( HWND hwnd, XEvent *xev )
@@ -2113,6 +2202,10 @@ BOOL X11DRV_GenericEvent( HWND hwnd, XEvent *xev )
case XI_RawMotion:
ret = X11DRV_RawMotion( event );
break;
@@ -219,10 +219,10 @@ index 17e88f87982..8547553215c 100644
default:
TRACE( "Unhandled event %#x\n", event->evtype );
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index 5f1a5ecaecd..7325d3ff9aa 100644
index 38cacb4d3d4..fcae7bbc9df 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -404,6 +404,7 @@ struct x11drv_thread_data
@@ -405,6 +405,7 @@ struct x11drv_thread_data
XIValuatorClassInfo x_valuator;
XIValuatorClassInfo y_valuator;
int xi2_core_pointer; /* XInput2 core pointer id */
@@ -231,10 +231,10 @@ index 5f1a5ecaecd..7325d3ff9aa 100644
};
diff --git a/dlls/winex11.drv/x11drv_main.c b/dlls/winex11.drv/x11drv_main.c
index 6707a64bcf6..c984639dbf9 100644
index e449530749e..42de6c0e7a7 100644
--- a/dlls/winex11.drv/x11drv_main.c
+++ b/dlls/winex11.drv/x11drv_main.c
@@ -733,6 +733,8 @@ void X11DRV_ThreadDetach(void)
@@ -728,6 +728,8 @@ void X11DRV_ThreadDetach(void)
if (data)
{
vulkan_thread_detach();
@@ -243,8 +243,8 @@ index 6707a64bcf6..c984639dbf9 100644
if (data->xim) XCloseIM( data->xim );
if (data->font_set) XFreeFontSet( data->display, data->font_set );
XCloseDisplay( data->display );
@@ -804,6 +806,8 @@ struct x11drv_thread_data *x11drv_init_thread_data(void)
if (use_xim) X11DRV_SetupXIM();
@@ -796,6 +798,8 @@ struct x11drv_thread_data *x11drv_init_thread_data(void)
if (use_xim) xim_thread_attach( data );
x11drv_xinput_init();
+ if (NtUserGetWindowThread( NtUserGetDesktopWindow(), NULL ) == GetCurrentThreadId())
@@ -253,5 +253,5 @@ index 6707a64bcf6..c984639dbf9 100644
return data;
}
--
2.38.1
2.40.0

View File

@@ -1,125 +0,0 @@
From d59b98f9fb10a3d634541d4e538ed7500a183c77 Mon Sep 17 00:00:00 2001
From: Paul Gofman <pgofman@codeweavers.com>
Date: Mon, 20 Mar 2023 11:59:14 -0600
Subject: [PATCH 1/3] win32u: Set DEVPKEY_Device_MatchingDeviceId for GPUs.
---
dlls/gdi32/tests/driver.c | 50 +++++++++++++++++++++++++++++++++++++++
dlls/win32u/sysparams.c | 19 +++++++++++++++
2 files changed, 69 insertions(+)
diff --git a/dlls/gdi32/tests/driver.c b/dlls/gdi32/tests/driver.c
index 94f93d61207..092bde0e5c1 100644
--- a/dlls/gdi32/tests/driver.c
+++ b/dlls/gdi32/tests/driver.c
@@ -32,6 +32,7 @@
#include "initguid.h"
#include "setupapi.h"
#include "ntddvdeo.h"
+#include "devpkey.h"
#include "wine/test.h"
@@ -996,6 +997,54 @@ static void test_D3DKMTQueryVideoMemoryInfo(void)
ok(status == STATUS_SUCCESS, "Got unexpected return code %#lx.\n", status);
}
+static void test_gpu_device_properties_guid(const GUID *devinterface_guid)
+{
+ BYTE iface_detail_buffer[sizeof(SP_DEVICE_INTERFACE_DETAIL_DATA_W) + 256 * sizeof(WCHAR)];
+ SP_DEVINFO_DATA device_data = {sizeof(device_data)};
+ SP_DEVICE_INTERFACE_DATA iface = {sizeof(iface)};
+ SP_DEVICE_INTERFACE_DETAIL_DATA_W *iface_data;
+ WCHAR device_id[256];
+ DEVPROPTYPE type;
+ unsigned int i;
+ HDEVINFO set;
+ BOOL ret;
+
+ /* Make sure display devices are initialized. */
+ SendMessageW(GetDesktopWindow(), WM_NULL, 0, 0);
+
+ set = SetupDiGetClassDevsW(devinterface_guid, NULL, NULL, DIGCF_DEVICEINTERFACE | DIGCF_PRESENT);
+ ok(set != INVALID_HANDLE_VALUE, "SetupDiGetClassDevs failed, error %lu.\n", GetLastError());
+
+ iface_data = (SP_DEVICE_INTERFACE_DETAIL_DATA_W *)iface_detail_buffer;
+ iface_data->cbSize = sizeof(*iface_data);
+
+ i = 0;
+ while (SetupDiEnumDeviceInterfaces(set, NULL, devinterface_guid, i, &iface))
+ {
+ ret = SetupDiGetDeviceInterfaceDetailW(set, &iface, iface_data,
+ sizeof(iface_detail_buffer), NULL, &device_data );
+ ok(ret, "Got unexpected ret %d, GetLastError() %lu.\n", ret, GetLastError());
+
+ ret = SetupDiGetDevicePropertyW(set, &device_data, &DEVPKEY_Device_MatchingDeviceId, &type,
+ (BYTE *)device_id, sizeof(device_id), NULL, 0);
+ ok(ret, "Got unexpected ret %d, GetLastError() %lu.\n", ret, GetLastError());
+ ok(type == DEVPROP_TYPE_STRING, "Got type %ld.\n", type);
+
+ ++i;
+ }
+ SetupDiDestroyDeviceInfoList(set);
+}
+
+static void test_gpu_device_properties(void)
+{
+ winetest_push_context("GUID_DEVINTERFACE_DISPLAY_ADAPTER");
+ test_gpu_device_properties_guid(&GUID_DEVINTERFACE_DISPLAY_ADAPTER);
+ winetest_pop_context();
+ winetest_push_context("GUID_DISPLAY_DEVICE_ARRIVAL");
+ test_gpu_device_properties_guid(&GUID_DISPLAY_DEVICE_ARRIVAL);
+ winetest_pop_context();
+}
+
START_TEST(driver)
{
HMODULE gdi32 = GetModuleHandleA("gdi32.dll");
@@ -1025,6 +1074,7 @@ START_TEST(driver)
test_D3DKMTCheckOcclusion();
test_D3DKMTOpenAdapterFromDeviceName();
test_D3DKMTQueryVideoMemoryInfo();
+ test_gpu_device_properties();
FreeLibrary(dwmapi);
}
diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c
index 60b12321953..a02158a17a0 100644
--- a/dlls/win32u/sysparams.c
+++ b/dlls/win32u/sysparams.c
@@ -93,6 +93,14 @@ static const WCHAR devpropkey_gpu_luidW[] =
'\\','0','0','0','2'
};
+static const WCHAR devpkey_device_matching_device_id[] =
+{
+ 'P','r','o','p','e','r','t','i','e','s',
+ '\\','{','A','8','B','8','6','5','D','D','-','2','E','3','D','-','4','0','9','4',
+ '-','A','D','9','7','-','E','5','9','3','A','7','0','C','7','5','D','6','}',
+ '\\','0','0','0','8'
+};
+
static const WCHAR devpropkey_device_ispresentW[] =
{
'P','r','o','p','e','r','t','i','e','s',
@@ -1218,6 +1226,17 @@ static void add_gpu( const struct gdi_gpu *gpu, void *param )
bufferW[size / sizeof(WCHAR)] = 0; /* for REG_MULTI_SZ */
set_reg_value( hkey, hardware_idW, REG_MULTI_SZ, bufferW, size + sizeof(WCHAR) );
+ if ((subkey = reg_create_key( hkey, devpkey_device_matching_device_id,
+ sizeof(devpkey_device_matching_device_id), 0, NULL )))
+ {
+ if (gpu->vendor_id && gpu->device_id)
+ set_reg_value( subkey, NULL, 0xffff0000 | DEVPROP_TYPE_STRING, bufferW, size );
+ else
+ set_reg_value( subkey, NULL, 0xffff0000 | DEVPROP_TYPE_STRING, bufferW,
+ asciiz_to_unicode( bufferW, "ROOT\\BasicRender" ));
+ NtClose( subkey );
+ }
+
desc = gpu->name;
if (!desc[0]) desc = wine_adapterW;
set_reg_value( hkey, device_descW, REG_SZ, desc, (lstrlenW( desc ) + 1) * sizeof(WCHAR) );
--
2.40.0

View File

@@ -1,80 +0,0 @@
From 1846ff937ff4d4c4eb1b9a2311c385b52ac864cc Mon Sep 17 00:00:00 2001
From: Paul Gofman <pgofman@codeweavers.com>
Date: Mon, 20 Mar 2023 13:02:31 -0600
Subject: [PATCH 2/3] win32u: Set DEVPKEY_Device_BusNumber for GPUs.
---
dlls/gdi32/tests/driver.c | 12 ++++++++++++
dlls/win32u/sysparams.c | 19 +++++++++++++++++++
2 files changed, 31 insertions(+)
diff --git a/dlls/gdi32/tests/driver.c b/dlls/gdi32/tests/driver.c
index 092bde0e5c1..eabd3ed15b8 100644
--- a/dlls/gdi32/tests/driver.c
+++ b/dlls/gdi32/tests/driver.c
@@ -1006,6 +1006,7 @@ static void test_gpu_device_properties_guid(const GUID *devinterface_guid)
WCHAR device_id[256];
DEVPROPTYPE type;
unsigned int i;
+ UINT32 value;
HDEVINFO set;
BOOL ret;
@@ -1030,6 +1031,17 @@ static void test_gpu_device_properties_guid(const GUID *devinterface_guid)
ok(ret, "Got unexpected ret %d, GetLastError() %lu.\n", ret, GetLastError());
ok(type == DEVPROP_TYPE_STRING, "Got type %ld.\n", type);
+ ret = SetupDiGetDevicePropertyW(set, &device_data, &DEVPKEY_Device_BusNumber, &type,
+ (BYTE *)&value, sizeof(value), NULL, 0);
+ if (!wcsicmp(device_id, L"root\\basicrender") || !wcsicmp(device_id, L"root\\basicdisplay"))
+ {
+ ok(!ret, "Found Bus Id.\n");
+ }
+ else
+ {
+ ok(ret, "Got unexpected ret %d, GetLastError() %lu, %s.\n", ret, GetLastError(), debugstr_w(device_id));
+ ok(type == DEVPROP_TYPE_UINT32, "Got type %ld.\n", type);
+ }
++i;
}
SetupDiDestroyDeviceInfoList(set);
diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c
index a02158a17a0..f4e8eff98e2 100644
--- a/dlls/win32u/sysparams.c
+++ b/dlls/win32u/sysparams.c
@@ -101,6 +101,14 @@ static const WCHAR devpkey_device_matching_device_id[] =
'\\','0','0','0','8'
};
+static const WCHAR devpkey_device_bus_number[] =
+{
+ 'P','r','o','p','e','r','t','i','e','s',
+ '\\','{','A','4','5','C','2','5','4','E','-','D','F','1','C','-','4','E','F','D',
+ '-','8','0','2','0','-','6','7','D','1','4','6','A','8','5','0','E','0','}',
+ '\\','0','0','1','7'
+};
+
static const WCHAR devpropkey_device_ispresentW[] =
{
'P','r','o','p','e','r','t','i','e','s',
@@ -1237,6 +1245,17 @@ static void add_gpu( const struct gdi_gpu *gpu, void *param )
NtClose( subkey );
}
+ if (gpu->vendor_id && gpu->device_id)
+ {
+ if ((subkey = reg_create_key( hkey, devpkey_device_bus_number,
+ sizeof(devpkey_device_bus_number), 0, NULL )))
+ {
+ set_reg_value( subkey, NULL, 0xffff0000 | DEVPROP_TYPE_UINT32,
+ &gpu_index, sizeof(gpu_index) );
+ NtClose( subkey );
+ }
+ }
+
desc = gpu->name;
if (!desc[0]) desc = wine_adapterW;
set_reg_value( hkey, device_descW, REG_SZ, desc, (lstrlenW( desc ) + 1) * sizeof(WCHAR) );
--
2.40.0

View File

@@ -1,99 +0,0 @@
From 5a493bfd785962d3b6043e6eac00712a73a81cc6 Mon Sep 17 00:00:00 2001
From: Paul Gofman <pgofman@codeweavers.com>
Date: Mon, 20 Mar 2023 13:18:26 -0600
Subject: [PATCH 3/3] win32u: Set DEVPKEY_Device_RemovalPolicy for GPUs.
---
dlls/gdi32/tests/driver.c | 8 ++++++++
dlls/win32u/sysparams.c | 19 +++++++++++++++++++
include/cfgmgr32.h | 4 ++++
3 files changed, 31 insertions(+)
diff --git a/dlls/gdi32/tests/driver.c b/dlls/gdi32/tests/driver.c
index eabd3ed15b8..a618b5e51a4 100644
--- a/dlls/gdi32/tests/driver.c
+++ b/dlls/gdi32/tests/driver.c
@@ -33,6 +33,7 @@
#include "setupapi.h"
#include "ntddvdeo.h"
#include "devpkey.h"
+#include "cfgmgr32.h"
#include "wine/test.h"
@@ -1042,6 +1043,13 @@ static void test_gpu_device_properties_guid(const GUID *devinterface_guid)
ok(ret, "Got unexpected ret %d, GetLastError() %lu, %s.\n", ret, GetLastError(), debugstr_w(device_id));
ok(type == DEVPROP_TYPE_UINT32, "Got type %ld.\n", type);
}
+
+ ret = SetupDiGetDevicePropertyW(set, &device_data, &DEVPKEY_Device_RemovalPolicy, &type,
+ (BYTE *)&value, sizeof(value), NULL, 0);
+ ok(ret, "Got unexpected ret %d, GetLastError() %lu, %s.\n", ret, GetLastError(), debugstr_w(device_id));
+ ok(value == CM_REMOVAL_POLICY_EXPECT_NO_REMOVAL || value == CM_REMOVAL_POLICY_EXPECT_ORDERLY_REMOVAL
+ || value == CM_REMOVAL_POLICY_EXPECT_SURPRISE_REMOVAL, "Got value %d.\n", value);
+ ok(type == DEVPROP_TYPE_UINT32, "Got type %ld.\n", type);
++i;
}
SetupDiDestroyDeviceInfoList(set);
diff --git a/dlls/win32u/sysparams.c b/dlls/win32u/sysparams.c
index f4e8eff98e2..76703d2da52 100644
--- a/dlls/win32u/sysparams.c
+++ b/dlls/win32u/sysparams.c
@@ -32,6 +32,7 @@
#include "ntgdi_private.h"
#include "ntuser_private.h"
#include "devpropdef.h"
+#include "cfgmgr32.h"
#include "wine/wingdi16.h"
#include "wine/server.h"
@@ -109,6 +110,14 @@ static const WCHAR devpkey_device_bus_number[] =
'\\','0','0','1','7'
};
+static const WCHAR devpkey_device_removal_policy[] =
+{
+ 'P','r','o','p','e','r','t','i','e','s',
+ '\\','{','A','4','5','C','2','5','4','E','-','D','F','1','C','-','4','E','F','D',
+ '-','8','0','2','0','-','6','7','D','1','4','6','A','8','5','0','E','0','}',
+ '\\','0','0','2','1'
+};
+
static const WCHAR devpropkey_device_ispresentW[] =
{
'P','r','o','p','e','r','t','i','e','s',
@@ -1256,6 +1265,16 @@ static void add_gpu( const struct gdi_gpu *gpu, void *param )
}
}
+ if ((subkey = reg_create_key( hkey, devpkey_device_removal_policy,
+ sizeof(devpkey_device_removal_policy), 0, NULL )))
+ {
+ unsigned int removal_policy = CM_REMOVAL_POLICY_EXPECT_NO_REMOVAL;
+
+ set_reg_value( subkey, NULL, 0xffff0000 | DEVPROP_TYPE_UINT32,
+ &removal_policy, sizeof(removal_policy) );
+ NtClose( subkey );
+ }
+
desc = gpu->name;
if (!desc[0]) desc = wine_adapterW;
set_reg_value( hkey, device_descW, REG_SZ, desc, (lstrlenW( desc ) + 1) * sizeof(WCHAR) );
diff --git a/include/cfgmgr32.h b/include/cfgmgr32.h
index b78f118622e..04f1f80b174 100644
--- a/include/cfgmgr32.h
+++ b/include/cfgmgr32.h
@@ -180,6 +180,10 @@ typedef DWORD CONFIGRET;
#define CM_REGISTRY_USER 0x0100
#define CM_REGISTRY_CONFIG 0x0200
+#define CM_REMOVAL_POLICY_EXPECT_NO_REMOVAL 1
+#define CM_REMOVAL_POLICY_EXPECT_ORDERLY_REMOVAL 2
+#define CM_REMOVAL_POLICY_EXPECT_SURPRISE_REMOVAL 3
+
typedef DWORD DEVINST, *PDEVINST;
typedef DWORD DEVNODE, *PDEVNODE;
typedef HANDLE HMACHINE, *PHMACHINE;
--
2.40.0

View File

@@ -1 +0,0 @@
MR 2449: Allow Diable IV to run without reporting errors.

View File

@@ -1,4 +1,4 @@
From f57059086630af68cf9469074c1630d32e607e15 Mon Sep 17 00:00:00 2001
From 322b0ade65ffd9f5e8cfdcd7faaaf5a3826c9ce4 Mon Sep 17 00:00:00 2001
From: Felix Yan <felixonmars@gmail.com>
Date: Tue, 23 Sep 2014 23:22:17 +0800
Subject: [PATCH] winex11.drv: Update a candidate window's position with
@@ -21,15 +21,15 @@ received a lot of help from Sebastian Lackner.
dlls/win32u/input.c | 2 ++
dlls/winex11.drv/init.c | 1 +
dlls/winex11.drv/x11drv.h | 1 +
dlls/winex11.drv/xim.c | 72 ++++++++++++++++++++++++++++++++++++++-
dlls/winex11.drv/xim.c | 70 +++++++++++++++++++++++++++++++++++++++
include/wine/gdi_driver.h | 2 ++
6 files changed, 84 insertions(+), 1 deletion(-)
6 files changed, 83 insertions(+)
diff --git a/dlls/win32u/driver.c b/dlls/win32u/driver.c
index 526bb5db19c..d18a8121f1f 100644
index a2ac8fbf815..ffd0c0e6e5a 100644
--- a/dlls/win32u/driver.c
+++ b/dlls/win32u/driver.c
@@ -893,6 +893,11 @@ static struct opengl_funcs *nulldrv_wine_get_wgl_driver( UINT version )
@@ -910,6 +910,11 @@ static struct opengl_funcs *nulldrv_wine_get_wgl_driver( UINT version )
return (void *)-1;
}
@@ -41,7 +41,7 @@ index 526bb5db19c..d18a8121f1f 100644
static void nulldrv_ThreadDetach( void )
{
}
@@ -1188,6 +1193,7 @@ static const struct user_driver_funcs lazy_load_driver =
@@ -1225,6 +1230,7 @@ static const struct user_driver_funcs lazy_load_driver =
loaderdrv_wine_get_vulkan_driver,
/* opengl support */
nulldrv_wine_get_wgl_driver,
@@ -49,7 +49,7 @@ index 526bb5db19c..d18a8121f1f 100644
/* thread management */
nulldrv_ThreadDetach,
};
@@ -1258,6 +1264,7 @@ void CDECL __wine_set_user_driver( const struct user_driver_funcs *funcs, UINT v
@@ -1298,6 +1304,7 @@ void __wine_set_user_driver( const struct user_driver_funcs *funcs, UINT version
SET_USER_FUNC(SystemParametersInfo);
SET_USER_FUNC(wine_get_vulkan_driver);
SET_USER_FUNC(wine_get_wgl_driver);
@@ -58,10 +58,10 @@ index 526bb5db19c..d18a8121f1f 100644
#undef SET_USER_FUNC
diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c
index 658258f73ee..8ecacb763c7 100644
index f1eb5f3a8ca..31ed6a62812 100644
--- a/dlls/win32u/input.c
+++ b/dlls/win32u/input.c
@@ -2035,6 +2035,7 @@ BOOL set_caret_pos( int x, int y )
@@ -2320,6 +2320,7 @@ BOOL set_caret_pos( int x, int y )
r.left = x;
r.top = y;
display_caret( hwnd, &r );
@@ -69,7 +69,7 @@ index 658258f73ee..8ecacb763c7 100644
NtUserSetSystemTimer( hwnd, SYSTEM_TIMER_CARET, caret.timeout );
}
return ret;
@@ -2072,6 +2073,7 @@ BOOL WINAPI NtUserShowCaret( HWND hwnd )
@@ -2357,6 +2358,7 @@ BOOL WINAPI NtUserShowCaret( HWND hwnd )
if (ret && hidden == 1) /* hidden was 1 so it's now 0 */
{
display_caret( hwnd, &r );
@@ -78,10 +78,10 @@ index 658258f73ee..8ecacb763c7 100644
}
return ret;
diff --git a/dlls/winex11.drv/init.c b/dlls/winex11.drv/init.c
index 60232e4ca7b..846ead80a4a 100644
index 2d056a359ef..eb57a2fcffb 100644
--- a/dlls/winex11.drv/init.c
+++ b/dlls/winex11.drv/init.c
@@ -433,6 +433,7 @@ static const struct user_driver_funcs x11drv_funcs =
@@ -439,6 +439,7 @@ static const struct user_driver_funcs x11drv_funcs =
.pSystemParametersInfo = X11DRV_SystemParametersInfo,
.pwine_get_vulkan_driver = X11DRV_wine_get_vulkan_driver,
.pwine_get_wgl_driver = X11DRV_wine_get_wgl_driver,
@@ -90,10 +90,10 @@ index 60232e4ca7b..846ead80a4a 100644
};
diff --git a/dlls/winex11.drv/x11drv.h b/dlls/winex11.drv/x11drv.h
index ac540df004c..ba56b1e127c 100644
index d5b0855035b..85a20c1e7c5 100644
--- a/dlls/winex11.drv/x11drv.h
+++ b/dlls/winex11.drv/x11drv.h
@@ -245,6 +245,7 @@ extern void X11DRV_WindowPosChanged( HWND hwnd, HWND insert_after, UINT swp_flag
@@ -253,6 +253,7 @@ extern void X11DRV_WindowPosChanged( HWND hwnd, HWND insert_after, UINT swp_flag
struct window_surface *surface ) DECLSPEC_HIDDEN;
extern BOOL X11DRV_SystemParametersInfo( UINT action, UINT int_param, void *ptr_param,
UINT flags ) DECLSPEC_HIDDEN;
@@ -102,7 +102,7 @@ index ac540df004c..ba56b1e127c 100644
/* X11 driver internal functions */
diff --git a/dlls/winex11.drv/xim.c b/dlls/winex11.drv/xim.c
index 00c15bb3bcf..280bfe5bf3c 100644
index b7f5f696ba5..51fb6bdff62 100644
--- a/dlls/winex11.drv/xim.c
+++ b/dlls/winex11.drv/xim.c
@@ -34,6 +34,7 @@
@@ -113,8 +113,8 @@ index 00c15bb3bcf..280bfe5bf3c 100644
WINE_DEFAULT_DEBUG_CHANNEL(xim);
@@ -449,6 +450,48 @@ static BOOL X11DRV_DestroyIC(XIC xic, XPointer p, XPointer data)
return TRUE;
@@ -432,6 +433,49 @@ void xim_thread_attach( struct x11drv_thread_data *data )
else XRegisterIMInstantiateCallback( display, NULL, NULL, NULL, xim_open, (XPointer)data );
}
+/***********************************************************************
@@ -122,7 +122,7 @@ index 00c15bb3bcf..280bfe5bf3c 100644
+ */
+void X11DRV_UpdateCandidatePos( HWND hwnd, const RECT *caret_rect )
+{
+ if (ximStyle & XIMPreeditPosition)
+ if (input_style & XIMPreeditPosition)
+ {
+ struct x11drv_win_data *data;
+ HWND parent;
@@ -159,24 +159,15 @@ index 00c15bb3bcf..280bfe5bf3c 100644
+ }
+ }
+}
XIC X11DRV_CreateIC(XIM xim, struct x11drv_win_data *data)
+
static BOOL xic_destroy( XIC xic, XPointer user, XPointer arg )
{
@@ -483,7 +526,7 @@ XIC X11DRV_CreateIC(XIM xim, struct x11drv_win_data *data)
XNDestroyCallback, &destroy,
NULL);
data->xic = xic;
- return xic;
+ goto return_xic;
}
struct x11drv_win_data *data;
@@ -485,6 +529,32 @@ static XIC xic_create( XIM xim, HWND hwnd, Window win )
XFree( preedit );
XFree( status );
/* create callbacks */
@@ -581,5 +624,32 @@ XIC X11DRV_CreateIC(XIM xim, struct x11drv_win_data *data)
if (status != NULL)
XFree(status);
+return_xic:
+ if (xic != NULL && (ximStyle & XIMPreeditPosition))
+ if (xic != NULL && (input_style & XIMPreeditPosition))
+ {
+ SERVER_START_REQ( set_caret_info )
+ {
@@ -204,11 +195,12 @@ index 00c15bb3bcf..280bfe5bf3c 100644
+
return xic;
}
diff --git a/include/wine/gdi_driver.h b/include/wine/gdi_driver.h
index d9c52777dd8..532e4bdcd9e 100644
index 1ffaa409c72..219eb75d3de 100644
--- a/include/wine/gdi_driver.h
+++ b/include/wine/gdi_driver.h
@@ -325,6 +325,8 @@ struct user_driver_funcs
@@ -334,6 +334,8 @@ struct user_driver_funcs
const struct vulkan_funcs * (*pwine_get_vulkan_driver)(UINT);
/* opengl support */
struct opengl_funcs * (*pwine_get_wgl_driver)(UINT);
@@ -218,5 +210,5 @@ index d9c52777dd8..532e4bdcd9e 100644
void (*pThreadDetach)(void);
};
--
2.35.1
2.40.0

View File

@@ -1,8 +1,7 @@
From b7dca610d1814659749106e97812beb2a795bace Mon Sep 17 00:00:00 2001
From 1c2414373f49a227fe25d5fee1a50c6c0a023fac Mon Sep 17 00:00:00 2001
From: Enrico Horn <farmboy0+winehq@googlemail.com>
Date: Sat, 21 Apr 2018 02:40:37 +0200
Subject: [PATCH resend] winex11.drv: handle missing thread data in X11DRV_get_ic
To: wine-devel@winehq.org
Subject: [PATCH] winex11.drv: handle missing thread data in X11DRV_get_ic
Hi,
This patch fixes a crash in winex11.drv when loading IME.
@@ -38,25 +37,26 @@ Backtrace:
Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46263
Signed-off-by: Enrico Horn <farmboy0+winehq@googlemail.com>
---
dlls/winex11.drv/window.c | 5 +++++
1 file changed, 5 insertions(+)
dlls/winex11.drv/window.c | 2 --
dlls/winex11.drv/xim.c | 5 +++++
2 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c
index 7a3b340e19a..7dce6816ad7 100644
--- a/dlls/winex11.drv/window.c
+++ b/dlls/winex11.drv/window.c
@@ -2034,6 +2034,11 @@ XIC X11DRV_get_ic( HWND hwnd )
diff --git a/dlls/winex11.drv/xim.c b/dlls/winex11.drv/xim.c
index 51fb6bdff62..c6d6882735f 100644
--- a/dlls/winex11.drv/xim.c
+++ b/dlls/winex11.drv/xim.c
@@ -564,6 +564,11 @@ XIC X11DRV_get_ic( HWND hwnd )
XIM xim;
XIC ret = 0;
XIC ret;
+ if (!x11drv_thread_data())
+ {
+ release_win_data( data );
+ return NULL;
+ }
if (data)
{
x11drv_thread_data()->last_xic_hwnd = hwnd;
if (!(data = get_win_data( hwnd ))) return 0;
x11drv_thread_data()->last_xic_hwnd = hwnd;
if (!(ret = data->xic) && (xim = x11drv_thread_data()->xim))
--
2.19.1
2.40.0

View File

@@ -1,53 +0,0 @@
From c08e405870abe35e11eb3895a601da3e438bc84b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Michael=20M=C3=BCller?= <michael@fds-team.de>
Date: Sun, 28 Sep 2014 21:20:52 +0200
Subject: [PATCH] winex11.drv: Only warn about used contexts in wglShareLists.
---
dlls/opengl32/tests/opengl.c | 2 +-
dlls/winex11.drv/opengl.c | 10 ++++------
2 files changed, 5 insertions(+), 7 deletions(-)
diff --git a/dlls/opengl32/tests/opengl.c b/dlls/opengl32/tests/opengl.c
index 42c2626a2c2..bee429ef2ad 100644
--- a/dlls/opengl32/tests/opengl.c
+++ b/dlls/opengl32/tests/opengl.c
@@ -564,7 +564,7 @@ static void test_sharelists(HDC winhdc)
res = wglMakeCurrent(winhdc, hglrc2);
ok(res, "Make current failed\n");
res = wglShareLists(hglrc1, hglrc2);
- todo_wine ok(res, "Sharing display lists with a destination context which has been made current failed\n");
+ ok(res, "Sharing display lists with a destination context which has been made current failed\n");
wglMakeCurrent(0, 0);
wglDeleteContext(hglrc2);
}
diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c
index d7fc123bddd..eab44e76126 100644
--- a/dlls/winex11.drv/opengl.c
+++ b/dlls/winex11.drv/opengl.c
@@ -1934,18 +1934,16 @@ static BOOL glxdrv_wglShareLists(struct wgl_context *org, struct wgl_context *de
* current or when it hasn't shared display lists before.
*/
- if(dest->has_been_current)
- {
- ERR("Could not share display lists because the destination context has already been current\n");
- return FALSE;
- }
- else if(dest->sharing)
+ if(dest->sharing)
{
ERR("Could not share display lists because the destination context has already shared lists\n");
return FALSE;
}
else
{
+ if(dest->has_been_current)
+ ERR("Recreating OpenGL context to share display lists, although the context has been current!\n");
+
/* Re-create the GLX context and share display lists */
pglXDestroyContext(gdi_display, dest->ctx);
dest->ctx = create_glxcontext(gdi_display, dest, org->ctx);
--
2.39.0

View File

@@ -1,2 +0,0 @@
Fixes: [11436] Do not fail when a used context is passed to wglShareLists
Fixes: [25419] Fix broken textures in XIII Century: Death or Glory

View File

@@ -1 +1 @@
Wine Staging 8.5
Wine Staging 8.6

View File

@@ -1 +1 @@
02876a4b1320a1ee03b04c264fe31ccf6ec06d1c
4d610717bbc21d65e41a29f9fe9ab5f2963cf16d