when defining window-rules for desktop-management tools that do not
support the wlr-layer-shell protocol.
+*<action name="ToggleOmnipresent" />*
+ Toggle omnipresent (visible on all workspaces / sticky) for the focused window.
+
*<action name="ToggleKeybinds" />*
Stop handling keybinds other than ToggleKeybinds itself.
This can be used to allow A-Tab and similar keybinds to be delivered
bool minimized;
enum view_axis maximized;
bool fullscreen;
+ bool visible_on_all_workspaces;
enum view_edge tiled;
bool inhibits_keybinds;
xkb_layout_index_t keyboard_layout;
bool view_is_always_on_top(struct view *view);
bool view_is_always_on_bottom(struct view *view);
+bool view_is_omnipresent(struct view *view);
void view_toggle_always_on_top(struct view *view);
void view_toggle_always_on_bottom(struct view *view);
+void view_toggle_visible_on_all_workspaces(struct view *view);
bool view_is_tiled(struct view *view);
bool view_is_floating(struct view *view);
ACTION_TYPE_TOGGLE_DECORATIONS,
ACTION_TYPE_TOGGLE_ALWAYS_ON_TOP,
ACTION_TYPE_TOGGLE_ALWAYS_ON_BOTTOM,
+ ACTION_TYPE_TOGGLE_OMNIPRESENT,
ACTION_TYPE_FOCUS,
ACTION_TYPE_UNFOCUS,
ACTION_TYPE_ICONIFY,
"ToggleDecorations",
"ToggleAlwaysOnTop",
"ToggleAlwaysOnBottom",
+ "ToggleOmnipresent",
"Focus",
"Unfocus",
"Iconify",
view_toggle_always_on_bottom(view);
}
break;
+ case ACTION_TYPE_TOGGLE_OMNIPRESENT:
+ if (view) {
+ view_toggle_visible_on_all_workspaces(view);
+ }
+ break;
case ACTION_TYPE_FOCUS:
if (view) {
desktop_focus_view(view, /*raise*/ false);
fill_item("name.action", "ToggleDecorations");
current_item = item_create(menu, _("AlwaysOnTop"), false);
fill_item("name.action", "ToggleAlwaysOnTop");
+ current_item = item_create(menu, _("ToggleOmnipresent"), false);
+ fill_item("name.action", "ToggleOmnipresent");
/* Workspace sub-menu */
struct menu *workspace_menu = menu_create(server, "workspaces", "");
}
}
+void
+view_toggle_visible_on_all_workspaces(struct view *view)
+{
+ assert(view);
+ view->visible_on_all_workspaces = !view->visible_on_all_workspaces;
+}
+
void
view_move_to_workspace(struct view *view, struct workspace *workspace)
{
wlr_scene_node_set_enabled(
&server->workspace_current->tree->node, false);
+ /* Move Omnipresent views to new workspace */
+ struct view *view;
+ enum lab_view_criteria criteria =
+ LAB_VIEW_CRITERIA_CURRENT_WORKSPACE;
+ for_each_view(view, &server->views, criteria) {
+ if (view->visible_on_all_workspaces) {
+ view_move_to_workspace(view, target);
+ }
+ }
+
/* Enable the new workspace */
wlr_scene_node_set_enabled(&target->tree->node, true);