Alexandre Julliard : server: Use screen coordinates in the update_window_zorder request.
Alexandre Julliard
julliard at winehq.org
Mon Aug 27 16:18:15 CDT 2018
Module: wine
Branch: master
Commit: dc6f39ac29bdac0d1be836bbd8d4e720ed2ab88c
URL: https://source.winehq.org/git/wine.git/?a=commit;h=dc6f39ac29bdac0d1be836bbd8d4e720ed2ab88c
Author: Alexandre Julliard <julliard at winehq.org>
Date: Mon Aug 27 14:24:15 2018 +0200
server: Use screen coordinates in the update_window_zorder request.
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/wineandroid.drv/window.c | 3 ---
dlls/winemac.drv/mouse.c | 13 ++++---------
dlls/winex11.drv/event.c | 12 +++++++-----
dlls/winex11.drv/mouse.c | 1 -
server/window.c | 7 +++----
5 files changed, 14 insertions(+), 22 deletions(-)
diff --git a/dlls/wineandroid.drv/window.c b/dlls/wineandroid.drv/window.c
index 61c11ce..aebe4c5 100644
--- a/dlls/wineandroid.drv/window.c
+++ b/dlls/wineandroid.drv/window.c
@@ -491,7 +491,6 @@ static int process_events( DWORD mask )
{
HWND capture = get_capture_window();
- context = SetThreadDpiAwarenessContext( DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE );
if (event->data.motion.input.u.mi.dwFlags & (MOUSEEVENTF_LEFTDOWN|MOUSEEVENTF_RIGHTDOWN|MOUSEEVENTF_MIDDLEDOWN))
TRACE( "BUTTONDOWN pos %d,%d hwnd %p flags %x\n",
event->data.motion.input.u.mi.dx, event->data.motion.input.u.mi.dy,
@@ -509,7 +508,6 @@ static int process_events( DWORD mask )
RECT rect;
SetRect( &rect, event->data.motion.input.u.mi.dx, event->data.motion.input.u.mi.dy,
event->data.motion.input.u.mi.dx + 1, event->data.motion.input.u.mi.dy + 1 );
- MapWindowPoints( 0, event->data.motion.hwnd, (POINT *)&rect, 2 );
SERVER_START_REQ( update_window_zorder )
{
@@ -523,7 +521,6 @@ static int process_events( DWORD mask )
SERVER_END_REQ;
}
__wine_send_input( capture ? capture : event->data.motion.hwnd, &event->data.motion.input );
- SetThreadDpiAwarenessContext( context );
}
break;
diff --git a/dlls/winemac.drv/mouse.c b/dlls/winemac.drv/mouse.c
index a6369c6..dd6443f 100644
--- a/dlls/winemac.drv/mouse.c
+++ b/dlls/winemac.drv/mouse.c
@@ -144,19 +144,14 @@ static void send_mouse_input(HWND hwnd, macdrv_window cocoa_window, UINT flags,
if ((flags & MOUSEEVENTF_MOVE) && (flags & MOUSEEVENTF_ABSOLUTE) && !drag &&
cocoa_window != macdrv_thread_data()->capture_window)
{
- RECT rect;
-
/* update the wine server Z-order */
- SetRect(&rect, x, y, x + 1, y + 1);
- MapWindowPoints(0, top_level_hwnd, (POINT *)&rect, 2);
-
SERVER_START_REQ(update_window_zorder)
{
req->window = wine_server_user_handle(top_level_hwnd);
- req->rect.left = rect.left;
- req->rect.top = rect.top;
- req->rect.right = rect.right;
- req->rect.bottom = rect.bottom;
+ req->rect.left = x;
+ req->rect.top = y;
+ req->rect.right = x + 1;
+ req->rect.bottom = y + 1;
wine_server_call(req);
}
SERVER_END_REQ;
diff --git a/dlls/winex11.drv/event.c b/dlls/winex11.drv/event.c
index 606fa69..b36ce6f 100644
--- a/dlls/winex11.drv/event.c
+++ b/dlls/winex11.drv/event.c
@@ -858,7 +858,7 @@ static BOOL X11DRV_FocusOut( HWND hwnd, XEvent *xev )
static BOOL X11DRV_Expose( HWND hwnd, XEvent *xev )
{
XExposeEvent *event = &xev->xexpose;
- RECT rect;
+ RECT rect, abs_rect;
POINT pos;
struct x11drv_win_data *data;
HRGN surface_region = 0;
@@ -901,14 +901,16 @@ static BOOL X11DRV_Expose( HWND hwnd, XEvent *xev )
{
if (GetWindowLongW( data->hwnd, GWL_EXSTYLE ) & WS_EX_LAYOUTRTL)
mirror_rect( &data->client_rect, &rect );
+ abs_rect = rect;
+ MapWindowPoints( hwnd, 0, (POINT *)&abs_rect, 2 );
SERVER_START_REQ( update_window_zorder )
{
req->window = wine_server_user_handle( hwnd );
- req->rect.left = rect.left;
- req->rect.top = rect.top;
- req->rect.right = rect.right;
- req->rect.bottom = rect.bottom;
+ req->rect.left = abs_rect.left;
+ req->rect.top = abs_rect.top;
+ req->rect.right = abs_rect.right;
+ req->rect.bottom = abs_rect.bottom;
wine_server_call( req );
}
SERVER_END_REQ;
diff --git a/dlls/winex11.drv/mouse.c b/dlls/winex11.drv/mouse.c
index 8b2966d..10985c1 100644
--- a/dlls/winex11.drv/mouse.c
+++ b/dlls/winex11.drv/mouse.c
@@ -627,7 +627,6 @@ static void send_mouse_input( HWND hwnd, Window window, unsigned int state, INPU
{
RECT rect;
SetRect( &rect, pt.x, pt.y, pt.x + 1, pt.y + 1 );
- MapWindowPoints( 0, hwnd, (POINT *)&rect, 2 );
SERVER_START_REQ( update_window_zorder )
{
diff --git a/server/window.c b/server/window.c
index 36efb15..c9b131c 100644
--- a/server/window.c
+++ b/server/window.c
@@ -2652,8 +2652,6 @@ DECL_HANDLER(update_window_zorder)
struct window *ptr, *win = get_window( req->window );
if (!win || !win->parent || !is_visible( win )) return; /* nothing to do */
- if (win->ex_style & WS_EX_LAYOUTRTL) mirror_rect( &win->client_rect, &rect );
- offset_rect( &rect, win->client_rect.left, win->client_rect.top );
LIST_FOR_EACH_ENTRY( ptr, &win->parent->children, struct window, entry )
{
@@ -2661,10 +2659,11 @@ DECL_HANDLER(update_window_zorder)
if (!(ptr->style & WS_VISIBLE)) continue;
if (ptr->ex_style & WS_EX_TRANSPARENT) continue;
if (ptr->is_layered && (ptr->layered_flags & LWA_COLORKEY)) continue;
- if (!intersect_rect( &tmp, &ptr->visible_rect, &rect )) continue;
+ tmp = rect;
+ map_dpi_rect( win, &tmp, win->parent->dpi, win->dpi );
+ if (!intersect_rect( &tmp, &tmp, &ptr->visible_rect )) continue;
if (ptr->win_region)
{
- tmp = rect;
offset_rect( &tmp, -ptr->window_rect.left, -ptr->window_rect.top );
if (!rect_in_region( ptr->win_region, &tmp )) continue;
}
More information about the wine-cvs
mailing list