mirror of
https://github.com/swaywm/sway.git
synced 2025-11-16 06:59:49 -05:00
Make gaps implementation consistent with i3-gaps
This changes our gaps implementation to behave like i3-gaps. Our previous implementation allowed you to set gaps on a per container basis. This isn't supported by i3-gaps and doesn't seem to have a practical use case. The gaps_outer and gaps_inner properties on containers are now removed as they just read the gaps_inner from the workspace. `gaps inner|outer <px>` no longer changes the gaps for all workspaces. It only sets defaults for new workspaces. `gaps inner|outer current|workspace|all set|plus|minus <px>` is now runtime only, and the workspace option is now removed. `current` now sets gaps for the current workspace as opposed to the current container. `workspace <ws> gaps inner|outer <px>` is now implemented. This sets defaults for a workspace. This also fixes a bug where changing the layout of a split container from linear to tabbed would cause gaps to not be applied to it until you switch to another workspace and back.
This commit is contained in:
parent
dc01e884f7
commit
415a48ac63
8 changed files with 215 additions and 170 deletions
|
|
@ -20,6 +20,8 @@ static struct workspace_config *workspace_config_find_or_create(char *ws_name) {
|
|||
return NULL;
|
||||
}
|
||||
wsc->workspace = strdup(ws_name);
|
||||
wsc->gaps_inner = -1;
|
||||
wsc->gaps_outer = -1;
|
||||
list_add(config->workspace_configs, wsc);
|
||||
return wsc;
|
||||
}
|
||||
|
|
@ -37,6 +39,7 @@ struct cmd_results *cmd_workspace(int argc, char **argv) {
|
|||
}
|
||||
|
||||
int output_location = -1;
|
||||
int gaps_location = -1;
|
||||
|
||||
for (int i = 0; i < argc; ++i) {
|
||||
if (strcasecmp(argv[i], "output") == 0) {
|
||||
|
|
@ -44,6 +47,12 @@ struct cmd_results *cmd_workspace(int argc, char **argv) {
|
|||
break;
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < argc; ++i) {
|
||||
if (strcasecmp(argv[i], "gaps") == 0) {
|
||||
gaps_location = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (output_location >= 0) {
|
||||
if ((error = checkarg(argc, "workspace", EXPECTED_EQUAL_TO, output_location + 2))) {
|
||||
return error;
|
||||
|
|
@ -57,6 +66,35 @@ struct cmd_results *cmd_workspace(int argc, char **argv) {
|
|||
}
|
||||
free(wsc->output);
|
||||
wsc->output = strdup(argv[output_location + 1]);
|
||||
} else if (gaps_location >= 0) {
|
||||
if ((error = checkarg(argc, "workspace", EXPECTED_EQUAL_TO, gaps_location + 3))) {
|
||||
return error;
|
||||
}
|
||||
char *ws_name = join_args(argv, argc - 3);
|
||||
struct workspace_config *wsc = workspace_config_find_or_create(ws_name);
|
||||
free(ws_name);
|
||||
if (!wsc) {
|
||||
return cmd_results_new(CMD_FAILURE, "workspace gaps",
|
||||
"Unable to allocate workspace output");
|
||||
}
|
||||
int *prop = NULL;
|
||||
if (strcasecmp(argv[gaps_location + 1], "inner") == 0) {
|
||||
prop = &wsc->gaps_inner;
|
||||
} else if (strcasecmp(argv[gaps_location + 1], "outer") == 0) {
|
||||
prop = &wsc->gaps_outer;
|
||||
} else {
|
||||
return cmd_results_new(CMD_FAILURE, "workspace gaps",
|
||||
"Expected 'workspace <ws> gaps inner|outer <px>'");
|
||||
}
|
||||
char *end;
|
||||
int val = strtol(argv[gaps_location + 2], &end, 10);
|
||||
|
||||
if (strlen(end)) {
|
||||
free(end);
|
||||
return cmd_results_new(CMD_FAILURE, "workspace gaps",
|
||||
"Expected 'workspace <ws> gaps inner|outer <px>'");
|
||||
}
|
||||
*prop = val >= 0 ? val : 0;
|
||||
} else {
|
||||
if (config->reading || !config->active) {
|
||||
return cmd_results_new(CMD_DEFER, "workspace", NULL);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue