diff options
author | Ronan Pigott <rpigott@berkeley.edu> | 2020-07-30 16:31:52 -0700 |
---|---|---|
committer | Simon Ser <contact@emersion.fr> | 2020-08-05 11:05:49 +0200 |
commit | f478f4cc6663f9519281f08334f1f27e3182b022 (patch) | |
tree | b309a8f99c857d1beac60bd4d07a1dca1f722ae4 | |
parent | view: implement foreign toplevel fullscreen indicator (diff) | |
download | sway-f478f4cc6663f9519281f08334f1f27e3182b022.tar.gz sway-f478f4cc6663f9519281f08334f1f27e3182b022.tar.zst sway-f478f4cc6663f9519281f08334f1f27e3182b022.zip |
view: implement foreign toplevel fullscreen request
-rw-r--r-- | include/sway/tree/view.h | 1 | ||||
-rw-r--r-- | sway/tree/view.c | 30 |
2 files changed, 31 insertions, 0 deletions
diff --git a/include/sway/tree/view.h b/include/sway/tree/view.h index a32f5907..58722dbd 100644 --- a/include/sway/tree/view.h +++ b/include/sway/tree/view.h | |||
@@ -99,6 +99,7 @@ struct sway_view { | |||
99 | 99 | ||
100 | struct wlr_foreign_toplevel_handle_v1 *foreign_toplevel; | 100 | struct wlr_foreign_toplevel_handle_v1 *foreign_toplevel; |
101 | struct wl_listener foreign_activate_request; | 101 | struct wl_listener foreign_activate_request; |
102 | struct wl_listener foreign_fullscreen_request; | ||
102 | struct wl_listener foreign_close_request; | 103 | struct wl_listener foreign_close_request; |
103 | 104 | ||
104 | bool destroying; | 105 | bool destroying; |
diff --git a/sway/tree/view.c b/sway/tree/view.c index 2353feff..b1837242 100644 --- a/sway/tree/view.c +++ b/sway/tree/view.c | |||
@@ -636,6 +636,33 @@ static void handle_foreign_activate_request( | |||
636 | } | 636 | } |
637 | } | 637 | } |
638 | 638 | ||
639 | static void handle_foreign_fullscreen_request( | ||
640 | struct wl_listener *listener, void *data) { | ||
641 | struct sway_view *view = wl_container_of( | ||
642 | listener, view, foreign_fullscreen_request); | ||
643 | struct wlr_foreign_toplevel_handle_v1_fullscreen_event *event = data; | ||
644 | |||
645 | // Match fullscreen command behavior for scratchpad hidden views | ||
646 | struct sway_container *container = view->container; | ||
647 | if (!container->workspace) { | ||
648 | while (container->parent) { | ||
649 | container = container->parent; | ||
650 | } | ||
651 | } | ||
652 | |||
653 | container_set_fullscreen(container, | ||
654 | event->fullscreen ? FULLSCREEN_WORKSPACE : FULLSCREEN_NONE); | ||
655 | if (event->fullscreen) { | ||
656 | arrange_root(); | ||
657 | } else { | ||
658 | if (container->parent) { | ||
659 | arrange_container(container->parent); | ||
660 | } else if (container->workspace) { | ||
661 | arrange_workspace(container->workspace); | ||
662 | } | ||
663 | } | ||
664 | } | ||
665 | |||
639 | static void handle_foreign_close_request( | 666 | static void handle_foreign_close_request( |
640 | struct wl_listener *listener, void *data) { | 667 | struct wl_listener *listener, void *data) { |
641 | struct sway_view *view = wl_container_of( | 668 | struct sway_view *view = wl_container_of( |
@@ -676,6 +703,9 @@ void view_map(struct sway_view *view, struct wlr_surface *wlr_surface, | |||
676 | view->foreign_activate_request.notify = handle_foreign_activate_request; | 703 | view->foreign_activate_request.notify = handle_foreign_activate_request; |
677 | wl_signal_add(&view->foreign_toplevel->events.request_activate, | 704 | wl_signal_add(&view->foreign_toplevel->events.request_activate, |
678 | &view->foreign_activate_request); | 705 | &view->foreign_activate_request); |
706 | view->foreign_fullscreen_request.notify = handle_foreign_fullscreen_request; | ||
707 | wl_signal_add(&view->foreign_toplevel->events.request_fullscreen, | ||
708 | &view->foreign_fullscreen_request); | ||
679 | view->foreign_close_request.notify = handle_foreign_close_request; | 709 | view->foreign_close_request.notify = handle_foreign_close_request; |
680 | wl_signal_add(&view->foreign_toplevel->events.request_close, | 710 | wl_signal_add(&view->foreign_toplevel->events.request_close, |
681 | &view->foreign_close_request); | 711 | &view->foreign_close_request); |