summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTimm Bäder <mail@baedert.org>2017-06-21 13:25:41 +0200
committerTimm Bäder <mail@baedert.org>2017-06-28 13:20:59 +0200
commit8a781928e6dedf2afa9f526f615887cc870f90e3 (patch)
tree2fe34b4707da5d6f0cb8117450e0b8aa19072665
parent4faa610d57bf652f078b0da87777a4b0fba849d7 (diff)
downloadgtk+-8a781928e6dedf2afa9f526f615887cc870f90e3.tar.gz
popover: Create subsurface on wayland
-rw-r--r--gtk/gtkpopover.c27
1 files changed, 23 insertions, 4 deletions
diff --git a/gtk/gtkpopover.c b/gtk/gtkpopover.c
index 2ae6f7a1f1..05cbacb346 100644
--- a/gtk/gtkpopover.c
+++ b/gtk/gtkpopover.c
@@ -378,11 +378,30 @@ gtk_popover_realize (GtkWidget *widget)
GtkAllocation allocation;
GdkWindow *window;
- gtk_widget_get_allocation (widget, &allocation);
+ gtk_widget_get_window_allocation (widget, &allocation);
+
+#ifdef GDK_WINDOWING_WAYLAND
+ if (GDK_IS_WAYLAND_DISPLAY (gtk_widget_get_display (widget)))
+ {
+ GtkWidget *toplevel = gtk_widget_get_toplevel (widget);
+
+ g_assert (GTK_IS_WINDOW (toplevel));
+
+ window = gdk_wayland_window_new_subsurface (gtk_widget_get_display (toplevel),
+ GDK_ALL_EVENTS_MASK,
+ &allocation);
+
+ gdk_window_set_transient_for (window,
+ gtk_widget_get_window (toplevel));
+ }
+ else
+#endif
+ {
+ window = gdk_window_new_child (gtk_widget_get_parent_window (widget),
+ GDK_ALL_EVENTS_MASK,
+ &allocation);
+ }
- window = gdk_window_new_child (gtk_widget_get_parent_window (widget),
- GDK_ALL_EVENTS_MASK,
- &(GdkRectangle) { 0, 0, allocation.width, allocation.height });
gtk_widget_set_window (widget, window);
gtk_widget_register_window (widget, window);
gtk_widget_set_realized (widget, TRUE);