mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2025-01-15 23:00:08 +00:00
gdkwindow: subsurface in gdk_window_get_parent()
When the GtkWidget hierarchy does not match the GdkWindow hierarchy, the GtkWidget code may find a common ancestor that cannot be found while traversing the GdkWindow tree using gdk_window_get_parent(). This happens with for example on Wayland, a GtkPopover has another GtkPopover as parent, in this case, the GdkWindow parent is the root window, whereas the GtkWidget parent is the other GtkPopover. That confuses the gtk_widget_translate_coordinates() logic which will bail out in this case and won't return the translated coordinates. Make gdk_window_get_effective_parent() aware of subsurfaces and use the transient_for which represents the actual parent (whereas the parent might be pointing to the root window). Bugzilla: https://bugzilla.gnome.org/show_bug.cgi?id=774148
This commit is contained in:
parent
2761fae728
commit
19ce6a8bc5
@ -456,6 +456,12 @@ gdk_window_get_property (GObject *object,
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gdk_window_is_subsurface (GdkWindow *window)
|
||||
{
|
||||
return window->window_type == GDK_WINDOW_SUBSURFACE;
|
||||
}
|
||||
|
||||
static GdkWindow *
|
||||
gdk_window_get_impl_window (GdkWindow *window)
|
||||
{
|
||||
@ -1729,7 +1735,10 @@ gdk_window_get_parent (GdkWindow *window)
|
||||
{
|
||||
g_return_val_if_fail (GDK_IS_WINDOW (window), NULL);
|
||||
|
||||
return window->parent;
|
||||
if (gdk_window_is_subsurface (window))
|
||||
return window->transient_for;
|
||||
else
|
||||
return window->parent;
|
||||
}
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user