diff --git a/src/workspace.c b/src/workspace.c index 94759ceb..4663dfae 100644 --- a/src/workspace.c +++ b/src/workspace.c @@ -344,13 +344,14 @@ Workspace *get_first_workspace_for_screen(struct screens_head *slist, i3Screen * } } - if (result != NULL) { - workspace_initialize(result, screen); - return result; + if (result == NULL) { + LOG("No existing free workspace found to assign, creating a new one\n"); + + result = workspace_get(num_workspaces); } - LOG("WARNING: No free workspace found to assign!\n"); - return NULL; + workspace_initialize(result, screen); + return result; } /* diff --git a/src/xinerama.c b/src/xinerama.c index db5b9467..77da7bbf 100644 --- a/src/xinerama.c +++ b/src/xinerama.c @@ -354,6 +354,7 @@ void xinerama_requery_screens(xcb_connection_t *conn) { LOG("getting first ws for screen %p\n", screen); Workspace *ws = get_first_workspace_for_screen(new_screens, screen); initialize_screen(conn, screen, ws); + ws->reassigned = true; /* As this workspace just got visible (we got a new screen * without workspace), we need to map its clients */