From 28e52e079c63abdcc1a10a263d9b5401822c725c Mon Sep 17 00:00:00 2001 From: Consolatis <35009135+Consolatis@users.noreply.github.com> Date: Sun, 29 Jan 2023 07:23:44 +0100 Subject: [PATCH] ToggleShowDesktop: add implementation Fixes #455 --- include/labwc.h | 1 + src/desktop.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/include/labwc.h b/include/labwc.h index 6a68514e..80995d37 100644 --- a/include/labwc.h +++ b/include/labwc.h @@ -363,6 +363,7 @@ void desktop_move_to_front(struct view *view); void desktop_move_to_back(struct view *view); void desktop_focus_and_activate_view(struct seat *seat, struct view *view); void desktop_arrange_all_views(struct server *server); +void desktop_toggle(struct server *server); enum lab_cycle_dir { LAB_CYCLE_DIR_NONE, diff --git a/src/desktop.c b/src/desktop.c index ce17d8d3..dc9eb545 100644 --- a/src/desktop.c +++ b/src/desktop.c @@ -20,6 +20,8 @@ move_to_front(struct view *view) wlr_scene_node_raise_to_top(&view->scene_tree->node); } +static void desktop_hide_windows(struct server *server, bool hide); + void desktop_move_to_front(struct view *view) { @@ -30,6 +32,7 @@ desktop_move_to_front(struct view *view) #if HAVE_XWAYLAND xwayland_move_sub_views_to_front(view, move_to_front); #endif + desktop_hide_windows(view->server, false); cursor_update_focus(view->server); } @@ -99,6 +102,34 @@ desktop_focus_and_activate_view(struct seat *seat, struct view *view) seat_focus_surface(seat, view->surface); } +static void +desktop_hide_windows(struct server *server, bool hide) +{ + struct wlr_scene_node *view_tree, *view_tree_on_top; + view_tree = &server->view_tree->node; + view_tree_on_top = &server->view_tree_always_on_top->node; + + if (hide == !view_tree->enabled) { + return; + } + + if (hide) { + wlr_scene_node_set_enabled(view_tree, false); + wlr_scene_node_set_enabled(view_tree_on_top, false); + seat_focus_surface(&server->seat, NULL); + } else { + wlr_scene_node_set_enabled(view_tree, true); + wlr_scene_node_set_enabled(view_tree_on_top, true); + desktop_focus_topmost_mapped_view(server); + } +} + +void +desktop_toggle(struct server *server) +{ + desktop_hide_windows(server, server->view_tree->node.enabled); +} + /* * Some xwayland apps produce unmapped surfaces on startup and also leave * some unmapped surfaces kicking around on 'close' (for example leafpad's