diff options
author | Ryan Dwyer <ryandwyer1@gmail.com> | 2018-07-19 21:08:51 +1000 |
---|---|---|
committer | Ryan Dwyer <ryandwyer1@gmail.com> | 2018-07-19 21:08:51 +1000 |
commit | 63d6233fcb601abd40f6c611aa4193766aaf9044 (patch) | |
tree | ab483bbac370d68b62fdc54ab6e61ff17229b97b /sway/desktop | |
parent | 4931d0ddc5d9de1f823af7efd931702b2fa80260 (diff) |
Allow xwayland views to become urgent when on a non-visible workspace
This removes the urgency stuff from the commit handler and puts it in a
new set_hints handler instead. This allows the xwayland surface to
become urgent without having to commit (which doesn't happen if it's on
an 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; |