From d230b2bb1a81950c1726125d24edfa6507ac2d83 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Mon, 28 Sep 2009 18:02:11 +0200 Subject: [PATCH] Bugfix: Create new workspace when there are no free existing ones to assign (Thanks msi) As the workspaces are now created dynamically, we cannot rely on the workspaces to be there when we need them without creating them. On the other hand, this eliminates the case that there are no workspaces to assign to a new screen, because now we can just create one. --- src/workspace.c | 11 ++++++----- src/xinerama.c | 1 + 2 files changed, 7 insertions(+), 5 deletions(-) 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 */ -- 2.39.5