mirror of
https://github.com/labwc/labwc.git
synced 2026-04-12 08:21:13 -04:00
decorations: allow to set specific mode via Decorate action
This commit is contained in:
parent
c9fc9e566a
commit
85e1b454ff
4 changed files with 63 additions and 6 deletions
|
|
@ -128,12 +128,19 @@ Actions are used in menus and keyboard/mouse bindings.
|
|||
By disabling the theme configuration 'keepBorder' the first step
|
||||
will be removed and the action only toggles between on and off.
|
||||
|
||||
*<action name="Decorate" />*
|
||||
*<action name="Decorate" mode="value" />*
|
||||
Enable decorations of focused window.
|
||||
|
||||
*mode* [yes|no|full|border|none] "full", "border" and "none" are the
|
||||
three modes described in 'ToggleDecorations'. "yes" and "no"
|
||||
automatically select an appropriate mode based on 'keepBorder' and
|
||||
whether the window has client side decorations. Default is yes.
|
||||
|
||||
*<action name="Undecorate" />*
|
||||
Disable decorations of focused window.
|
||||
|
||||
Alias for '<action name="Decorate" mode="no" />'
|
||||
|
||||
*<action name="ToggleFullscreen" />*
|
||||
Toggle fullscreen state of focused window.
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,9 @@ enum ssd_preference {
|
|||
enum ssd_mode {
|
||||
LAB_SSD_MODE_NONE,
|
||||
LAB_SSD_MODE_BORDER,
|
||||
LAB_SSD_MODE_FULL
|
||||
LAB_SSD_MODE_FULL,
|
||||
LAB_SSD_MODE_YES,
|
||||
LAB_SSD_MODE_NO
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
@ -503,6 +505,7 @@ struct output *view_get_adjacent_output(struct view *view, enum view_edge edge,
|
|||
bool wrap);
|
||||
enum view_axis view_axis_parse(const char *direction);
|
||||
enum view_edge view_edge_parse(const char *direction);
|
||||
enum ssd_mode ssd_mode_parse(const char *mode);
|
||||
|
||||
/* xdg.c */
|
||||
struct wlr_xdg_surface *xdg_surface_from_view(struct view *view);
|
||||
|
|
|
|||
13
src/action.c
13
src/action.c
|
|
@ -344,6 +344,13 @@ action_arg_from_xml_node(struct action *action, const char *nodename, const char
|
|||
goto cleanup;
|
||||
}
|
||||
break;
|
||||
case ACTION_TYPE_DECORATE:
|
||||
if (!strcmp(argument, "mode")) {
|
||||
enum ssd_mode mode = ssd_mode_parse(content);
|
||||
action_arg_add_int(action, argument, mode);
|
||||
goto cleanup;
|
||||
}
|
||||
break;
|
||||
case ACTION_TYPE_RESIZE_RELATIVE:
|
||||
if (!strcmp(argument, "left") || !strcmp(argument, "right") ||
|
||||
!strcmp(argument, "top") || !strcmp(argument, "bottom")) {
|
||||
|
|
@ -796,12 +803,14 @@ actions_run(struct view *activator, struct server *server,
|
|||
break;
|
||||
case ACTION_TYPE_DECORATE:
|
||||
if (view) {
|
||||
view_set_decorations(view, LAB_SSD_MODE_FULL);
|
||||
enum ssd_mode mode = action_get_int(action,
|
||||
"mode", LAB_SSD_MODE_YES);
|
||||
view_set_decorations(view, mode);
|
||||
}
|
||||
break;
|
||||
case ACTION_TYPE_UNDECORATE:
|
||||
if (view) {
|
||||
view_set_decorations(view, LAB_SSD_MODE_NONE);
|
||||
view_set_decorations(view, LAB_SSD_MODE_NO);
|
||||
}
|
||||
break;
|
||||
case ACTION_TYPE_TOGGLE_ALWAYS_ON_TOP:
|
||||
|
|
|
|||
42
src/view.c
42
src/view.c
|
|
@ -1287,6 +1287,24 @@ undecorate(struct view *view)
|
|||
view->ssd = NULL;
|
||||
}
|
||||
|
||||
static enum ssd_mode
|
||||
resolve_ssd_mode(struct view *view, enum ssd_mode mode)
|
||||
{
|
||||
assert(view);
|
||||
|
||||
if (mode == LAB_SSD_MODE_YES) {
|
||||
return LAB_SSD_MODE_FULL;
|
||||
} else if (mode == LAB_SSD_MODE_NO) {
|
||||
if (rc.ssd_keep_border && has_ssd(view)) {
|
||||
return LAB_SSD_MODE_BORDER;
|
||||
} else {
|
||||
return LAB_SSD_MODE_NONE;
|
||||
}
|
||||
} else {
|
||||
return mode;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
view_set_decorations(struct view *view, enum ssd_mode mode)
|
||||
{
|
||||
|
|
@ -1296,8 +1314,9 @@ view_set_decorations(struct view *view, enum ssd_mode mode)
|
|||
return;
|
||||
}
|
||||
|
||||
bool ssd_enabled = mode != LAB_SSD_MODE_NONE;
|
||||
bool titlebar_hidden = mode != LAB_SSD_MODE_FULL;
|
||||
enum ssd_mode resolved = resolve_ssd_mode(view, mode);
|
||||
bool ssd_enabled = resolved != LAB_SSD_MODE_NONE;
|
||||
bool titlebar_hidden = resolved != LAB_SSD_MODE_FULL;
|
||||
|
||||
if (view->ssd_enabled == ssd_enabled
|
||||
&& view->ssd_titlebar_hidden == titlebar_hidden) {
|
||||
|
|
@ -1844,6 +1863,25 @@ view_edge_parse(const char *direction)
|
|||
}
|
||||
}
|
||||
|
||||
enum ssd_mode
|
||||
ssd_mode_parse(const char *mode)
|
||||
{
|
||||
if (!mode) {
|
||||
return LAB_SSD_MODE_NO;
|
||||
}
|
||||
if (!strcasecmp(mode, "full")) {
|
||||
return LAB_SSD_MODE_FULL;
|
||||
} else if (!strcasecmp(mode, "border")) {
|
||||
return LAB_SSD_MODE_BORDER;
|
||||
} else if (!strcasecmp(mode, "none")) {
|
||||
return LAB_SSD_MODE_NONE;
|
||||
} else if (!strcasecmp(mode, "yes")) {
|
||||
return LAB_SSD_MODE_YES;
|
||||
} else {
|
||||
return LAB_SSD_MODE_NO;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
view_snap_to_edge(struct view *view, enum view_edge edge,
|
||||
bool across_outputs, bool store_natural_geometry)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue