From: Johan Malm Date: Sun, 3 Mar 2024 20:03:32 +0000 (+0000) Subject: osd: optionally show windows on all workspaces X-Git-Url: https://git.mdlowis.com/?a=commitdiff_plain;h=247d2b581c9dc6d579a6fbdd6f51bd226547a709;p=proto%2Flabwc.git osd: optionally show windows on all workspaces 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 `` --- diff --git a/docs/labwc-config.5.scd b/docs/labwc-config.5.scd index 57e76bdc..7be9d3e7 100644 --- a/docs/labwc-config.5.scd +++ b/docs/labwc-config.5.scd @@ -177,7 +177,7 @@ this is for compatibility with Openbox. ## WINDOW SWITCHER -** +** *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). + ** Define window switcher fields. diff --git a/docs/rc.xml.all b/docs/rc.xml.all index c3586ae0..902f88c5 100644 --- a/docs/rc.xml.all +++ b/docs/rc.xml.all @@ -54,7 +54,7 @@ Just as for window-rules, 'identifier' relates to app_id for native Wayland windows and WM_CLASS for XWayland clients. --> - + diff --git a/include/config/rcxml.h b/include/config/rcxml.h index 8e417000..a0250711 100644 --- a/include/config/rcxml.h +++ b/include/config/rcxml.h @@ -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; diff --git a/src/config/rcxml.c b/src/config/rcxml.c index 56f93e36..1b2265d2 100644 --- a/src/config/rcxml.c +++ b/src/config/rcxml.c @@ -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; diff --git a/src/desktop.c b/src/desktop.c index 87b87ab3..412de004 100644 --- a/src/desktop.c +++ b/src/desktop.c @@ -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 diff --git a/src/osd.c b/src/osd.c index 8fb63e0b..0f09d7ee 100644 --- 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;