d7ee93061b
New stable and patch OBS-URL: https://build.opensuse.org/request/show/449262 OBS-URL: https://build.opensuse.org/package/show/GNOME:Factory/gtk3?expand=0&rev=262
55 lines
1.9 KiB
Diff
55 lines
1.9 KiB
Diff
From 5bae71f896eb5516c04b1b2374aaff05cfb8b3c0 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
|
Date: Thu, 5 Jan 2017 16:01:49 +0800
|
|
Subject: wayland: Handle subsurface as popup parent
|
|
|
|
When a subsurface is used as a parent of a popup, GDK needs to traverse
|
|
up to the transient-for as the next parent, to properly find the parent
|
|
used by the popup positioner. This is because the parent of a popup
|
|
must always either be an xdg_popup or an xdg_surface, but traversing
|
|
the "parent" (in GDK terms) upwards from a subsurface will end up on
|
|
the fake root window before we hit the actual parent (in Wayland terms).
|
|
|
|
https://bugzilla.gnome.org/show_bug.cgi?id=776225
|
|
---
|
|
gdk/wayland/gdkwindow-wayland.c | 20 ++++++++++++++++----
|
|
1 file changed, 16 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c
|
|
index 0314117..8fce48b 100644
|
|
--- a/gdk/wayland/gdkwindow-wayland.c
|
|
+++ b/gdk/wayland/gdkwindow-wayland.c
|
|
@@ -1656,13 +1656,25 @@ get_real_parent_and_translate (GdkWindow *window,
|
|
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
|
|
GdkWindow *parent = impl->transient_for;
|
|
|
|
- while (parent &&
|
|
- !gdk_window_has_native (parent) &&
|
|
- gdk_window_get_effective_parent (parent))
|
|
+ while (parent)
|
|
{
|
|
+ GdkWindowImplWayland *parent_impl =
|
|
+ GDK_WINDOW_IMPL_WAYLAND (parent->impl);
|
|
+ GdkWindow *effective_parent = gdk_window_get_effective_parent (parent);
|
|
+
|
|
+ if ((gdk_window_has_native (parent) &&
|
|
+ !parent_impl->display_server.wl_subsurface) ||
|
|
+ !effective_parent)
|
|
+ break;
|
|
+
|
|
*x += parent->x;
|
|
*y += parent->y;
|
|
- parent = gdk_window_get_effective_parent (parent);
|
|
+
|
|
+ if (gdk_window_has_native (parent) &&
|
|
+ parent_impl->display_server.wl_subsurface)
|
|
+ parent = parent->transient_for;
|
|
+ else
|
|
+ parent = effective_parent;
|
|
}
|
|
|
|
return parent;
|
|
--
|
|
cgit v0.12
|
|
|