]> git.mdlowis.com Git - proto/labwc.git/commitdiff
osd: do not use server->workspace_current->tree
authorJohan Malm <jgm323@gmail.com>
Sun, 3 Mar 2024 19:51:15 +0000 (19:51 +0000)
committerConsolatis <35009135+Consolatis@users.noreply.github.com>
Tue, 5 Mar 2024 21:16:55 +0000 (22:16 +0100)
...as it is no longer needed following the use of shared infrastructure
between osd.c and desktop.c introduced in the last few commits.

src/osd.c

index c6affa2379a7239f258deece1cccc4b718fb95d0..8fb63e0bad0f02f4d8181fa838e0726d35af962e 100644 (file)
--- a/src/osd.c
+++ b/src/osd.c
@@ -255,8 +255,8 @@ get_title_if_different(struct view *view)
 
 static void
 render_osd(struct server *server, cairo_t *cairo, int w, int h,
-               struct wl_list *node_list, bool show_workspace,
-               const char *workspace_name, struct wl_array *views)
+               bool show_workspace, const char *workspace_name,
+               struct wl_array *views)
 {
        struct view *cycle_view = server->osd_state.cycle_view;
        struct theme *theme = server->theme;
@@ -401,8 +401,6 @@ display_osd(struct output *output)
 {
        struct server *server = output->server;
        struct theme *theme = server->theme;
-       struct wl_list *node_list =
-               &server->workspace_current->tree->children;
        bool show_workspace = wl_list_length(&rc.workspace_config.workspaces) > 1;
        const char *workspace_name = server->workspace_current->name;
 
@@ -435,8 +433,7 @@ display_osd(struct output *output)
 
        /* Render OSD image */
        cairo_t *cairo = output->osd_buffer->cairo;
-       render_osd(server, cairo, w, h, node_list, show_workspace,
-               workspace_name, &views);
+       render_osd(server, cairo, w, h, show_workspace, workspace_name, &views);
        wl_array_release(&views);
 
        struct wlr_scene_buffer *scene_buffer = wlr_scene_buffer_create(
@@ -458,13 +455,24 @@ display_osd(struct output *output)
        cursor_update_focus(server);
 }
 
+static int
+nr_entries(struct server *server)
+{
+       struct wl_array views;
+       wl_array_init(&views);
+       view_array_append(server, &views,
+               LAB_VIEW_CRITERIA_CURRENT_WORKSPACE
+               | LAB_VIEW_CRITERIA_ROOT_TOPLEVEL
+               | LAB_VIEW_CRITERIA_NO_SKIP_WINDOW_SWITCHER);
+       int count = wl_array_len(&views);
+       wl_array_release(&views);
+       return count;
+}
+
 void
 osd_update(struct server *server)
 {
-       struct wl_list *node_list =
-               &server->workspace_current->tree->children;
-
-       if (wl_list_empty(node_list) || !server->osd_state.cycle_view) {
+       if (!nr_entries(server) || !server->osd_state.cycle_view) {
                osd_finish(server);
                return;
        }