mirror of
https://github.com/labwc/labwc.git
synced 2025-10-29 05:40:24 -04:00
Add ToggleAlwaysOnTop action
This commit is contained in:
parent
cfca377ca2
commit
6b4d9b9383
8 changed files with 44 additions and 1 deletions
|
|
@ -61,6 +61,9 @@ Actions are used in keyboard bindings.
|
||||||
*<action name="ToggleMaximize">*
|
*<action name="ToggleMaximize">*
|
||||||
Toggle maximize state of focused window.
|
Toggle maximize state of focused window.
|
||||||
|
|
||||||
|
*<action name="ToggleAlwaysOnTop">*
|
||||||
|
Toggle always-on-top of focused window.
|
||||||
|
|
||||||
# SEE ALSO
|
# SEE ALSO
|
||||||
|
|
||||||
labwc(1), labwc-config(5), labwc-theme(5)
|
labwc(1), labwc-config(5), labwc-theme(5)
|
||||||
|
|
|
||||||
|
|
@ -14,6 +14,9 @@
|
||||||
<item label="Decorations">
|
<item label="Decorations">
|
||||||
<action name="ToggleDecorations" />
|
<action name="ToggleDecorations" />
|
||||||
</item>
|
</item>
|
||||||
|
<item label="AlwaysOnTop">
|
||||||
|
<action name="ToggleAlwaysOnTop" />
|
||||||
|
</item>
|
||||||
<item label="Close">
|
<item label="Close">
|
||||||
<action name="Close" />
|
<action name="Close" />
|
||||||
</item>
|
</item>
|
||||||
|
|
|
||||||
|
|
@ -175,6 +175,8 @@ struct server {
|
||||||
|
|
||||||
/* Tree for all non-layer xdg/xwayland-shell surfaces */
|
/* Tree for all non-layer xdg/xwayland-shell surfaces */
|
||||||
struct wlr_scene_tree *view_tree;
|
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
|
#if HAVE_XWAYLAND
|
||||||
/* Tree for unmanaged xsurfaces without initialized view (usually popups) */
|
/* Tree for unmanaged xsurfaces without initialized view (usually popups) */
|
||||||
struct wlr_scene_tree *unmanaged_tree;
|
struct wlr_scene_tree *unmanaged_tree;
|
||||||
|
|
@ -399,6 +401,7 @@ void view_set_fullscreen(struct view *view, bool fullscreen,
|
||||||
struct wlr_output *wlr_output);
|
struct wlr_output *wlr_output);
|
||||||
void view_toggle_maximize(struct view *view);
|
void view_toggle_maximize(struct view *view);
|
||||||
void view_toggle_decorations(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_set_decorations(struct view *view, bool decorations);
|
||||||
void view_toggle_fullscreen(struct view *view);
|
void view_toggle_fullscreen(struct view *view);
|
||||||
void view_adjust_for_layout_change(struct view *view);
|
void view_adjust_for_layout_change(struct view *view);
|
||||||
|
|
|
||||||
|
|
@ -24,6 +24,7 @@ enum action_type {
|
||||||
ACTION_TYPE_TOGGLE_MAXIMIZE,
|
ACTION_TYPE_TOGGLE_MAXIMIZE,
|
||||||
ACTION_TYPE_TOGGLE_FULLSCREEN,
|
ACTION_TYPE_TOGGLE_FULLSCREEN,
|
||||||
ACTION_TYPE_TOGGLE_DECORATIONS,
|
ACTION_TYPE_TOGGLE_DECORATIONS,
|
||||||
|
ACTION_TYPE_TOGGLE_ALWAYS_ON_TOP,
|
||||||
ACTION_TYPE_FOCUS,
|
ACTION_TYPE_FOCUS,
|
||||||
ACTION_TYPE_ICONIFY,
|
ACTION_TYPE_ICONIFY,
|
||||||
ACTION_TYPE_MOVE,
|
ACTION_TYPE_MOVE,
|
||||||
|
|
@ -46,6 +47,7 @@ const char *action_names[] = {
|
||||||
"ToggleMaximize",
|
"ToggleMaximize",
|
||||||
"ToggleFullscreen",
|
"ToggleFullscreen",
|
||||||
"ToggleDecorations",
|
"ToggleDecorations",
|
||||||
|
"ToggleAlwaysOnTop",
|
||||||
"Focus",
|
"Focus",
|
||||||
"Iconify",
|
"Iconify",
|
||||||
"Move",
|
"Move",
|
||||||
|
|
@ -209,6 +211,11 @@ actions_run(struct view *activator, struct server *server,
|
||||||
view_toggle_decorations(view);
|
view_toggle_decorations(view);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case ACTION_TYPE_TOGGLE_ALWAYS_ON_TOP:
|
||||||
|
if (view) {
|
||||||
|
view_toggle_always_on_top(view);
|
||||||
|
}
|
||||||
|
break;
|
||||||
case ACTION_TYPE_FOCUS:
|
case ACTION_TYPE_FOCUS:
|
||||||
view = desktop_view_at_cursor(server);
|
view = desktop_view_at_cursor(server);
|
||||||
if (view) {
|
if (view) {
|
||||||
|
|
|
||||||
|
|
@ -111,7 +111,12 @@ get_special(struct server *server, struct wlr_scene_node *node,
|
||||||
if (node == &server->view_tree->node) {
|
if (node == &server->view_tree->node) {
|
||||||
return "server->view_tree";
|
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);
|
*last_view = node_view_from_node(node);
|
||||||
}
|
}
|
||||||
const char *view_part = get_view_part(*last_view, node);
|
const char *view_part = get_view_part(*last_view, node);
|
||||||
|
|
|
||||||
|
|
@ -452,6 +452,8 @@ menu_init_windowmenu(struct server *server)
|
||||||
fill_item("name.action", "ToggleFullscreen");
|
fill_item("name.action", "ToggleFullscreen");
|
||||||
current_item = item_create(menu, "Decorations");
|
current_item = item_create(menu, "Decorations");
|
||||||
fill_item("name.action", "ToggleDecorations");
|
fill_item("name.action", "ToggleDecorations");
|
||||||
|
current_item = item_create(menu, "AlwaysOnTop");
|
||||||
|
fill_item("name.action", "ToggleAlwaysOnTop");
|
||||||
current_item = item_create(menu, "Close");
|
current_item = item_create(menu, "Close");
|
||||||
fill_item("name.action", "Close");
|
fill_item("name.action", "Close");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -235,6 +235,7 @@ server_init(struct server *server)
|
||||||
exit(EXIT_FAILURE);
|
exit(EXIT_FAILURE);
|
||||||
}
|
}
|
||||||
server->view_tree = wlr_scene_tree_create(&server->scene->node);
|
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
|
#if HAVE_XWAYLAND
|
||||||
server->unmanaged_tree = wlr_scene_tree_create(&server->scene->node);
|
server->unmanaged_tree = wlr_scene_tree_create(&server->scene->node);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
19
src/view.c
19
src/view.c
|
|
@ -281,6 +281,25 @@ view_toggle_decorations(struct view *view)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
void
|
||||||
view_set_decorations(struct view *view, bool decorations)
|
view_set_decorations(struct view *view, bool decorations)
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue