aboutsummaryrefslogtreecommitdiff
path: root/sway/tree
diff options
context:
space:
mode:
authoremersion <contact@emersion.fr>2018-10-21 08:59:59 +0200
committerGitHub <noreply@github.com>2018-10-21 08:59:59 +0200
commita4d6835881a1ce276ae68f33e5dc94776ee28424 (patch)
tree2255d845647357cdbe6fdfcb1c6a40210a69ddb7 /sway/tree
parent3f02218b54645a68a7496eb15b7bb16d26b75ae2 (diff)
parentc5a6c37275978ddc8c221ca73ae1a39254dd68f5 (diff)
Merge pull request #2903 from RyanDwyer/seat-specific-backandforth
Make workspace back_and_forth seat-specific
Diffstat (limited to 'sway/tree')
-rw-r--r--sway/tree/view.c4
-rw-r--r--sway/tree/workspace.c35
2 files changed, 18 insertions, 21 deletions
diff --git a/sway/tree/view.c b/sway/tree/view.c
index 85afbb87..b23afb97 100644
--- a/sway/tree/view.c
+++ b/sway/tree/view.c
@@ -465,8 +465,8 @@ static struct sway_workspace *select_workspace(struct sway_view *view) {
if (!ws) {
if (strcasecmp(criteria->target, "back_and_forth") == 0) {
- if (prev_workspace_name) {
- ws = workspace_create(NULL, prev_workspace_name);
+ if (seat->prev_workspace_name) {
+ ws = workspace_create(NULL, seat->prev_workspace_name);
}
} else {
ws = workspace_create(NULL, criteria->target);
diff --git a/sway/tree/workspace.c b/sway/tree/workspace.c
index fff16515..65284679 100644
--- a/sway/tree/workspace.c
+++ b/sway/tree/workspace.c
@@ -140,13 +140,6 @@ void workspace_consider_destroy(struct sway_workspace *ws) {
workspace_begin_destroy(ws);
}
-char *prev_workspace_name = NULL;
-
-void next_name_map(struct sway_container *ws, void *data) {
- int *count = data;
- ++count;
-}
-
static bool workspace_valid_on_output(const char *output_name,
const char *ws_name) {
struct workspace_config *wsc = workspace_find_config(ws_name);
@@ -309,9 +302,12 @@ struct sway_workspace *workspace_by_name(const char *name) {
} else if (strcmp(name, "current") == 0) {
return current;
} else if (strcasecmp(name, "back_and_forth") == 0) {
- return prev_workspace_name ?
- root_find_workspace(_workspace_by_name, (void*)prev_workspace_name)
- : NULL;
+ struct sway_seat *seat = input_manager_current_seat();
+ if (!seat->prev_workspace_name) {
+ return NULL;
+ }
+ return root_find_workspace(_workspace_by_name,
+ (void*)seat->prev_workspace_name);
} else {
return root_find_workspace(_workspace_by_name, (void*)name);
}
@@ -380,23 +376,24 @@ bool workspace_switch(struct sway_workspace *workspace,
struct sway_workspace *active_ws = seat_get_focused_workspace(seat);
if (!no_auto_back_and_forth && config->auto_back_and_forth
- && active_ws == workspace
- && prev_workspace_name) {
- struct sway_workspace *new_ws = workspace_by_name(prev_workspace_name);
+ && active_ws == workspace && seat->prev_workspace_name) {
+ struct sway_workspace *new_ws =
+ workspace_by_name(seat->prev_workspace_name);
workspace = new_ws ?
new_ws :
- workspace_create(NULL, prev_workspace_name);
+ workspace_create(NULL, seat->prev_workspace_name);
}
- if (!prev_workspace_name || (strcmp(prev_workspace_name, active_ws->name)
+ if (!seat->prev_workspace_name ||
+ (strcmp(seat->prev_workspace_name, active_ws->name)
&& active_ws != workspace)) {
- free(prev_workspace_name);
- prev_workspace_name = malloc(strlen(active_ws->name) + 1);
- if (!prev_workspace_name) {
+ free(seat->prev_workspace_name);
+ seat->prev_workspace_name = malloc(strlen(active_ws->name) + 1);
+ if (!seat->prev_workspace_name) {
wlr_log(WLR_ERROR, "Unable to allocate previous workspace name");
return false;
}
- strcpy(prev_workspace_name, active_ws->name);
+ strcpy(seat->prev_workspace_name, active_ws->name);
}
wlr_log(WLR_DEBUG, "Switching to workspace %p:%s",