Merge pull request #677 from zandrmartin/maintain-workspace-output-assignments

enforce workspace output assignents
This commit is contained in:
Drew DeVault 2016-05-29 10:05:50 -04:00
commit fc7132a3ba
3 changed files with 22 additions and 15 deletions

View file

@ -2325,7 +2325,7 @@ static struct cmd_results *cmd_workspace(int argc, char **argv) {
// Handle workspace next/prev // Handle workspace next/prev
swayc_t *ws = NULL; swayc_t *ws = NULL;
if (argc == 2) { if (argc == 2) {
if (!(ws=workspace_by_number(argv[1]))) { if (!(ws = workspace_by_number(argv[1]))) {
ws = workspace_create(argv[1]); ws = workspace_create(argv[1]);
} }
} else if (strcasecmp(argv[0], "next") == 0) { } else if (strcasecmp(argv[0], "next") == 0) {

View file

@ -134,32 +134,39 @@ swayc_t *new_output(wlc_handle handle) {
// Create workspace // Create workspace
char *ws_name = NULL; char *ws_name = NULL;
swayc_t *ws = NULL;
if (name) { if (name) {
for (i = 0; i < config->workspace_outputs->length; ++i) { for (i = 0; i < config->workspace_outputs->length; ++i) {
struct workspace_output *wso = config->workspace_outputs->items[i]; struct workspace_output *wso = config->workspace_outputs->items[i];
if (strcasecmp(wso->output, name) == 0) { if (strcasecmp(wso->output, name) == 0) {
sway_log(L_DEBUG, "Matched workspace to output: %s for %s", wso->workspace, wso->output); sway_log(L_DEBUG, "Matched workspace to output: %s for %s", wso->workspace, wso->output);
// Check if any other workspaces are using this name // Check if any other workspaces are using this name
if (workspace_by_name(wso->workspace)) { if ((ws = workspace_by_name(wso->workspace))) {
sway_log(L_DEBUG, "But it's already taken"); // if yes, move those to this output, because they should be here
break; move_workspace_to(ws, output);
} } else if (!ws_name) {
sway_log(L_DEBUG, "So we're going to use it"); // set a workspace name in case we need to create a default one
ws_name = strdup(wso->workspace); ws_name = strdup(wso->workspace);
break;
} }
} }
} }
}
if (output->children->length == 0) {
if (!ws_name) { if (!ws_name) {
ws_name = workspace_next_name(output->name); ws_name = workspace_next_name(output->name);
} }
// create and initialize default workspace // create and initialize default workspace
swayc_t *ws = new_workspace(output, ws_name); sway_log(L_DEBUG, "Creating default workspace %s", ws_name);
ws = new_workspace(output, ws_name);
ws->is_focused = true; ws->is_focused = true;
} else {
sort_workspaces(output);
set_focused_container(output->children->items[0]);
}
free(ws_name); free(ws_name);
return output; return output;
} }

View file

@ -110,7 +110,7 @@ bool set_focused_container(swayc_t *c) {
// Get workspace for c, get that workspaces current focused container. // Get workspace for c, get that workspaces current focused container.
swayc_t *workspace = swayc_active_workspace_for(c); swayc_t *workspace = swayc_active_workspace_for(c);
swayc_t *focused = get_focused_view(workspace); swayc_t *focused = get_focused_view(workspace);
// if the workspace we are changing focus to has a fullscreen view return
if (swayc_is_fullscreen(focused) && focused != c) { if (swayc_is_fullscreen(focused) && focused != c) {
// if switching to a workspace with a fullscreen view, // if switching to a workspace with a fullscreen view,
// focus on the fullscreen view // focus on the fullscreen view