diff --git a/include/view.h b/include/view.h index f68c89d8..9584686d 100644 --- a/include/view.h +++ b/include/view.h @@ -265,6 +265,7 @@ enum lab_view_criteria { /* Positive criteria */ LAB_VIEW_CRITERIA_FULLSCREEN = 1 << 1, LAB_VIEW_CRITERIA_ALWAYS_ON_TOP = 1 << 2, + LAB_VIEW_CRITERIA_ROOT_TOPLEVEL = 1 << 3, /* Negative criteria */ LAB_VIEW_CRITERIA_NO_ALWAYS_ON_TOP = 1 << 6, diff --git a/src/desktop.c b/src/desktop.c index 488e65cd..87b87ab3 100644 --- a/src/desktop.c +++ b/src/desktop.c @@ -127,6 +127,7 @@ desktop_cycle_view(struct server *server, struct view *start_view, * 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; /* diff --git a/src/osd.c b/src/osd.c index 6f47f16c..c6affa23 100644 --- a/src/osd.c +++ b/src/osd.c @@ -410,6 +410,7 @@ display_osd(struct output *output) 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); float scale = output->wlr_output->scale; diff --git a/src/view.c b/src/view.c index 3443c5be..066b8427 100644 --- a/src/view.c +++ b/src/view.c @@ -108,6 +108,11 @@ matches_criteria(struct view *view, enum lab_view_criteria criteria) return false; } } + if (criteria & LAB_VIEW_CRITERIA_ROOT_TOPLEVEL) { + if (view != view_get_root(view)) { + return false; + } + } if (criteria & LAB_VIEW_CRITERIA_NO_ALWAYS_ON_TOP) { if (view_is_always_on_top(view)) { return false;