diff options
Diffstat (limited to 'sway/input/seat.c')
-rw-r--r-- | sway/input/seat.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/sway/input/seat.c b/sway/input/seat.c index 74f1375e..7058cc92 100644 --- a/sway/input/seat.c +++ b/sway/input/seat.c | |||
@@ -594,6 +594,12 @@ static void seat_send_unfocus(struct sway_container *container, | |||
594 | } | 594 | } |
595 | } | 595 | } |
596 | 596 | ||
597 | static int handle_urgent_timeout(void *data) { | ||
598 | struct sway_view *view = data; | ||
599 | view_set_urgent(view, false); | ||
600 | return 0; | ||
601 | } | ||
602 | |||
597 | void seat_set_focus_warp(struct sway_seat *seat, | 603 | void seat_set_focus_warp(struct sway_seat *seat, |
598 | struct sway_container *container, bool warp) { | 604 | struct sway_container *container, bool warp) { |
599 | if (seat->focused_layer) { | 605 | if (seat->focused_layer) { |
@@ -670,6 +676,16 @@ void seat_set_focus_warp(struct sway_seat *seat, | |||
670 | } | 676 | } |
671 | } | 677 | } |
672 | 678 | ||
679 | // If urgent, start a timer to unset it | ||
680 | if (container && container->type == C_VIEW && | ||
681 | view_is_urgent(container->sway_view) && | ||
682 | !container->sway_view->urgent_timer) { | ||
683 | struct sway_view *view = container->sway_view; | ||
684 | view->urgent_timer = wl_event_loop_add_timer(server.wl_event_loop, | ||
685 | handle_urgent_timeout, view); | ||
686 | wl_event_source_timer_update(view->urgent_timer, 1000); | ||
687 | } | ||
688 | |||
673 | // If we've focused a floating container, bring it to the front. | 689 | // If we've focused a floating container, bring it to the front. |
674 | // We do this by putting it at the end of the floating list. | 690 | // We do this by putting it at the end of the floating list. |
675 | // This must happen for both the pending and current children lists. | 691 | // This must happen for both the pending and current children lists. |