* Initializes a CT_OUTPUT Con (searches existing ones from inplace restart
* before) to use for the given Output.
*
- * XXX: for assignments, we probably need to move workspace creation from here
- * to after the loop in randr_query_outputs().
- *
*/
void output_init_con(Output *output);
+/**
+ * Initializes at least one workspace for this output, trying the following
+ * steps until there is at least one workspace:
+ *
+ * • Move existing workspaces, which are assigned to be on the given output, to
+ * the output.
+ * • Create the first assigned workspace for this output.
+ * • Create the first unused workspace.
+ *
+ */
+void init_ws_for_output(Output *output, Con *content);
+
/**
* Initializes the specified output, assigning the specified workspace to it.
*
s->rect.height = root_screen->height_in_pixels;
s->name = "xroot-0";
output_init_con(s);
+ init_ws_for_output(s, output_get_content(s->con));
TAILQ_INSERT_TAIL(&outputs, s, outputs);
* • Create the first unused workspace.
*
*/
-static void init_ws_for_output(Output *output, Con *content) {
+void init_ws_for_output(Output *output, Con *content) {
char *name;
/* go through all assignments and move the existing workspaces to this output */
GREP_FIRST(visible, content, child->fullscreen_mode == CF_OUTPUT);
if (!visible) {
visible = TAILQ_FIRST(&(content->nodes_head));
+ focused = content;
workspace_show(visible->name);
}
return;
LOG("Initializing first assigned workspace \"%s\" for output \"%s\"\n",
assignment->name, assignment->output);
+ focused = content;
workspace_show(assignment->name);
return;
}
TAILQ_INSERT_HEAD(&outputs, s, outputs);
else TAILQ_INSERT_TAIL(&outputs, s, outputs);
output_init_con(s);
+ init_ws_for_output(s, output_get_content(s->con));
num_screens++;
}