Skip to content

Commit

Permalink
Tue Jun 25 05:55:37 2024 patchbase; rebase and misc clean up/improvement
Browse files Browse the repository at this point in the history
  • Loading branch information
whrvt committed Jun 25, 2024
1 parent 57d467c commit 6dd97f8
Show file tree
Hide file tree
Showing 138 changed files with 371 additions and 390 deletions.
Original file line number Diff line number Diff line change
@@ -1,25 +1,22 @@
From 94e0cba5d1b6e1377ff677af9c434f671b5fa777 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <[email protected]>
Date: Fri, 3 May 2024 10:50:10 +0200
Subject: [PATCH 07/10] winex11: Create a window surface even when there is
From:
Date: Tue, 25 Jun 2024 04:28:02 +0000
Subject: [PATCH (REBASE) 07/10] winex11: Create a window surface even when there is
client window.

---
dlls/winex11.drv/window.c | 1 -
dlls/winex11.drv/bitblt.c | 1 -
1 file changed, 1 deletion(-)

diff --git a/dlls/winex11.drv/window.c b/dlls/winex11.drv/window.c
index c173375694d..3a93ed89afe 100644
--- a/dlls/winex11.drv/window.c
+++ b/dlls/winex11.drv/window.c
@@ -2653,7 +2653,6 @@ BOOL BOOL X11DRV_CreateWindowSurface( HWND hwnd, UINT swp_flags, const RECT
diff --git a/dlls/winex11.drv/bitblt.c b/dlls/winex11.drv/bitblt.c
index 0db8087441a..d1219862f74 100644
--- a/dlls/winex11.drv/bitblt.c
+++ b/dlls/winex11.drv/bitblt.c
@@ -2263,7 +2263,6 @@ BOOL X11DRV_CreateWindowSurface( HWND hwnd, UINT swp_flags, const RECT *visible_

if (data->embedded) goto done; /* draw directly to the window */
if (data->whole_window == root_window) goto done; /* draw directly to the window */
- if (data->client_window) goto done; /* draw directly to the window */
if (!client_side_graphics && !layered) goto done; /* draw directly to the window */

if (!get_surface_rect( visible_rect, &surface_rect )) goto done;
--
2.45.1

Original file line number Diff line number Diff line change
@@ -0,0 +1,147 @@
From 9965f3b13b8412a6132e828042a92bf8ce821e3f Mon Sep 17 00:00:00 2001
From: Paul Gofman <[email protected]>
Date: Wed, 13 Jul 2022 20:18:38 -0500
Subject: [PATCH] win32u: Send WM_NCPAINT as notify message in send_ncpaint().

---
dlls/user32/tests/win.c | 59 ++++++++++++++++++++++++++++++++++++
dlls/win32u/dce.c | 2 +-
dlls/win32u/message.c | 2 +-
dlls/win32u/win32u_private.h | 1 +
4 files changed, 62 insertions(+), 2 deletions(-)

diff --git a/dlls/user32/tests/win.c b/dlls/user32/tests/win.c
index 4c2af09d0c6..9ad10090902 100644
--- a/dlls/user32/tests/win.c
+++ b/dlls/user32/tests/win.c
@@ -6126,11 +6126,16 @@ static void test_AdjustWindowRect(void)

/* Global variables to trigger exit from loop */
static int redrawComplete, WMPAINT_count;
+static HANDLE redraw_call_complete_event;

static LRESULT WINAPI redraw_window_procA(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam)
{
switch (msg)
{
+ case WM_NCPAINT:
+ if (redraw_call_complete_event)
+ WaitForSingleObject(redraw_call_complete_event, INFINITE);
+ break;
case WM_PAINT:
WMPAINT_count++;
if (WMPAINT_count > 10 && redrawComplete == 0) {
@@ -6144,11 +6149,50 @@ static LRESULT WINAPI redraw_window_procA(HWND hwnd, UINT msg, WPARAM wparam, LP
return DefWindowProcA(hwnd, msg, wparam, lparam);
}

+struct rdw_window_thread_param
+{
+ HANDLE ready_event;
+ HANDLE done_event;
+ HWND hwnd;
+};
+
+static DWORD WINAPI rdw_window_thread(void *param)
+{
+ struct rdw_window_thread_param *p = param;
+ DWORD ret;
+ MSG msg;
+
+ p->hwnd = CreateWindowA("RedrawWindowClass", "Main Window", WS_OVERLAPPEDWINDOW,
+ CW_USEDEFAULT, 0, 100, 100, NULL, NULL, 0, NULL);
+ ShowWindow(p->hwnd, SW_MINIMIZE);
+ redrawComplete = FALSE;
+ while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE))
+ DispatchMessageA(&msg);
+
+ redraw_call_complete_event = p->done_event;
+ SetEvent(p->ready_event);
+ while ((ret = MsgWaitForMultipleObjects(1, &p->done_event, FALSE, INFINITE, QS_SENDMESSAGE)) != WAIT_OBJECT_0)
+ {
+ while (PeekMessageA(&msg, 0, 0, 0, PM_REMOVE))
+ {
+ ok(msg.message != WM_NCPAINT, "got WM_NCPAINT.\n");
+ DispatchMessageA(&msg);
+ }
+ }
+ redraw_call_complete_event = NULL;
+ WaitForSingleObject(redraw_call_complete_event, INFINITE);
+
+ DestroyWindow(p->hwnd);
+ return 0;
+}
+
/* Ensure we exit from RedrawNow regardless of invalidated area */
static void test_redrawnow(void)
{
+ struct rdw_window_thread_param p;
WNDCLASSA cls;
HWND hwndMain;
+ HANDLE thread;
BOOL ret;

cls.style = CS_DBLCLKS;
@@ -6178,6 +6222,21 @@ static void test_redrawnow(void)

/* clean up */
DestroyWindow( hwndMain);
+
+ /* When on the other thread, WM_NCPAINT is delivered through window proc but RedrawWindow does
+ * not wait for that. */
+ p.ready_event = CreateEventW(NULL, FALSE, FALSE, NULL);
+ p.done_event = CreateEventW(NULL, TRUE, FALSE, NULL);
+ WMPAINT_count = 0;
+ thread = CreateThread(NULL, 0, rdw_window_thread, &p, 0, NULL);
+ WaitForSingleObject(p.ready_event, INFINITE);
+
+ ret = RedrawWindow(p.hwnd, NULL, NULL, RDW_INVALIDATE | RDW_ERASE | RDW_ALLCHILDREN | RDW_ERASENOW | RDW_FRAME);
+ ok(ret, "ret %d.\n", ret);
+
+ SetEvent(p.done_event);
+ WaitForSingleObject(thread, INFINITE);
+ CloseHandle(thread);
}

struct parentdc_stat {
diff --git a/dlls/win32u/dce.c b/dlls/win32u/dce.c
index 9041b5bbaaf..a3f48d623b0 100644
--- a/dlls/win32u/dce.c
+++ b/dlls/win32u/dce.c
@@ -1197,7 +1197,7 @@ static HRGN send_ncpaint( HWND hwnd, HWND *child, UINT *flags )
if (style & WS_VSCROLL)
set_standard_scroll_painted( hwnd, SB_VERT, FALSE );

- send_message( hwnd, WM_NCPAINT, (WPARAM)whole_rgn, 0 );
+ send_notify_message( hwnd, WM_NCPAINT, (WPARAM)whole_rgn, 0, FALSE );
}
if (whole_rgn > (HRGN)1) NtGdiDeleteObjectApp( whole_rgn );
}
#diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c
#index 0045c8a54c0..5ee4d9a85fc 100644
#--- a/dlls/win32u/message.c
#+++ b/dlls/win32u/message.c
#@@ -2806,7 +2806,7 @@ LRESULT send_message( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam )
# }
#
# /* see SendNotifyMessageW */
#-static BOOL send_notify_message( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, BOOL ansi )
#+BOOL send_notify_message( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, BOOL ansi )
# {
# struct send_message_info info;
#
#diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h
#index a0b3e8c2e9e..ac164811142 100644
#--- a/dlls/win32u/win32u_private.h
#+++ b/dlls/win32u/win32u_private.h
#@@ -447,6 +447,7 @@ extern LRESULT send_internal_message_timeout( DWORD dest_pid, DWORD dest_tid, UI
# extern LRESULT send_message( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam ) DECLSPEC_HIDDEN;
# extern LRESULT send_message_timeout( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam,
# UINT flags, UINT timeout, PDWORD_PTR res_ptr, BOOL ansi );
#+extern BOOL send_notify_message( HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam, BOOL ansi ) DECLSPEC_HIDDEN;
#
# /* rawinput.c */
# extern BOOL process_rawinput_message( MSG *msg, UINT hw_id, const struct hardware_msg_data *msg_data ) DECLSPEC_HIDDEN;
#--
#GitLab
#
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
# see: https://github.com/ValveSoftware/wine/commit/afcbb6a2a29de850d58b8b01435db7509d389c64
# https://github.com/ValveSoftware/wine/commit/a8514f9606ee3fdc3d912c988f651edc5d7d0d55
# for other examples of this idea
From d330b2b142aedf06cc54bfa3fe5f750d2ed31bbf Mon Sep 17 00:00:00 2001
From: whrvt <[email protected]>
Date: Tue, 25 Jun 2024 05:30:22 +0000
Subject: [PATCH] winex11: Allow disabling child window rendering through XComposite.

Improves performance in osu! by ~2x, so disable it by default. Breaks map editor context menus.

See: https://github.com/ValveSoftware/wine/commit/afcbb6a2a29de850d58b8b01435db7509d389c64
https://github.com/ValveSoftware/wine/commit/a8514f9606ee3fdc3d912c988f651edc5d7d0d55
for other examples of this idea.

diff --git a/dlls/winex11.drv/opengl.c b/dlls/winex11.drv/opengl.c
index 11111111111..11111111111 100644
--- a/dlls/winex11.drv/opengl.c
Expand Down

This file was deleted.

This file was deleted.

Loading

0 comments on commit 6dd97f8

Please sign in to comment.