mirror of
https://github.com/labwc/labwc.git
synced 2025-10-29 05:40:24 -04:00
Add omnipresent flag for views
This commit is contained in:
parent
6b8c79748a
commit
bad8f334ea
6 changed files with 32 additions and 0 deletions
|
|
@ -133,6 +133,9 @@ Actions are used in menus and keyboard/mouse bindings.
|
|||
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
|
||||
|
|
|
|||
|
|
@ -149,6 +149,7 @@ struct view {
|
|||
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;
|
||||
|
|
@ -400,8 +401,10 @@ void view_toggle_decorations(struct view *view);
|
|||
|
||||
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);
|
||||
|
|
|
|||
|
|
@ -78,6 +78,7 @@ enum action_type {
|
|||
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,
|
||||
|
|
@ -120,6 +121,7 @@ const char *action_names[] = {
|
|||
"ToggleDecorations",
|
||||
"ToggleAlwaysOnTop",
|
||||
"ToggleAlwaysOnBottom",
|
||||
"ToggleOmnipresent",
|
||||
"Focus",
|
||||
"Unfocus",
|
||||
"Iconify",
|
||||
|
|
@ -744,6 +746,11 @@ actions_run(struct view *activator, struct server *server,
|
|||
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);
|
||||
|
|
|
|||
|
|
@ -723,6 +723,8 @@ init_windowmenu(struct server *server)
|
|||
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", "");
|
||||
|
|
|
|||
|
|
@ -1045,6 +1045,13 @@ view_toggle_always_on_bottom(struct view *view)
|
|||
}
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -276,6 +276,16 @@ workspaces_switch_to(struct workspace *target, bool update_focus)
|
|||
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);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue