diff --git a/src/main.c b/src/main.c index 7ba12bd9..5c86a21e 100644 --- a/src/main.c +++ b/src/main.c @@ -813,12 +813,13 @@ int main(int argc, char *argv[]) { if (!output) { ELOG("ERROR: No screen at (%d, %d), starting on the first screen\n", pointerreply->root_x, pointerreply->root_y); - output = get_first_output(); } - - con_activate(con_descend_focused(output_get_content(output->con))); - free(pointerreply); } + if (!output) { + output = get_first_output(); + } + con_activate(con_descend_focused(output_get_content(output->con))); + free(pointerreply); tree_render(); diff --git a/src/randr.c b/src/randr.c index fb127ab5..9a0bf5cc 100644 --- a/src/randr.c +++ b/src/randr.c @@ -70,11 +70,22 @@ Output *get_output_by_name(const char *name, const bool require_active) { * */ Output *get_first_output(void) { - Output *output; + Output *output, *result = NULL; - TAILQ_FOREACH(output, &outputs, outputs) - if (output->active) - return output; + TAILQ_FOREACH(output, &outputs, outputs) { + if (output->active) { + if (output->primary) { + return output; + } + if (!result) { + result = output; + } + } + } + + if (result) { + return result; + } die("No usable outputs available.\n"); }