diff --git a/include/view.h b/include/view.h index 663c53e1..f747252c 100644 --- a/include/view.h +++ b/include/view.h @@ -222,12 +222,24 @@ struct xdg_toplevel_view { struct wl_listener new_popup; }; +/* All criteria is applied in AND logic */ enum lab_view_criteria { + /* No filter -> all focusable views */ LAB_VIEW_CRITERIA_NONE = 0, - LAB_VIEW_CRITERIA_CURRENT_WORKSPACE = 1 << 0, - LAB_VIEW_CRITERIA_FULLSCREEN = 1 << 1, - LAB_VIEW_CRITERIA_NO_ALWAYS_ON_TOP = 1 << 2, - LAB_VIEW_CRITERIA_NO_SKIP_WINDOW_SWITCHER = 1 << 3, + + /* + * Includes always-on-top views, e.g. + * what is visible on the current workspace + */ + LAB_VIEW_CRITERIA_CURRENT_WORKSPACE = 1 << 0, + + /* Positive criteria */ + LAB_VIEW_CRITERIA_FULLSCREEN = 1 << 1, + LAB_VIEW_CRITERIA_ALWAYS_ON_TOP = 1 << 2, + + /* Negative criteria */ + LAB_VIEW_CRITERIA_NO_ALWAYS_ON_TOP = 1 << 6, + LAB_VIEW_CRITERIA_NO_SKIP_WINDOW_SWITCHER = 1 << 7, }; /** diff --git a/src/view.c b/src/view.c index ee5b92c4..20cbdc74 100644 --- a/src/view.c +++ b/src/view.c @@ -105,6 +105,11 @@ matches_criteria(struct view *view, enum lab_view_criteria criteria) return false; } } + if (criteria & LAB_VIEW_CRITERIA_ALWAYS_ON_TOP) { + if (!view_is_always_on_top(view)) { + return false; + } + } if (criteria & LAB_VIEW_CRITERIA_NO_ALWAYS_ON_TOP) { if (view_is_always_on_top(view)) { return false;