mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-08 17:50:10 +00:00
device: remove get_toplevel from surface_at_position vfunc
This is not used anymore now that surfaces are always toplevel in the semantics of GdkWindow where child windows were available. We can drop that and simplify the vfunc just a bit more. Fixes #2765
This commit is contained in:
parent
841e9b3f0e
commit
fa08d848ca
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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);
|
||||
|
@ -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))
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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))
|
||||
{
|
||||
|
@ -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
|
||||
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user