window: Add wrappers for xdg_surface_set_transient_for
diff --git a/clients/window.c b/clients/window.c
index 5a1ccbc..7888fc7 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -245,6 +245,8 @@
struct xdg_surface *xdg_surface;
struct xdg_popup *xdg_popup;
+ struct window *transient_for;
+
struct window_frame *frame;
/* struct surface::link, contains also main_surface */
@@ -3913,6 +3915,22 @@
};
static void
+window_sync_transient_for(struct window *window)
+{
+ struct wl_surface *parent_surface;
+
+ if (!window->xdg_surface)
+ return;
+
+ if (window->transient_for)
+ parent_surface = window->transient_for->main_surface->surface;
+ else
+ parent_surface = NULL;
+
+ xdg_surface_set_transient_for(window->xdg_surface, parent_surface);
+}
+
+static void
window_flush(struct window *window)
{
struct surface *surface;
@@ -3926,6 +3944,8 @@
xdg_surface_set_user_data(window->xdg_surface, window);
xdg_surface_add_listener(window->xdg_surface,
&xdg_surface_listener, window);
+
+ window_sync_transient_for(window);
}
}
@@ -4372,6 +4392,20 @@
return window_create_internal(display, 1);
}
+void
+window_set_transient_for(struct window *window,
+ struct window *parent_window)
+{
+ window->transient_for = parent_window;
+ window_sync_transient_for(window);
+}
+
+struct window *
+window_get_transient_for(struct window *window)
+{
+ return window->transient_for;
+}
+
static void
menu_set_item(struct menu *menu, int sy)
{