diff options
author | emersion <contact@emersion.fr> | 2018-07-19 13:29:58 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-07-19 13:29:58 +0100 |
commit | 3a13455b4e23990bb8cdc96f231ab7a78c2d98df (patch) | |
tree | dd9e58923e6425aa8de4dc099f097de68d67ff5c /sway/desktop | |
parent | cb4309b7cddaea9471254cb38fdede40db557f3f (diff) | |
parent | eecb3934016544b76741f2b1f4638dc0c2066b88 (diff) |
Merge pull request #2309 from RyanDwyer/xwayland-set-hints
Allow xwayland views to become urgent when on a non-visible workspace
Diffstat (limited to 'sway/desktop')
-rw-r--r-- | sway/desktop/xwayland.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/sway/desktop/xwayland.c b/sway/desktop/xwayland.c index 7737a33a..72dc7ca2 100644 --- a/sway/desktop/xwayland.c +++ b/sway/desktop/xwayland.c @@ -290,10 +290,6 @@ static void handle_commit(struct wl_listener *listener, void *data) { } view_damage_from(view); - - if (view->allow_request_urgent) { - view_set_urgent(view, (bool)xsurface->hints_urgency); - } } static void handle_destroy(struct wl_listener *listener, void *data) { @@ -312,6 +308,7 @@ static void handle_destroy(struct wl_listener *listener, void *data) { wl_list_remove(&xwayland_view->set_title.link); wl_list_remove(&xwayland_view->set_class.link); wl_list_remove(&xwayland_view->set_window_type.link); + wl_list_remove(&xwayland_view->set_hints.link); wl_list_remove(&xwayland_view->map.link); wl_list_remove(&xwayland_view->unmap.link); view_destroy(&xwayland_view->view); @@ -437,6 +434,19 @@ static void handle_set_window_type(struct wl_listener *listener, void *data) { view_execute_criteria(view); } +static void handle_set_hints(struct wl_listener *listener, void *data) { + struct sway_xwayland_view *xwayland_view = + wl_container_of(listener, xwayland_view, set_hints); + struct sway_view *view = &xwayland_view->view; + struct wlr_xwayland_surface *xsurface = view->wlr_xwayland_surface; + if (!xsurface->mapped) { + return; + } + if (view->allow_request_urgent) { + view_set_urgent(view, (bool)xsurface->hints_urgency); + } +} + struct sway_view *view_from_wlr_xwayland_surface( struct wlr_xwayland_surface *xsurface) { return xsurface->data; @@ -489,6 +499,9 @@ void handle_xwayland_surface(struct wl_listener *listener, void *data) { &xwayland_view->set_window_type); xwayland_view->set_window_type.notify = handle_set_window_type; + wl_signal_add(&xsurface->events.set_hints, &xwayland_view->set_hints); + xwayland_view->set_hints.notify = handle_set_hints; + wl_signal_add(&xsurface->events.unmap, &xwayland_view->unmap); xwayland_view->unmap.notify = handle_unmap; |