From 92976f30d0061e0c3da3bde7202385bd3d9068cd Mon Sep 17 00:00:00 2001 From: Consolatis <35009135+Consolatis@users.noreply.github.com> Date: Mon, 26 Sep 2022 10:58:13 +0200 Subject: [PATCH] src/osd.c: Ensure destroying views are not used as preview anchors --- src/desktop.c | 7 ++++--- src/osd.c | 12 +++++++----- 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/src/desktop.c b/src/desktop.c index f5384f8d..5e7e0196 100644 --- a/src/desktop.c +++ b/src/desktop.c @@ -216,6 +216,10 @@ desktop_cycle_view(struct server *server, struct view *start_view, * - Pre-select the top view if NOT already focused * - Otherwise select the view second from the top */ + + /* Make sure to have all nodes in their actual ordering */ + osd_preview_restore(server); + if (!start_view) { start_view = first_view(server); if (!start_view || start_view != desktop_focused_view(server)) { @@ -233,9 +237,6 @@ desktop_cycle_view(struct server *server, struct view *start_view, /* Scene nodes are ordered like last node == displayed topmost */ iter = dir == LAB_CYCLE_DIR_FORWARD ? get_prev_item : get_next_item; - /* Make sure to have all nodes in their actual ordering */ - osd_preview_restore(server); - do { list_item = iter(list_item); if (list_item == list_head) { diff --git a/src/osd.c b/src/osd.c index f24bbcfd..a91ec000 100644 --- a/src/osd.c +++ b/src/osd.c @@ -124,6 +124,8 @@ osd_on_view_destroy(struct view *view) * If we are the current OSD selected view, cycle * to the next because we are dying. */ + + /* Also resets preview node */ osd_state->cycle_view = desktop_cycle_view(view->server, osd_state->cycle_view, LAB_CYCLE_DIR_BACKWARD); @@ -137,6 +139,11 @@ osd_on_view_destroy(struct view *view) } } + if (osd_state->cycle_view) { + /* Update the OSD to reflect the view has now gone. */ + osd_update(view->server); + } + if (view->scene_tree) { struct wlr_scene_node *node = &view->scene_tree->node; if (osd_state->preview_anchor == node) { @@ -147,11 +154,6 @@ osd_on_view_destroy(struct view *view) osd_state->preview_anchor = lab_wlr_scene_get_prev_node(node); } } - - if (osd_state->cycle_view) { - /* Update the OSD to reflect the view has now gone. */ - osd_update(view->server); - } } void