]> git.mdlowis.com Git - proto/labwc.git/commitdiff
osd: destroy old osd_tree children
authorJohan Malm <jgm323@gmail.com>
Sat, 12 Feb 2022 22:04:27 +0000 (22:04 +0000)
committerJohan Malm <jgm323@gmail.com>
Wed, 23 Feb 2022 21:47:01 +0000 (21:47 +0000)
src/keyboard.c
src/osd.c

index 00e0ce4795168f4c50d73c3e67a153ccb9d9f08f..1eef22a444a9a03123db56549579015bfd7b60e1 100644 (file)
@@ -50,8 +50,7 @@ keyboard_modifiers_notify(struct wl_listener *listener, void *data)
                                server->cycle_view);
                        desktop_move_to_front(server->cycle_view);
                        server->cycle_view = NULL;
-                       wlr_scene_node_set_enabled(
-                               &server->osd_tree->node, false);
+                       osd_finish(server);
                }
        }
 
index f8b1ef0e6fe49524fcab49f912bfee9b0223ac5d..f790cd16388edad7d3fd97f7902284d9543f0f42 100644 (file)
--- a/src/osd.c
+++ b/src/osd.c
@@ -74,11 +74,29 @@ get_osd_height(struct wl_list *views)
        return height;
 }
 
+static void
+destroy_osd_nodes(struct server *server)
+{
+       struct wlr_scene_node *child, *next;
+       struct wl_list *children = &server->osd_tree->node.state.children;
+       wl_list_for_each_safe(child, next, children, state.link) {
+               wlr_scene_node_destroy(child);
+       }
+}
+
+void
+osd_finish(struct server *server)
+{
+       destroy_osd_nodes(server);
+       wlr_scene_node_set_enabled(&server->osd_tree->node, false);
+}
+
 void
 osd_update(struct server *server)
 {
        struct theme *theme = server->theme;
 
+       destroy_osd_nodes(server);
        struct output *output;
        wl_list_for_each(output, &server->outputs, link) {
                float scale = output->wlr_output->scale;
@@ -176,7 +194,6 @@ osd_update(struct server *server)
                        pango_cairo_show_layout(cairo, layout);
                        y += OSD_ITEM_HEIGHT;
                }
-
                g_object_unref(layout);
 
                cairo_surface_flush(surf);