Merge branch 'wip/chergert/remove-get_toplevel' into 'master'

device: remove get_toplevel from surface_at_position vfunc

Closes #2765

See merge request GNOME/gtk!1941
This commit is contained in:
Christian Hergert
2020-05-19 22:59:41 +00:00
9 changed files with 55 additions and 94 deletions

View File

@@ -54,8 +54,7 @@ static void gdk_broadway_device_ungrab (GdkDevice *device,
static GdkSurface * gdk_broadway_device_surface_at_position (GdkDevice *device,
gdouble *win_x,
gdouble *win_y,
GdkModifierType *mask,
gboolean get_toplevel);
GdkModifierType *mask);
G_DEFINE_TYPE (GdkBroadwayDevice, gdk_broadway_device, GDK_TYPE_DEVICE)
@@ -292,8 +291,7 @@ static GdkSurface *
gdk_broadway_device_surface_at_position (GdkDevice *device,
gdouble *win_x,
gdouble *win_y,
GdkModifierType *mask,
gboolean get_toplevel)
GdkModifierType *mask)
{
GdkSurface *surface = NULL;

View File

@@ -628,7 +628,7 @@ gdk_device_get_surface_at_position (GdkDevice *device,
g_return_val_if_fail (gdk_device_get_device_type (device) != GDK_DEVICE_TYPE_SLAVE ||
gdk_display_device_is_grabbed (gdk_device_get_display (device), device), NULL);
surface = _gdk_device_surface_at_position (device, &tmp_x, &tmp_y, NULL, FALSE);
surface = _gdk_device_surface_at_position (device, &tmp_x, &tmp_y, NULL);
if (win_x)
*win_x = tmp_x;
@@ -1588,17 +1588,15 @@ _gdk_device_query_state (GdkDevice *device,
}
GdkSurface *
_gdk_device_surface_at_position (GdkDevice *device,
gdouble *win_x,
gdouble *win_y,
GdkModifierType *mask,
gboolean get_toplevel)
_gdk_device_surface_at_position (GdkDevice *device,
gdouble *win_x,
gdouble *win_y,
GdkModifierType *mask)
{
return GDK_DEVICE_GET_CLASS (device)->surface_at_position (device,
win_x,
win_y,
mask,
get_toplevel);
win_x,
win_y,
mask);
}
/**

View File

@@ -105,8 +105,7 @@ struct _GdkDeviceClass
GdkSurface * (* surface_at_position) (GdkDevice *device,
double *win_x,
double *win_y,
GdkModifierType *mask,
gboolean get_toplevel);
GdkModifierType *mask);
};
void _gdk_device_set_associated_device (GdkDevice *device,
@@ -167,8 +166,7 @@ void _gdk_device_query_state (GdkDevice *device,
GdkSurface * _gdk_device_surface_at_position (GdkDevice *device,
gdouble *win_x,
gdouble *win_y,
GdkModifierType *mask,
gboolean get_toplevel);
GdkModifierType *mask);
void gdk_device_set_seat (GdkDevice *device,
GdkSeat *seat);

View File

@@ -589,7 +589,7 @@ get_current_toplevel (GdkDisplay *display,
gdouble x, y;
GdkModifierType state;
pointer_surface = _gdk_device_surface_at_position (device, &x, &y, &state, TRUE);
pointer_surface = _gdk_device_surface_at_position (device, &x, &y, &state);
if (pointer_surface != NULL &&
GDK_SURFACE_DESTROYED (pointer_surface))

View File

@@ -802,10 +802,9 @@ gdk_wayland_device_ungrab (GdkDevice *device,
static GdkSurface *
gdk_wayland_device_surface_at_position (GdkDevice *device,
gdouble *win_x,
gdouble *win_y,
GdkModifierType *mask,
gboolean get_toplevel)
gdouble *win_x,
gdouble *win_y,
GdkModifierType *mask)
{
GdkWaylandPointerData *pointer;

View File

@@ -177,10 +177,9 @@ screen_to_client (HWND hwnd, POINT screen_pt, POINT *client_pt)
GdkSurface *
_gdk_device_win32_surface_at_position (GdkDevice *device,
gdouble *win_x,
gdouble *win_y,
GdkModifierType *mask,
gboolean get_toplevel)
gdouble *win_x,
gdouble *win_y,
GdkModifierType *mask)
{
GdkSurface *window = NULL;
GdkWin32Surface *impl = NULL;
@@ -190,60 +189,33 @@ _gdk_device_win32_surface_at_position (GdkDevice *device,
GetCursorPos (&screen_pt);
if (get_toplevel)
{
/* Only consider visible children of the desktop to avoid the various
* non-visible windows you often find on a running Windows box. These
* might overlap our windows and cause our walk to fail. As we assume
* WindowFromPoint() can find our windows, we follow similar logic
* here, and ignore invisible and disabled windows.
*/
hwnd = GetDesktopWindow ();
do {
window = gdk_win32_handle_table_lookup (hwnd);
/* Only consider visible children of the desktop to avoid the various
* non-visible windows you often find on a running Windows box. These
* might overlap our windows and cause our walk to fail. As we assume
* WindowFromPoint() can find our windows, we follow similar logic
* here, and ignore invisible and disabled windows.
*/
hwnd = GetDesktopWindow ();
do {
window = gdk_win32_handle_table_lookup (hwnd);
if (window != NULL)
break;
if (window != NULL)
break;
screen_to_client (hwnd, screen_pt, &client_pt);
hwndc = ChildWindowFromPointEx (hwnd, client_pt, CWP_SKIPDISABLED |
CWP_SKIPINVISIBLE);
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;
}
/* 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));
}
else
{
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)
{
if (win_x)
*win_x = screen_pt.x + _gdk_offset_x;
if (win_y)
*win_y = screen_pt.y + _gdk_offset_y;
return NULL;
}
window = gdk_win32_handle_table_lookup (hwnd);
}
} while (hwndc != hwnd && (hwnd = hwndc, 1));
if (window && (win_x || win_y))
{

View File

@@ -45,10 +45,9 @@ struct _GdkDeviceWin32Class
GType gdk_device_win32_get_type (void) G_GNUC_CONST;
GdkSurface *_gdk_device_win32_surface_at_position (GdkDevice *device,
gdouble *win_x,
gdouble *win_y,
GdkModifierType *mask,
gboolean get_toplevel);
gdouble *win_x,
gdouble *win_y,
GdkModifierType *mask);
G_END_DECLS

View File

@@ -188,10 +188,9 @@ gdk_device_wintab_ungrab (GdkDevice *device,
static GdkSurface *
gdk_device_wintab_surface_at_position (GdkDevice *device,
gdouble *win_x,
gdouble *win_y,
GdkModifierType *mask,
gboolean get_toplevel)
gdouble *win_x,
gdouble *win_y,
GdkModifierType *mask)
{
return NULL;
}

View File

@@ -95,10 +95,9 @@ static void gdk_x11_device_xi2_ungrab (GdkDevice *device,
guint32 time_);
static GdkSurface * gdk_x11_device_xi2_surface_at_position (GdkDevice *device,
gdouble *win_x,
gdouble *win_y,
GdkModifierType *mask,
gboolean get_toplevel);
gdouble *win_x,
gdouble *win_y,
GdkModifierType *mask);
enum {
@@ -448,10 +447,9 @@ gdk_x11_device_xi2_ungrab (GdkDevice *device,
static GdkSurface *
gdk_x11_device_xi2_surface_at_position (GdkDevice *device,
gdouble *win_x,
gdouble *win_y,
GdkModifierType *mask,
gboolean get_toplevel)
gdouble *win_x,
gdouble *win_y,
GdkModifierType *mask)
{
GdkX11Surface *impl;
GdkX11DeviceXI2 *device_xi2 = GDK_X11_DEVICE_XI2 (device);
@@ -587,7 +585,7 @@ gdk_x11_device_xi2_surface_at_position (GdkDevice *device,
if (!retval)
break;
if (get_toplevel && last != root &&
if (last != root &&
(surface = gdk_x11_surface_lookup_for_display (display, last)) != NULL)
{
xwindow = last;