diff options
author | Drew DeVault <sir@cmpwn.com> | 2016-03-04 11:08:03 -0500 |
---|---|---|
committer | Drew DeVault <sir@cmpwn.com> | 2016-03-04 11:08:03 -0500 |
commit | ef5d8969464e1bfde08a081f1285b33014aa1707 (patch) | |
tree | 4f4400de4a29dfa18ae10da6e71ea60146190155 /sway/workspace.c | |
parent | 79bfd620d6f7a3d089898ec6391411c2c6b22668 (diff) | |
parent | 8ddafeeaae44db77bfdb55d1776513d88a58f68e (diff) |
Merge pull request #501 from mikkeloscar/ws-on-output
Fix assigning workspaces to outputs
Diffstat (limited to 'sway/workspace.c')
-rw-r--r-- | sway/workspace.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/sway/workspace.c b/sway/workspace.c index ad989de9..90edc6e9 100644 --- a/sway/workspace.c +++ b/sway/workspace.c @@ -25,8 +25,22 @@ struct workspace_by_number_data { const char *name; }; -char *workspace_next_name(void) { - sway_log(L_DEBUG, "Workspace: Generating new name"); +static bool workspace_valid_on_output(const char *output_name, const char *ws_name) { + int i; + for (i = 0; i < config->workspace_outputs->length; ++i) { + struct workspace_output *wso = config->workspace_outputs->items[i]; + if (strcasecmp(wso->workspace, ws_name) == 0) { + if (strcasecmp(wso->output, output_name) != 0) { + return false; + } + } + } + + return true; +} + +char *workspace_next_name(const char *output_name) { + sway_log(L_DEBUG, "Workspace: Generating new workspace name for output %s", output_name); int i; int l = 1; // Scan all workspace bindings to find the next available workspace name, @@ -73,6 +87,14 @@ char *workspace_next_name(void) { free(_target); continue; } + + // make sure that the workspace can appear on the given + // output + if (!workspace_valid_on_output(output_name, _target)) { + free(_target); + continue; + } + if (binding->order < order) { order = binding->order; target = _target; |