aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLibravatar emersion <contact@emersion.fr>2018-07-22 22:20:07 +0100
committerLibravatar emersion <contact@emersion.fr>2018-07-22 22:20:07 +0100
commit238c8afc74241efdc44d1cf88322d322ce1226d9 (patch)
tree67496961350dfc7959a74e33be428efb5e567698
parentMerge pull request #2296 from RyanDwyer/floating-modifier (diff)
downloadsway-238c8afc74241efdc44d1cf88322d322ce1226d9.tar.gz
sway-238c8afc74241efdc44d1cf88322d322ce1226d9.tar.zst
sway-238c8afc74241efdc44d1cf88322d322ce1226d9.zip
Handle set_{title,app_id} for xdg-shell and zxdg-shell-v6
This allows to update the title even if the view doesn't commit. This is useful e.g. when a terminal sets its toplevel title to the currently running command and when the view isn't visible.
-rw-r--r--include/sway/tree/view.h4
-rw-r--r--sway/desktop/xdg_shell.c26
-rw-r--r--sway/desktop/xdg_shell_v6.c26
3 files changed, 54 insertions, 2 deletions
diff --git a/include/sway/tree/view.h b/include/sway/tree/view.h
index 1dfb218b..3bdfe252 100644
--- a/include/sway/tree/view.h
+++ b/include/sway/tree/view.h
@@ -110,6 +110,8 @@ struct sway_xdg_shell_v6_view {
110 struct wl_listener request_resize; 110 struct wl_listener request_resize;
111 struct wl_listener request_maximize; 111 struct wl_listener request_maximize;
112 struct wl_listener request_fullscreen; 112 struct wl_listener request_fullscreen;
113 struct wl_listener set_title;
114 struct wl_listener set_app_id;
113 struct wl_listener new_popup; 115 struct wl_listener new_popup;
114 struct wl_listener map; 116 struct wl_listener map;
115 struct wl_listener unmap; 117 struct wl_listener unmap;
@@ -124,6 +126,8 @@ struct sway_xdg_shell_view {
124 struct wl_listener request_resize; 126 struct wl_listener request_resize;
125 struct wl_listener request_maximize; 127 struct wl_listener request_maximize;
126 struct wl_listener request_fullscreen; 128 struct wl_listener request_fullscreen;
129 struct wl_listener set_title;
130 struct wl_listener set_app_id;
127 struct wl_listener new_popup; 131 struct wl_listener new_popup;
128 struct wl_listener map; 132 struct wl_listener map;
129 struct wl_listener unmap; 133 struct wl_listener unmap;
diff --git a/sway/desktop/xdg_shell.c b/sway/desktop/xdg_shell.c
index 706b35c3..62c3abc8 100644
--- a/sway/desktop/xdg_shell.c
+++ b/sway/desktop/xdg_shell.c
@@ -225,10 +225,24 @@ static void handle_commit(struct wl_listener *listener, void *data) {
225 transaction_notify_view_ready(view, xdg_surface->configure_serial); 225 transaction_notify_view_ready(view, xdg_surface->configure_serial);
226 } 226 }
227 227
228 view_update_title(view, false);
229 view_damage_from(view); 228 view_damage_from(view);
230} 229}
231 230
231static void handle_set_title(struct wl_listener *listener, void *data) {
232 struct sway_xdg_shell_view *xdg_shell_view =
233 wl_container_of(listener, xdg_shell_view, set_title);
234 struct sway_view *view = &xdg_shell_view->view;
235 view_update_title(view, false);
236 view_execute_criteria(view);
237}
238
239static void handle_set_app_id(struct wl_listener *listener, void *data) {
240 struct sway_xdg_shell_view *xdg_shell_view =
241 wl_container_of(listener, xdg_shell_view, set_app_id);
242 struct sway_view *view = &xdg_shell_view->view;
243 view_execute_criteria(view);
244}
245
232static void handle_new_popup(struct wl_listener *listener, void *data) { 246static void handle_new_popup(struct wl_listener *listener, void *data) {
233 struct sway_xdg_shell_view *xdg_shell_view = 247 struct sway_xdg_shell_view *xdg_shell_view =
234 wl_container_of(listener, xdg_shell_view, new_popup); 248 wl_container_of(listener, xdg_shell_view, new_popup);
@@ -304,6 +318,8 @@ static void handle_unmap(struct wl_listener *listener, void *data) {
304 wl_list_remove(&xdg_shell_view->request_fullscreen.link); 318 wl_list_remove(&xdg_shell_view->request_fullscreen.link);
305 wl_list_remove(&xdg_shell_view->request_move.link); 319 wl_list_remove(&xdg_shell_view->request_move.link);
306 wl_list_remove(&xdg_shell_view->request_resize.link); 320 wl_list_remove(&xdg_shell_view->request_resize.link);
321 wl_list_remove(&xdg_shell_view->set_title.link);
322 wl_list_remove(&xdg_shell_view->set_app_id.link);
307} 323}
308 324
309static void handle_map(struct wl_listener *listener, void *data) { 325static void handle_map(struct wl_listener *listener, void *data) {
@@ -349,6 +365,14 @@ static void handle_map(struct wl_listener *listener, void *data) {
349 xdg_shell_view->request_resize.notify = handle_request_resize; 365 xdg_shell_view->request_resize.notify = handle_request_resize;
350 wl_signal_add(&xdg_surface->toplevel->events.request_resize, 366 wl_signal_add(&xdg_surface->toplevel->events.request_resize,
351 &xdg_shell_view->request_resize); 367 &xdg_shell_view->request_resize);
368
369 xdg_shell_view->set_title.notify = handle_set_title;
370 wl_signal_add(&xdg_surface->toplevel->events.set_title,
371 &xdg_shell_view->set_title);
372
373 xdg_shell_view->set_app_id.notify = handle_set_app_id;
374 wl_signal_add(&xdg_surface->toplevel->events.set_app_id,
375 &xdg_shell_view->set_app_id);
352} 376}
353 377
354static void handle_destroy(struct wl_listener *listener, void *data) { 378static void handle_destroy(struct wl_listener *listener, void *data) {
diff --git a/sway/desktop/xdg_shell_v6.c b/sway/desktop/xdg_shell_v6.c
index 201b5b1e..7fb85410 100644
--- a/sway/desktop/xdg_shell_v6.c
+++ b/sway/desktop/xdg_shell_v6.c
@@ -220,10 +220,24 @@ static void handle_commit(struct wl_listener *listener, void *data) {
220 transaction_notify_view_ready(view, xdg_surface_v6->configure_serial); 220 transaction_notify_view_ready(view, xdg_surface_v6->configure_serial);
221 } 221 }
222 222
223 view_update_title(view, false);
224 view_damage_from(view); 223 view_damage_from(view);
225} 224}
226 225
226static void handle_set_title(struct wl_listener *listener, void *data) {
227 struct sway_xdg_shell_v6_view *xdg_shell_v6_view =
228 wl_container_of(listener, xdg_shell_v6_view, set_title);
229 struct sway_view *view = &xdg_shell_v6_view->view;
230 view_update_title(view, false);
231 view_execute_criteria(view);
232}
233
234static void handle_set_app_id(struct wl_listener *listener, void *data) {
235 struct sway_xdg_shell_v6_view *xdg_shell_v6_view =
236 wl_container_of(listener, xdg_shell_v6_view, set_app_id);
237 struct sway_view *view = &xdg_shell_v6_view->view;
238 view_execute_criteria(view);
239}
240
227static void handle_new_popup(struct wl_listener *listener, void *data) { 241static void handle_new_popup(struct wl_listener *listener, void *data) {
228 struct sway_xdg_shell_v6_view *xdg_shell_v6_view = 242 struct sway_xdg_shell_v6_view *xdg_shell_v6_view =
229 wl_container_of(listener, xdg_shell_v6_view, new_popup); 243 wl_container_of(listener, xdg_shell_v6_view, new_popup);
@@ -299,6 +313,8 @@ static void handle_unmap(struct wl_listener *listener, void *data) {
299 wl_list_remove(&xdg_shell_v6_view->request_fullscreen.link); 313 wl_list_remove(&xdg_shell_v6_view->request_fullscreen.link);
300 wl_list_remove(&xdg_shell_v6_view->request_move.link); 314 wl_list_remove(&xdg_shell_v6_view->request_move.link);
301 wl_list_remove(&xdg_shell_v6_view->request_resize.link); 315 wl_list_remove(&xdg_shell_v6_view->request_resize.link);
316 wl_list_remove(&xdg_shell_v6_view->set_title.link);
317 wl_list_remove(&xdg_shell_v6_view->set_app_id.link);
302} 318}
303 319
304static void handle_map(struct wl_listener *listener, void *data) { 320static void handle_map(struct wl_listener *listener, void *data) {
@@ -344,6 +360,14 @@ static void handle_map(struct wl_listener *listener, void *data) {
344 xdg_shell_v6_view->request_resize.notify = handle_request_resize; 360 xdg_shell_v6_view->request_resize.notify = handle_request_resize;
345 wl_signal_add(&xdg_surface->toplevel->events.request_resize, 361 wl_signal_add(&xdg_surface->toplevel->events.request_resize,
346 &xdg_shell_v6_view->request_resize); 362 &xdg_shell_v6_view->request_resize);
363
364 xdg_shell_v6_view->set_title.notify = handle_set_title;
365 wl_signal_add(&xdg_surface->toplevel->events.set_title,
366 &xdg_shell_v6_view->set_title);
367
368 xdg_shell_v6_view->set_app_id.notify = handle_set_app_id;
369 wl_signal_add(&xdg_surface->toplevel->events.set_app_id,
370 &xdg_shell_v6_view->set_app_id);
347} 371}
348 372
349static void handle_destroy(struct wl_listener *listener, void *data) { 373static void handle_destroy(struct wl_listener *listener, void *data) {