mirror of
https://github.com/swaywm/sway.git
synced 2024-12-01 10:56:36 +00:00
Add smart_gaps inverse_outer command
Add a subcommand for `smart_gaps` that enables outer gaps only on workspaces with exactly one visible child. Also add documentation for `smart_gaps toggle`.
This commit is contained in:
parent
aaf68cf423
commit
9969de9e00
|
@ -283,6 +283,12 @@ struct side_gaps {
|
||||||
int left;
|
int left;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum smart_gaps_mode {
|
||||||
|
SMART_GAPS_OFF,
|
||||||
|
SMART_GAPS_ON,
|
||||||
|
SMART_GAPS_INVERSE_OUTER,
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stores configuration for a workspace, regardless of whether the workspace
|
* Stores configuration for a workspace, regardless of whether the workspace
|
||||||
* exists.
|
* exists.
|
||||||
|
@ -512,7 +518,7 @@ struct sway_config {
|
||||||
bool tiling_drag;
|
bool tiling_drag;
|
||||||
int tiling_drag_threshold;
|
int tiling_drag_threshold;
|
||||||
|
|
||||||
bool smart_gaps;
|
enum smart_gaps_mode smart_gaps;
|
||||||
int gaps_inner;
|
int gaps_inner;
|
||||||
struct side_gaps gaps_outer;
|
struct side_gaps gaps_outer;
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,12 @@ struct cmd_results *cmd_smart_gaps(int argc, char **argv) {
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
config->smart_gaps = parse_boolean(argv[0], config->smart_gaps);
|
if (strcmp(argv[0], "inverse_outer") == 0) {
|
||||||
|
config->smart_gaps = SMART_GAPS_INVERSE_OUTER;
|
||||||
|
} else {
|
||||||
|
config->smart_gaps = parse_boolean(argv[0], config->smart_gaps)
|
||||||
|
? SMART_GAPS_ON : SMART_GAPS_OFF;
|
||||||
|
}
|
||||||
|
|
||||||
arrange_root();
|
arrange_root();
|
||||||
|
|
||||||
|
|
|
@ -266,7 +266,7 @@ static void config_defaults(struct sway_config *config) {
|
||||||
config->tiling_drag = true;
|
config->tiling_drag = true;
|
||||||
config->tiling_drag_threshold = 9;
|
config->tiling_drag_threshold = 9;
|
||||||
|
|
||||||
config->smart_gaps = false;
|
config->smart_gaps = SMART_GAPS_OFF;
|
||||||
config->gaps_inner = 0;
|
config->gaps_inner = 0;
|
||||||
config->gaps_outer.top = 0;
|
config->gaps_outer.top = 0;
|
||||||
config->gaps_outer.right = 0;
|
config->gaps_outer.right = 0;
|
||||||
|
|
|
@ -692,9 +692,10 @@ The default colors are:
|
||||||
borders will only be enabled if the workspace has more than one visible
|
borders will only be enabled if the workspace has more than one visible
|
||||||
child and gaps equal to zero.
|
child and gaps equal to zero.
|
||||||
|
|
||||||
*smart_gaps* on|off
|
*smart_gaps* on|off|toggle|inverse_outer
|
||||||
If smart_gaps are _on_ gaps will only be enabled if a workspace has more
|
If smart_gaps are _on_ gaps will only be enabled if a workspace has more
|
||||||
than one child.
|
than one child. If smart_gaps are _inverse_outer_ outer gaps will only
|
||||||
|
be enabled if a workspace has exactly one child.
|
||||||
|
|
||||||
*mark* --add|--replace [--toggle] <identifier>
|
*mark* --add|--replace [--toggle] <identifier>
|
||||||
Marks are arbitrary labels that can be used to identify certain windows and
|
Marks are arbitrary labels that can be used to identify certain windows and
|
||||||
|
|
|
@ -844,24 +844,36 @@ struct sway_container *workspace_insert_tiling(struct sway_workspace *workspace,
|
||||||
return con;
|
return con;
|
||||||
}
|
}
|
||||||
|
|
||||||
void workspace_add_gaps(struct sway_workspace *ws) {
|
bool workspace_has_single_visible_container(struct sway_workspace *ws) {
|
||||||
if (config->smart_gaps) {
|
|
||||||
struct sway_seat *seat = input_manager_get_default_seat();
|
struct sway_seat *seat = input_manager_get_default_seat();
|
||||||
struct sway_container *focus =
|
struct sway_container *focus =
|
||||||
seat_get_focus_inactive_tiling(seat, ws);
|
seat_get_focus_inactive_tiling(seat, ws);
|
||||||
if (focus && !focus->view) {
|
if (focus && !focus->view) {
|
||||||
focus = seat_get_focus_inactive_view(seat, &focus->node);
|
focus = seat_get_focus_inactive_view(seat, &focus->node);
|
||||||
}
|
}
|
||||||
if (focus && focus->view && view_ancestor_is_only_visible(focus->view)) {
|
return (focus && focus->view && view_ancestor_is_only_visible(focus->view));
|
||||||
|
}
|
||||||
|
|
||||||
|
void workspace_add_gaps(struct sway_workspace *ws) {
|
||||||
|
if (config->smart_gaps == SMART_GAPS_ON
|
||||||
|
&& workspace_has_single_visible_container(ws)) {
|
||||||
ws->current_gaps.top = 0;
|
ws->current_gaps.top = 0;
|
||||||
ws->current_gaps.right = 0;
|
ws->current_gaps.right = 0;
|
||||||
ws->current_gaps.bottom = 0;
|
ws->current_gaps.bottom = 0;
|
||||||
ws->current_gaps.left = 0;
|
ws->current_gaps.left = 0;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (config->smart_gaps == SMART_GAPS_INVERSE_OUTER
|
||||||
|
&& !workspace_has_single_visible_container(ws)) {
|
||||||
|
ws->current_gaps.top = 0;
|
||||||
|
ws->current_gaps.right = 0;
|
||||||
|
ws->current_gaps.bottom = 0;
|
||||||
|
ws->current_gaps.left = 0;
|
||||||
|
} else {
|
||||||
|
ws->current_gaps = ws->gaps_outer;
|
||||||
}
|
}
|
||||||
|
|
||||||
ws->current_gaps = ws->gaps_outer;
|
|
||||||
// Add inner gaps and make sure we don't turn out negative
|
// Add inner gaps and make sure we don't turn out negative
|
||||||
ws->current_gaps.top = fmax(0, ws->current_gaps.top + ws->gaps_inner);
|
ws->current_gaps.top = fmax(0, ws->current_gaps.top + ws->gaps_inner);
|
||||||
ws->current_gaps.right = fmax(0, ws->current_gaps.right + ws->gaps_inner);
|
ws->current_gaps.right = fmax(0, ws->current_gaps.right + ws->gaps_inner);
|
||||||
|
|
Loading…
Reference in a new issue