aboutsummaryrefslogtreecommitdiffstats
path: root/sway/tree/view.c
diff options
context:
space:
mode:
authorLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2018-07-15 22:43:33 +1000
committerLibravatar Ryan Dwyer <ryandwyer1@gmail.com>2018-07-16 08:19:25 +1000
commit315d5311b2004b9e148e7b52a7de161b6dfe3878 (patch)
tree1a70d1d73cbffb26bf432c1c7b395ee996651ad3 /sway/tree/view.c
parentMerge pull request #2280 from ianyfan/leaks (diff)
downloadsway-315d5311b2004b9e148e7b52a7de161b6dfe3878.tar.gz
sway-315d5311b2004b9e148e7b52a7de161b6dfe3878.tar.zst
sway-315d5311b2004b9e148e7b52a7de161b6dfe3878.zip
Implement urgency base functionality
Introduces a command to manually set urgency, as well as rendering of urgent views, sending the IPC event, removing urgency after focused for one second, and matching urgent views via criteria.
Diffstat (limited to 'sway/tree/view.c')
-rw-r--r--sway/tree/view.c30
1 files changed, 30 insertions, 0 deletions
diff --git a/sway/tree/view.c b/sway/tree/view.c
index bf380d98..a2dbe92c 100644
--- a/sway/tree/view.c
+++ b/sway/tree/view.c
@@ -25,6 +25,7 @@ void view_init(struct sway_view *view, enum sway_view_type type,
25 view->impl = impl; 25 view->impl = impl;
26 view->executed_criteria = create_list(); 26 view->executed_criteria = create_list();
27 view->marks = create_list(); 27 view->marks = create_list();
28 view->allow_request_urgent = true;
28 wl_signal_init(&view->events.unmap); 29 wl_signal_init(&view->events.unmap);
29} 30}
30 31
@@ -589,6 +590,11 @@ void view_unmap(struct sway_view *view) {
589 wl_list_remove(&view->surface_new_subsurface.link); 590 wl_list_remove(&view->surface_new_subsurface.link);
590 wl_list_remove(&view->container_reparent.link); 591 wl_list_remove(&view->container_reparent.link);
591 592
593 if (view->urgent_timer) {
594 wl_event_source_remove(view->urgent_timer);
595 view->urgent_timer = NULL;
596 }
597
592 if (view->is_fullscreen) { 598 if (view->is_fullscreen) {
593 struct sway_container *ws = container_parent(view->swayc, C_WORKSPACE); 599 struct sway_container *ws = container_parent(view->swayc, C_WORKSPACE);
594 ws->sway_workspace->fullscreen = NULL; 600 ws->sway_workspace->fullscreen = NULL;
@@ -1047,3 +1053,27 @@ bool view_is_visible(struct sway_view *view) {
1047 } 1053 }
1048 return true; 1054 return true;
1049} 1055}
1056
1057void view_set_urgent(struct sway_view *view, bool enable) {
1058 if (enable) {
1059 struct sway_seat *seat = input_manager_current_seat(input_manager);
1060 if (seat_get_focus(seat) == view->swayc) {
1061 return;
1062 }
1063 clock_gettime(CLOCK_MONOTONIC, &view->urgent);
1064 } else {
1065 view->urgent = (struct timespec){ 0 };
1066 if (view->urgent_timer) {
1067 wl_event_source_remove(view->urgent_timer);
1068 view->urgent_timer = NULL;
1069 }
1070 }
1071 container_damage_whole(view->swayc);
1072
1073 struct sway_container *ws = container_parent(view->swayc, C_WORKSPACE);
1074 ipc_event_workspace(ws, NULL, "urgent");
1075}
1076
1077bool view_is_urgent(struct sway_view *view) {
1078 return view->urgent.tv_sec || view->urgent.tv_nsec;
1079}