From 53686048ccb9836c1e36d32d36e788d49239a634 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Mon, 9 Dec 2013 15:26:25 -0500 Subject: [PATCH] window: Add wrappers for xdg_surface_set_transient_for --- clients/window.c | 34 ++++++++++++++++++++++++++++++++++ clients/window.h | 5 +++++ 2 files changed, 39 insertions(+) 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 window { 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 const struct xdg_surface_listener xdg_surface_listener = { }; 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 @@ window_flush(struct window *window) 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 @@ window_create_custom(struct display *display) 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) { diff --git a/clients/window.h b/clients/window.h index 357ecdc..7ec3537 100644 --- a/clients/window.h +++ b/clients/window.h @@ -272,6 +272,11 @@ window_create(struct display *display); struct window * window_create_custom(struct display *display); +void +window_set_transient_for(struct window *window, struct window *parent_window); +struct window * +window_get_transient_for(struct window *window); + int window_has_focus(struct window *window); -- 2.7.4