decorations: add SetDecorations action

This commit is contained in:
Tobias Bengfort 2024-04-20 06:29:51 +02:00 committed by Johan Malm
parent e2590f10fd
commit 41a3b68846
6 changed files with 62 additions and 0 deletions

View file

@ -79,6 +79,7 @@ enum action_type {
ACTION_TYPE_TOGGLE_MAXIMIZE,
ACTION_TYPE_MAXIMIZE,
ACTION_TYPE_TOGGLE_FULLSCREEN,
ACTION_TYPE_SET_DECORATIONS,
ACTION_TYPE_TOGGLE_DECORATIONS,
ACTION_TYPE_TOGGLE_ALWAYS_ON_TOP,
ACTION_TYPE_TOGGLE_ALWAYS_ON_BOTTOM,
@ -135,6 +136,7 @@ const char *action_names[] = {
"ToggleMaximize",
"Maximize",
"ToggleFullscreen",
"SetDecorations",
"ToggleDecorations",
"ToggleAlwaysOnTop",
"ToggleAlwaysOnBottom",
@ -347,6 +349,17 @@ action_arg_from_xml_node(struct action *action, const char *nodename, const char
goto cleanup;
}
break;
case ACTION_TYPE_SET_DECORATIONS:
if (!strcmp(argument, "decorations")) {
enum ssd_mode mode = ssd_mode_parse(content);
action_arg_add_int(action, argument, mode);
goto cleanup;
}
if (!strcasecmp(argument, "forceSSD")) {
action_arg_add_bool(action, argument, parse_bool(content, false));
goto cleanup;
}
break;
case ACTION_TYPE_RESIZE_RELATIVE:
if (!strcmp(argument, "left") || !strcmp(argument, "right") ||
!strcmp(argument, "top") || !strcmp(argument, "bottom")) {
@ -806,6 +819,15 @@ actions_run(struct view *activator, struct server *server,
view_toggle_fullscreen(view);
}
break;
case ACTION_TYPE_SET_DECORATIONS:
if (view) {
enum ssd_mode mode = action_get_int(action,
"decorations", LAB_SSD_MODE_FULL);
bool force_ssd = action_get_bool(action,
"forceSSD", false);
view_set_decorations(view, mode, force_ssd);
}
break;
case ACTION_TYPE_TOGGLE_DECORATIONS:
if (view) {
view_toggle_decorations(view);

View file

@ -7,6 +7,7 @@
*/
#include <assert.h>
#include <strings.h>
#include "common/mem.h"
#include "common/scene-helpers.h"
#include "labwc.h"
@ -344,6 +345,21 @@ ssd_part_contains(enum ssd_part_type whole, enum ssd_part_type candidate)
return false;
}
enum ssd_mode
ssd_mode_parse(const char *mode)
{
if (!mode) {
return LAB_SSD_MODE_FULL;
}
if (!strcasecmp(mode, "none")) {
return LAB_SSD_MODE_NONE;
} else if (!strcasecmp(mode, "border")) {
return LAB_SSD_MODE_BORDER;
} else {
return LAB_SSD_MODE_FULL;
}
}
void
ssd_set_active(struct ssd *ssd, bool active)
{

View file

@ -1249,6 +1249,17 @@ view_wants_decorations(struct view *view)
}
}
void
view_set_decorations(struct view *view, enum ssd_mode mode, bool force_ssd)
{
assert(view);
if (force_ssd || !view_wants_decorations(view)
|| mode < view_get_ssd_mode(view)) {
view_set_ssd_mode(view, mode);
}
}
void
view_toggle_decorations(struct view *view)
{