forked from AuroraMiddleware/gtk
win32: in window_at_pointer, ensure that we handle non-client areas correctly
We should not return a window if the pointer is in the non-client area, like the titlebar.
This commit is contained in:
parent
f0f7c07f4d
commit
321acc3286
@ -384,6 +384,16 @@ gdk_device_win32_window_at_position (GdkDevice *device,
|
||||
screen_to_client (hwnd, screen_pt, &client_pt);
|
||||
hwndc = ChildWindowFromPointEx (hwnd, client_pt, CWP_SKIPDISABLED |
|
||||
CWP_SKIPINVISIBLE);
|
||||
|
||||
/* Verify that we're really inside the client area of the window */
|
||||
if (hwndc != hwnd)
|
||||
{
|
||||
GetClientRect (hwndc, &rect);
|
||||
screen_to_client (hwndc, screen_pt, &client_pt);
|
||||
if (!PtInRect (&rect, client_pt))
|
||||
hwndc = hwnd;
|
||||
}
|
||||
|
||||
} while (hwndc != hwnd && (hwnd = hwndc, 1));
|
||||
|
||||
}
|
||||
@ -391,6 +401,12 @@ gdk_device_win32_window_at_position (GdkDevice *device,
|
||||
{
|
||||
hwnd = WindowFromPoint (screen_pt);
|
||||
|
||||
/* Verify that we're really inside the client area of the window */
|
||||
GetClientRect (hwnd, &rect);
|
||||
screen_to_client (hwnd, screen_pt, &client_pt);
|
||||
if (!PtInRect (&rect, client_pt))
|
||||
hwnd = NULL;
|
||||
|
||||
/* If we didn't hit any window at that point, return the desktop */
|
||||
if (hwnd == NULL)
|
||||
{
|
||||
@ -406,13 +422,10 @@ gdk_device_win32_window_at_position (GdkDevice *device,
|
||||
|
||||
if (window && (win_x || win_y))
|
||||
{
|
||||
screen_to_client (hwnd, screen_pt, &client_pt);
|
||||
GetClientRect (hwnd, &rect);
|
||||
|
||||
if (win_x)
|
||||
*win_x = client_pt.x - rect.left;
|
||||
*win_x = client_pt.x;
|
||||
if (win_y)
|
||||
*win_y = client_pt.y - rect.top;
|
||||
*win_y = client_pt.y;
|
||||
}
|
||||
|
||||
return window;
|
||||
|
Loading…
Reference in New Issue
Block a user