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.
This commit is contained in:
parent
e101940c5e
commit
d230b2bb1a
|
@ -344,13 +344,14 @@ Workspace *get_first_workspace_for_screen(struct screens_head *slist, i3Screen *
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (result != NULL) {
|
if (result == NULL) {
|
||||||
workspace_initialize(result, screen);
|
LOG("No existing free workspace found to assign, creating a new one\n");
|
||||||
return result;
|
|
||||||
|
result = workspace_get(num_workspaces);
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG("WARNING: No free workspace found to assign!\n");
|
workspace_initialize(result, screen);
|
||||||
return NULL;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -354,6 +354,7 @@ void xinerama_requery_screens(xcb_connection_t *conn) {
|
||||||
LOG("getting first ws for screen %p\n", screen);
|
LOG("getting first ws for screen %p\n", screen);
|
||||||
Workspace *ws = get_first_workspace_for_screen(new_screens, screen);
|
Workspace *ws = get_first_workspace_for_screen(new_screens, screen);
|
||||||
initialize_screen(conn, screen, ws);
|
initialize_screen(conn, screen, ws);
|
||||||
|
ws->reassigned = true;
|
||||||
|
|
||||||
/* As this workspace just got visible (we got a new screen
|
/* As this workspace just got visible (we got a new screen
|
||||||
* without workspace), we need to map its clients */
|
* without workspace), we need to map its clients */
|
||||||
|
|
Loading…
Reference in New Issue