Skip to content

Commit

Permalink
(upstream broke wow64) 9.16-1 prerelease patchset
Browse files Browse the repository at this point in the history
updated cursor-clip hack, added new wayland childwindow patches + some more window management stuff
  • Loading branch information
whrvt committed Aug 24, 2024
1 parent 74f3bdf commit 1a2ac5c
Show file tree
Hide file tree
Showing 58 changed files with 4,791 additions and 754 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,25 +16,25 @@ index 47851f442a3..c173375694d 100644

if (!data->client_window) return;

- changes.x = data->client_rect.left - data->whole_rect.left;
- changes.y = data->client_rect.top - data->whole_rect.top;
- changes.x = data->rects.client.left - data->rects.visible.left;
- changes.y = data->rects.client.top - data->rects.visible.top;
+ if (data->whole_window)
+ {
+ changes.x = data->client_rect.left - data->whole_rect.left;
+ changes.y = data->client_rect.top - data->whole_rect.top;
+ changes.x = data->rects.client.left - data->rects.visible.left;
+ changes.y = data->rects.client.top - data->rects.visible.top;
+ }
+ else
+ {
+ HWND toplevel = NtUserGetAncestor( data->hwnd, GA_ROOT );
+ POINT pos = {data->client_rect.left, data->client_rect.top};
+ POINT pos = {data->rects.client.left, data->rects.client.top};
+
+ NtUserMapWindowPoints( toplevel, toplevel, &pos, 1 );
+ changes.x = pos.x;
+ changes.y = pos.y;
+ }
+
changes.width = min( max( 1, data->client_rect.right - data->client_rect.left ), 65535 );
changes.height = min( max( 1, data->client_rect.bottom - data->client_rect.top ), 65535 );
changes.width = min( max( 1, data->rects.client.right - data->rects.client.left ), 65535 );
changes.height = min( max( 1, data->rects.client.bottom - data->rects.client.top ), 65535 );

@@ -1610,11 +1623,8 @@ void detach_client_window( struct x11drv_win_data *data, Window client_window )

Expand Down Expand Up @@ -67,18 +67,18 @@ index 47851f442a3..c173375694d 100644
+ if ((whole_window = data->whole_window))
{
- client_window_events_enable( data, client_window );
- XReparentWindow( gdi_display, client_window, data->whole_window, data->client_rect.left - data->whole_rect.left,
- data->client_rect.top - data->whole_rect.top );
+ pos.x = data->client_rect.left - data->whole_rect.left;
+ pos.y = data->client_rect.top - data->whole_rect.top;
- XReparentWindow( gdi_display, client_window, data->whole_window, data->rects.client.left - data->rects.visible.left,
- data->rects.client.top - data->rects.visible.top );
+ pos.x = data->rects.client.left - data->rects.visible.left;
+ pos.y = data->rects.client.top - data->rects.visible.top;
}
+ else
+ {
+ HWND toplevel = NtUserGetAncestor( data->hwnd, GA_ROOT );
+ whole_window = X11DRV_get_whole_window( toplevel );
+
+ pos.x = data->client_rect.left;
+ pos.y = data->client_rect.top;
+ pos.x = data->rects.client.left;
+ pos.y = data->rects.client.top;
+ NtUserMapWindowPoints( toplevel, toplevel, &pos, 1 );
+ }
+ if (!whole_window) whole_window = get_dummy_parent();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ index e0ac88d..2d425b5 100644
+++ b/dlls/winex11.drv/window.c
@@ -1684,7 +1684,7 @@ static void sync_client_position( struct x11drv_win_data *data,
HWND toplevel = NtUserGetAncestor( data->hwnd, GA_ROOT );
POINT pos = {data->client_rect.left, data->client_rect.top};
POINT pos = {data->rects.client.left, data->rects.client.top};

- NtUserMapWindowPoints( toplevel, toplevel, &pos, 1 );
+ NtUserMapWindowPoints( toplevel, toplevel, &pos, 1, 0 /* per-monitor DPI */ );
Expand All @@ -39,8 +39,8 @@ index e0ac88d..2d425b5 100644
}
@@ -1861,7 +1861,7 @@ void attach_client_window( struct x11drv_win_data *data, Window client_window )

