*<action name="ToggleMaximize">*
Toggle maximize state of focused window.
+*<action name="ToggleAlwaysOnTop">*
+ Toggle always-on-top of focused window.
+
# SEE ALSO
labwc(1), labwc-config(5), labwc-theme(5)
<item label="Decorations">
<action name="ToggleDecorations" />
</item>
+ <item label="AlwaysOnTop">
+ <action name="ToggleAlwaysOnTop" />
+ </item>
<item label="Close">
<action name="Close" />
</item>
/* Tree for all non-layer xdg/xwayland-shell surfaces */
struct wlr_scene_tree *view_tree;
+ /* Tree for all non-layer xdg/xwayland-shell surfaces with always-on-top */
+ struct wlr_scene_tree *view_tree_always_on_top;
#if HAVE_XWAYLAND
/* Tree for unmanaged xsurfaces without initialized view (usually popups) */
struct wlr_scene_tree *unmanaged_tree;
struct wlr_output *wlr_output);
void view_toggle_maximize(struct view *view);
void view_toggle_decorations(struct view *view);
+void view_toggle_always_on_top(struct view *view);
void view_set_decorations(struct view *view, bool decorations);
void view_toggle_fullscreen(struct view *view);
void view_adjust_for_layout_change(struct view *view);
ACTION_TYPE_TOGGLE_MAXIMIZE,
ACTION_TYPE_TOGGLE_FULLSCREEN,
ACTION_TYPE_TOGGLE_DECORATIONS,
+ ACTION_TYPE_TOGGLE_ALWAYS_ON_TOP,
ACTION_TYPE_FOCUS,
ACTION_TYPE_ICONIFY,
ACTION_TYPE_MOVE,
"ToggleMaximize",
"ToggleFullscreen",
"ToggleDecorations",
+ "ToggleAlwaysOnTop",
"Focus",
"Iconify",
"Move",
view_toggle_decorations(view);
}
break;
+ case ACTION_TYPE_TOGGLE_ALWAYS_ON_TOP:
+ if (view) {
+ view_toggle_always_on_top(view);
+ }
+ break;
case ACTION_TYPE_FOCUS:
view = desktop_view_at_cursor(server);
if (view) {
if (node == &server->view_tree->node) {
return "server->view_tree";
}
- if (node->parent == &server->view_tree->node) {
+ if (node == &server->view_tree_always_on_top->node) {
+ return "server->view_tree_always_on_top";
+ }
+ if (node->parent == &server->view_tree->node ||
+ node->parent == &server->view_tree_always_on_top->node) {
+ *last_view = node_view_from_node(node);
*last_view = node_view_from_node(node);
}
const char *view_part = get_view_part(*last_view, node);
fill_item("name.action", "ToggleFullscreen");
current_item = item_create(menu, "Decorations");
fill_item("name.action", "ToggleDecorations");
+ current_item = item_create(menu, "AlwaysOnTop");
+ fill_item("name.action", "ToggleAlwaysOnTop");
current_item = item_create(menu, "Close");
fill_item("name.action", "Close");
}
exit(EXIT_FAILURE);
}
server->view_tree = wlr_scene_tree_create(&server->scene->node);
+ server->view_tree_always_on_top = wlr_scene_tree_create(&server->scene->node);
#if HAVE_XWAYLAND
server->unmanaged_tree = wlr_scene_tree_create(&server->scene->node);
#endif
}
}
+static bool
+is_always_on_top(struct view *view)
+{
+ return view->scene_tree->node.parent ==
+ &view->server->view_tree_always_on_top->node;
+}
+
+void
+view_toggle_always_on_top(struct view *view)
+{
+ if (is_always_on_top(view)) {
+ wlr_scene_node_reparent(&view->scene_tree->node,
+ &view->server->view_tree->node);
+ } else {
+ wlr_scene_node_reparent(&view->scene_tree->node,
+ &view->server->view_tree_always_on_top->node);
+ }
+}
+
void
view_set_decorations(struct view *view, bool decorations)
{