]> git.mdlowis.com Git - proto/labwc.git/commitdiff
osd: optionally show windows on all workspaces
authorJohan Malm <jgm323@gmail.com>
Sun, 3 Mar 2024 20:03:32 +0000 (20:03 +0000)
committerConsolatis <35009135+Consolatis@users.noreply.github.com>
Tue, 5 Mar 2024 21:16:55 +0000 (22:16 +0100)
Also share common config option (rc.window_switcher.criteria) in osd.c and
desktop.c to make sure the window lists are always consistent.

Configure with `<windowSwitcher allWorkspaces="yes|no">`

docs/labwc-config.5.scd
docs/rc.xml.all
include/config/rcxml.h
src/config/rcxml.c
src/desktop.c
src/osd.c

index 57e76bdc81b3da2dbe577ceb0049d458fd0e7227..7be9d3e7c8e2f7fa6254f1ac79d3c44c2aec9f0d 100644 (file)
@@ -177,7 +177,7 @@ this is for compatibility with Openbox.
 
 ## WINDOW SWITCHER
 
-*<windowSwitcher show="" preview="" outlines="">*
+*<windowSwitcher show="" preview="" outlines="" allWorkspaces="">*
        *show* [yes|no] Draw the OnScreenDisplay when switching between
        windows. Default is yes.
 
@@ -187,6 +187,10 @@ this is for compatibility with Openbox.
        *outlines* [yes|no] Draw an outline around the selected window when
        switching between windows. Default is yes.
 
+       *allWorkspaces* [yes|no] Show windows regardless of what workspace
+       they are on. Default no (that is only windows on the current workspace
+       are shown).
+
 *<windowSwitcher><fields><field content="" width="%">*
        Define window switcher fields.
 
index c3586ae0503a19c78efb3b67b82fc1ed4853613c..902f88c56772e644d3431301ba019902a7858cf7 100644 (file)
@@ -54,7 +54,7 @@
     Just as for window-rules, 'identifier' relates to app_id for native Wayland
     windows and WM_CLASS for XWayland clients.
   -->
-  <windowSwitcher show="yes" preview="yes" outlines="yes">
+  <windowSwitcher show="yes" preview="yes" outlines="yes" allWorkspaces="no">
     <fields>
       <field content="type" width="25%" />
       <field content="trimmed_identifier" width="25%" />
index 8e41700082314f45dff92d840ec2de5eefcd9cd8..a0250711acb26f890a257924c2905003a2dc2fa4 100644 (file)
@@ -135,10 +135,12 @@ struct rcxml {
        /* Regions */
        struct wl_list regions;  /* struct region.link */
 
+       /* Window Switcher */
        struct {
                bool show;
                bool preview;
                bool outlines;
+               uint32_t criteria;
                struct wl_list fields;  /* struct window_switcher_field.link */
        } window_switcher;
 
index 56f93e36c7cb2a5456fcd343c2f24dd59c6ee8e1..1b2265d2e9189d567bc692c8f772e61247cfe250 100644 (file)
@@ -894,6 +894,11 @@ entry(xmlNode *node, char *nodename, char *content)
                set_bool(content, &rc.window_switcher.preview);
        } else if (!strcasecmp(nodename, "outlines.windowSwitcher")) {
                set_bool(content, &rc.window_switcher.outlines);
+       } else if (!strcasecmp(nodename, "allWorkspaces.windowSwitcher")) {
+               if (parse_bool(content, -1) == true) {
+                       rc.window_switcher.criteria &=
+                               ~LAB_VIEW_CRITERIA_CURRENT_WORKSPACE;
+               }
 
        /* Remove this long term - just a friendly warning for now */
        } else if (strstr(nodename, "windowswitcher.core")) {
@@ -1148,6 +1153,9 @@ rcxml_init(void)
        rc.window_switcher.show = true;
        rc.window_switcher.preview = true;
        rc.window_switcher.outlines = true;
+       rc.window_switcher.criteria = LAB_VIEW_CRITERIA_CURRENT_WORKSPACE
+               | LAB_VIEW_CRITERIA_ROOT_TOPLEVEL
+               | LAB_VIEW_CRITERIA_NO_SKIP_WINDOW_SWITCHER;
 
        rc.resize_indicator = LAB_RESIZE_INDICATOR_NEVER;
 
index 87b87ab30473209272b3fd085a0822a695137934..412de004f4a1df5544b523db7d63951c8950ee94 100644 (file)
@@ -118,17 +118,7 @@ desktop_cycle_view(struct server *server, struct view *start_view,
        bool forwards = dir == LAB_CYCLE_DIR_FORWARD;
        iter = forwards ? view_next_no_head_stop : view_prev_no_head_stop;
 
-       /*
-        * TODO: These criteria are the same as in display_osd() in osd.c
-        * for the time being.
-        *
-        * A future improvement could be to make this configurable for example
-        * in rc.xml and then use rc.cycle_view_criteria (or whatever) both
-        * here and in the osd.c window-switcher code
-        */
-       enum lab_view_criteria criteria = LAB_VIEW_CRITERIA_CURRENT_WORKSPACE
-               | LAB_VIEW_CRITERIA_ROOT_TOPLEVEL
-               | LAB_VIEW_CRITERIA_NO_SKIP_WINDOW_SWITCHER;
+       enum lab_view_criteria criteria = rc.window_switcher.criteria;
 
        /*
         * Views are listed in stacking order, topmost first.  Usually the
index 8fb63e0bad0f02f4d8181fa838e0726d35af962e..0f09d7eed1e4760408d2f12d3d3fa41751e05971 100644 (file)
--- a/src/osd.c
+++ b/src/osd.c
@@ -406,10 +406,7 @@ display_osd(struct output *output)
 
        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);
+       view_array_append(server, &views, rc.window_switcher.criteria);
 
        float scale = output->wlr_output->scale;
        int w = theme->osd_window_switcher_width;
@@ -460,10 +457,7 @@ 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);
+       view_array_append(server, &views, rc.window_switcher.criteria);
        int count = wl_array_len(&views);
        wl_array_release(&views);
        return count;