pos.x = data->client_rect.left;
pos.y = data->client_rect.top;
pos.x = data->rects.client.left;
pos.y = data->rects.client.top;
- NtUserMapWindowPoints( toplevel, toplevel, &pos, 1 );
+ NtUserMapWindowPoints( toplevel, toplevel, &pos, 1, 0 /* per-monitor DPI */ );
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,34 +1,19 @@
From ce69ea03ddaee183541d44c7e68223b94a601245 Mon Sep 17 00:00:00 2001
From 3033371bbc918de6e37e7e9c5dd6f93f8663f963 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <[email protected]>
Date: Mon, 17 Jun 2024 11:31:59 +0200
Subject: [PATCH 1/7] server: Pass window's per-monitor DPI in set_window_pos.
Subject: [PATCH 1/8] server: Pass window's per-monitor DPI in set_window_pos.

---
dlls/win32u/window.c | 4 ++++
dlls/win32u/window.c | 1 +
server/protocol.def | 1 +
server/window.c | 20 ++++++++++----------
3 files changed, 15 insertions(+), 10 deletions(-)
3 files changed, 12 insertions(+), 10 deletions(-)

diff --git a/dlls/win32u/window.c b/dlls/win32u/window.c
index 44d96ea27b9..95d333dffd5 100644
index c53e4f8e0e8..3317c2fcc38 100644
--- a/dlls/win32u/window.c
+++ b/dlls/win32u/window.c
@@ -1948,6 +1948,7 @@ static BOOL apply_window_pos( HWND hwnd, HWND insert_after, UINT swp_flags, stru
struct window_rects old_rects;
RECT extra_rects[3];
struct window_surface *old_surface;
+ UINT monitor_dpi;

is_layered = new_surface && new_surface->alpha_mask;

@@ -1965,11 +1966,14 @@ static BOOL apply_window_pos( HWND hwnd, HWND insert_after, UINT swp_flags, stru
valid_rects = NULL;
}

+ monitor_dpi = get_monitor_dpi( monitor_from_rect( &new_rects->window, MONITOR_DEFAULTTONEAREST, get_thread_dpi() ) );
+
SERVER_START_REQ( set_window_pos )
{
@@ -1997,6 +1997,7 @@ static BOOL apply_window_pos( HWND hwnd, HWND insert_after, UINT swp_flags, stru
req->handle = wine_server_user_handle( hwnd );
req->previous = wine_server_user_handle( insert_after );
req->swp_flags = swp_flags;
Expand All @@ -37,10 +22,10 @@ index 44d96ea27b9..95d333dffd5 100644
req->client = wine_server_rectangle( new_rects->client );
if (!EqualRect( &new_rects->window, &new_rects->visible ) || new_surface || valid_rects)
diff --git a/server/protocol.def b/server/protocol.def
index 25184641082..173368df6eb 100644
index 2c791cbdd46..f260bae2d21 100644
--- a/server/protocol.def
+++ b/server/protocol.def
@@ -2526,6 +2526,7 @@ enum message_type
@@ -2592,6 +2592,7 @@ enum message_type
@REQ(set_window_pos)
unsigned short swp_flags; /* SWP_* flags */
unsigned short paint_flags; /* paint flags (see below) */
Expand All @@ -49,7 +34,7 @@ index 25184641082..173368df6eb 100644
user_handle_t previous; /* previous window in Z order */
rectangle_t window; /* window rectangle (in parent coords) */
diff --git a/server/window.c b/server/window.c
index 4ebfec3da12..b5e40bdd6f5 100644
index 564c69bf18d..16c2656b8f2 100644
--- a/server/window.c
+++ b/server/window.c
@@ -84,6 +84,7 @@ struct window
Expand All @@ -60,7 +45,7 @@ index 4ebfec3da12..b5e40bdd6f5 100644
lparam_t user_data; /* user-specific data */
WCHAR *text; /* window caption text */
data_size_t text_len; /* length of window caption */
@@ -244,20 +245,17 @@ static inline void update_pixel_format_flags( struct window *win )
@@ -245,20 +246,17 @@ static inline void update_pixel_format_flags( struct window *win )
win->paint_flags |= PAINT_PIXEL_FORMAT_CHILD;
}

Expand Down Expand Up @@ -88,15 +73,15 @@ index 4ebfec3da12..b5e40bdd6f5 100644
}

/* link a window at the right place in the siblings list */
@@ -577,6 +575,7 @@ static struct window *create_window( struct window *parent, struct window *owner
@@ -578,6 +576,7 @@ static struct window *create_window( struct window *parent, struct window *owner
win->is_layered = 0;
win->is_orphan = 0;
win->dpi_context = NTUSER_DPI_PER_MONITOR_AWARE;
+ win->monitor_dpi = USER_DEFAULT_SCREEN_DPI;
win->user_data = 0;
win->text = NULL;
win->text_len = 0;
@@ -2475,6 +2474,7 @@ DECL_HANDLER(set_window_pos)
@@ -2476,6 +2475,7 @@ DECL_HANDLER(set_window_pos)
win->paint_flags = (win->paint_flags & ~PAINT_CLIENT_FLAGS) | (req->paint_flags & PAINT_CLIENT_FLAGS);
if (win->paint_flags & PAINT_HAS_PIXEL_FORMAT) update_pixel_format_flags( win );

Expand All @@ -105,5 +90,5 @@ index 4ebfec3da12..b5e40bdd6f5 100644
&visible_rect, &surface_rect, &valid_rect );

--
2.45.2
2.46.0

Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
From 234a5006027da75bf6be463e0b33c532face60c3 Mon Sep 17 00:00:00 2001
From c3dc5488ab797d452a5499f66ae1028986c3e9c9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <[email protected]>
Date: Sat, 1 Jun 2024 23:03:40 +0200
Subject: [PATCH 2/7] win32u: Parameterize window_from_point dpi.
Subject: [PATCH 2/8] win32u: Parameterize window_from_point dpi.

---
dlls/win32u/input.c | 4 ++--
Expand All @@ -11,10 +11,10 @@ Subject: [PATCH 2/7] win32u: Parameterize window_from_point dpi.
4 files changed, 12 insertions(+), 12 deletions(-)

diff --git a/dlls/win32u/input.c b/dlls/win32u/input.c
index 5b25086cb6f..0d9fe0f1d38 100644
index 0324909c954..7bab5ef41b2 100644
--- a/dlls/win32u/input.c
+++ b/dlls/win32u/input.c
@@ -1607,7 +1607,7 @@ void update_mouse_tracking_info( HWND hwnd )
@@ -1631,7 +1631,7 @@ void update_mouse_tracking_info( HWND hwnd )
TRACE( "hwnd %p\n", hwnd );

get_cursor_pos( &pos );
Expand All @@ -23,7 +23,7 @@ index 5b25086cb6f..0d9fe0f1d38 100644

TRACE( "point %s hwnd %p hittest %d\n", wine_dbgstr_point(&pos), hwnd, hittest );

@@ -1703,7 +1703,7 @@ BOOL WINAPI NtUserTrackMouseEvent( TRACKMOUSEEVENT *info )
@@ -1727,7 +1727,7 @@ BOOL WINAPI NtUserTrackMouseEvent( TRACKMOUSEEVENT *info )
NtUserSystemParametersInfo( SPI_GETMOUSEHOVERTIME, 0, &hover_time, 0 );

get_cursor_pos( &pos );
Expand All @@ -33,10 +33,10 @@ index 5b25086cb6f..0d9fe0f1d38 100644

if (info->dwFlags & ~(TME_CANCEL | TME_HOVER | TME_LEAVE | TME_NONCLIENT))
diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c
index d1f49ca3ed9..049773fe7e3 100644
index 73c15defb04..36f0f9a0cec 100644
--- a/dlls/win32u/message.c
+++ b/dlls/win32u/message.c
@@ -2424,15 +2424,16 @@ static BOOL process_mouse_message( MSG *msg, UINT hw_id, ULONG_PTR extra_info, H
@@ -2434,15 +2434,16 @@ static BOOL process_mouse_message( MSG *msg, UINT hw_id, ULONG_PTR extra_info, H
else
{
HWND orig = msg->hwnd;
Expand All @@ -56,10 +56,10 @@ index d1f49ca3ed9..049773fe7e3 100644
}

diff --git a/dlls/win32u/win32u_private.h b/dlls/win32u/win32u_private.h
index 96517ef081a..8e33370ee48 100644
index 28801dfd30f..ace3233a0c3 100644
--- a/dlls/win32u/win32u_private.h
+++ b/dlls/win32u/win32u_private.h
@@ -252,7 +252,7 @@ extern BOOL set_window_pos( WINDOWPOS *winpos, int parent_x, int parent_y );
@@ -276,7 +276,7 @@ extern BOOL set_window_pos( WINDOWPOS *winpos, int parent_x, int parent_y );
extern ULONG set_window_style( HWND hwnd, ULONG set_bits, ULONG clear_bits );
extern BOOL show_owned_popups( HWND owner, BOOL show );
extern void update_window_state( HWND hwnd );
Expand All @@ -69,10 +69,10 @@ index 96517ef081a..8e33370ee48 100644
extern HWND get_progman_window(void);
extern HWND set_progman_window( HWND hwnd );
diff --git a/dlls/win32u/window.c b/dlls/win32u/window.c
index 193e7212e02..532bbb6bfec 100644
index 3317c2fcc38..7303e849296 100644
--- a/dlls/win32u/window.c
+++ b/dlls/win32u/window.c
@@ -2195,7 +2195,7 @@ done:
@@ -2412,7 +2412,7 @@ done:
* Point is in screen coordinates.
* Returned list must be freed by caller.
*/
Expand All @@ -81,7 +81,7 @@ index 193e7212e02..532bbb6bfec 100644
{
int i, size = 128;
HWND *list;
@@ -2211,7 +2211,7 @@ static HWND *list_children_from_point( HWND hwnd, POINT pt )
@@ -2428,7 +2428,7 @@ static HWND *list_children_from_point( HWND hwnd, POINT pt )
req->parent = wine_server_user_handle( hwnd );
req->x = pt.x;
req->y = pt.y;
Expand All @@ -90,7 +90,7 @@ index 193e7212e02..532bbb6bfec 100644
wine_server_set_reply( req, list, (size-1) * sizeof(user_handle_t) );
if (!wine_server_call( req )) count = reply->count;
}
@@ -2236,19 +2236,18 @@ static HWND *list_children_from_point( HWND hwnd, POINT pt )
@@ -2453,19 +2453,18 @@ static HWND *list_children_from_point( HWND hwnd, POINT pt )
*
* Find the window and hittest for a given point.
*/
Expand All @@ -113,7 +113,7 @@ index 193e7212e02..532bbb6bfec 100644

/* now determine the hittest */

@@ -2290,7 +2289,7 @@ HWND WINAPI NtUserWindowFromPoint( LONG x, LONG y )
@@ -2507,7 +2506,7 @@ HWND WINAPI NtUserWindowFromPoint( LONG x, LONG y )
{
POINT pt = { .x = x, .y = y };
INT hittest;
Expand All @@ -123,5 +123,5 @@ index 193e7212e02..532bbb6bfec 100644

/*******************************************************************
--
2.45.2
2.46.0

Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
From 1ee9763731bb7eea3ee901548094b090e96519fd Mon Sep 17 00:00:00 2001
From 879293ce8e4ea808a8ec42487a9eb442592fe88c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <[email protected]>
Date: Mon, 10 Jun 2024 12:11:20 +0200
Subject: [PATCH 3/7] win32u: Use per-monitor DPI window_from_point in
Subject: [PATCH 3/8] win32u: Use per-monitor DPI window_from_point in
process_mouse_message.

---
dlls/win32u/message.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c
index 049773fe7e3..9117979422f 100644
index 36f0f9a0cec..1c0f7bdeecf 100644
--- a/dlls/win32u/message.c
+++ b/dlls/win32u/message.c
@@ -2424,16 +2424,15 @@ static BOOL process_mouse_message( MSG *msg, UINT hw_id, ULONG_PTR extra_info, H
@@ -2434,16 +2434,15 @@ static BOOL process_mouse_message( MSG *msg, UINT hw_id, ULONG_PTR extra_info, H
else
{
HWND orig = msg->hwnd;
Expand All @@ -32,5 +32,5 @@ index 049773fe7e3..9117979422f 100644
}

--
2.45.2
2.46.0

Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
From a768e5e79226b1120d2448dd43a1450b82b73a56 Mon Sep 17 00:00:00 2001
From 81813a1854884cffee5036f9d82954be990118fe Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?R=C3=A9mi=20Bernon?= <[email protected]>
Date: Thu, 13 Jun 2024 09:25:53 +0200
Subject: [PATCH 4/7] win32u: Split hardware message window lookup to a
Subject: [PATCH 4/8] win32u: Split hardware message window lookup to a
separate helper.

---
dlls/win32u/message.c | 63 +++++++++++++++++++++----------------------
1 file changed, 31 insertions(+), 32 deletions(-)

diff --git a/dlls/win32u/message.c b/dlls/win32u/message.c
index 9117979422f..7ff38a923fa 100644
index 1c0f7bdeecf..d537a75aea5 100644
--- a/dlls/win32u/message.c
+++ b/dlls/win32u/message.c
@@ -2393,49 +2393,43 @@ static BOOL process_keyboard_message( MSG *msg, UINT hw_id, HWND hwnd_filter,
@@ -2403,49 +2403,43 @@ static BOOL process_keyboard_message( MSG *msg, UINT hw_id, HWND hwnd_filter,
return TRUE;
}

Expand Down Expand Up @@ -83,7 +83,7 @@ index 9117979422f..7ff38a923fa 100644
if (!msg->hwnd || !is_current_thread_window( msg->hwnd ))
{
accept_hardware_message( hw_id );
@@ -2470,7 +2464,7 @@ static BOOL process_mouse_message( MSG *msg, UINT hw_id, ULONG_PTR extra_info, H
@@ -2480,7 +2474,7 @@ static BOOL process_mouse_message( MSG *msg, UINT hw_id, ULONG_PTR extra_info, H
{
/* coordinates don't get translated while tracking a menu */
/* FIXME: should differentiate popups and top-level menus */
Expand All @@ -92,7 +92,7 @@ index 9117979422f..7ff38a923fa 100644
screen_to_client( msg->hwnd, &pt );
}
}
@@ -2489,7 +2483,7 @@ static BOOL process_mouse_message( MSG *msg, UINT hw_id, ULONG_PTR extra_info, H
@@ -2499,7 +2493,7 @@ static BOOL process_mouse_message( MSG *msg, UINT hw_id, ULONG_PTR extra_info, H
* note that ...MOUSEMOVEs can slip in between
* ...BUTTONDOWN and ...BUTTONDBLCLK messages */

Expand All @@ -101,7 +101,7 @@ index 9117979422f..7ff38a923fa 100644
hittest != HTCLIENT ||
(get_class_long( msg->hwnd, GCL_STYLE, FALSE ) & CS_DBLCLKS))
{
@@ -2546,7 +2540,7 @@ static BOOL process_mouse_message( MSG *msg, UINT hw_id, ULONG_PTR extra_info, H
@@ -2556,7 +2550,7 @@ static BOOL process_mouse_message( MSG *msg, UINT hw_id, ULONG_PTR extra_info, H

if (remove) accept_hardware_message( hw_id );

Expand All @@ -110,7 +110,7 @@ index 9117979422f..7ff38a923fa 100644
{
msg->message = message;
return TRUE;
@@ -2567,7 +2561,7 @@ static BOOL process_mouse_message( MSG *msg, UINT hw_id, ULONG_PTR extra_info, H
@@ -2577,7 +2571,7 @@ static BOOL process_mouse_message( MSG *msg, UINT hw_id, ULONG_PTR extra_info, H

/* Activate the window if needed */

Expand All @@ -119,7 +119,7 @@ index 9117979422f..7ff38a923fa 100644
{
HWND hwndTop = NtUserGetAncestor( msg->hwnd, GA_ROOT );

@@ -2616,12 +2610,17 @@ static BOOL process_hardware_message( MSG *msg, UINT hw_id, const struct hardwar
@@ -2626,12 +2620,17 @@ static BOOL process_hardware_message( MSG *msg, UINT hw_id, const struct hardwar
HWND hwnd_filter, UINT first, UINT last, BOOL remove )
{
struct ntuser_thread_info *thread_info = NtUserGetThreadInfo();
Expand All @@ -137,7 +137,7 @@ index 9117979422f..7ff38a923fa 100644
/* hardware messages are always in physical coords */
context = set_thread_dpi_awareness_context( NTUSER_DPI_PER_MONITOR_AWARE );

@@ -2630,7 +2629,7 @@ static BOOL process_hardware_message( MSG *msg, UINT hw_id, const struct hardwar
@@ -2640,7 +2639,7 @@ static BOOL process_hardware_message( MSG *msg, UINT hw_id, const struct hardwar
else if (is_keyboard_message( msg->message ))
ret = process_keyboard_message( msg, hw_id, hwnd_filter, first, last, remove );
else if (is_mouse_message( msg->message ))
Expand All @@ -147,5 +147,5 @@ index 9117979422f..7ff38a923fa 100644
ret = process_pointer_message( msg, hw_id, msg_data );
else if (msg->message == WM_WINE_CLIPCURSOR)
--
2.45.2
2.46.0

Loading

0 comments on commit 1a2ac5c

Please sign in to comment.