Bugfix: Fix initialization / assignments when RandR is missing

This commit is contained in:
Michael Stapelberg 2011-05-14 22:34:34 +02:00
parent 3f45d3c447
commit 5db97dc473
3 changed files with 17 additions and 4 deletions

View File

@ -35,12 +35,21 @@ void disable_randr(xcb_connection_t *conn);
* 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.
*

View File

@ -213,6 +213,7 @@ void disable_randr(xcb_connection_t *conn) {
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);
@ -325,7 +326,7 @@ void output_init_con(Output *output) {
* 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 */
@ -371,6 +372,7 @@ static void init_ws_for_output(Output *output, Con *content) {
GREP_FIRST(visible, content, child->fullscreen_mode == CF_OUTPUT);
if (!visible) {
visible = TAILQ_FIRST(&(content->nodes_head));
focused = content;
workspace_show(visible->name);
}
return;
@ -383,6 +385,7 @@ static void init_ws_for_output(Output *output, Con *content) {
LOG("Initializing first assigned workspace \"%s\" for output \"%s\"\n",
assignment->name, assignment->output);
focused = content;
workspace_show(assignment->name);
return;
}

View File

@ -71,6 +71,7 @@ static void query_screens(xcb_connection_t *conn) {
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++;
}