From: Michael Stapelberg Date: Sat, 19 Aug 2017 22:19:45 +0000 (+0200) Subject: Bugfix: consider inactive monitors when querying (#2862) X-Git-Tag: 4.14~12 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=4d93d264849165713ecd05f4265d76f217789a95;p=i3%2Fi3 Bugfix: consider inactive monitors when querying (#2862) fixes #2815 fixes #2594 --- diff --git a/include/randr.h b/include/randr.h index 8cbfc842..568b52f0 100644 --- a/include/randr.h +++ b/include/randr.h @@ -75,10 +75,11 @@ void randr_disable_output(Output *output); Output *get_first_output(void); /** - * Returns the output with the given name if it is active (!) or NULL. + * Returns the output with the given name or NULL. + * If require_active is true, only active outputs are considered. * */ -Output *get_output_by_name(const char *name); +Output *get_output_by_name(const char *name, const bool require_active); /** * Returns the active (!) output which contains the coordinates x, y or NULL diff --git a/src/output.c b/src/output.c index 0f2bd617..e3c54a67 100644 --- a/src/output.c +++ b/src/output.c @@ -41,7 +41,7 @@ Output *get_output_from_string(Output *current_output, const char *output_str) { return get_output_next_wrap(D_DOWN, current_output); } - return get_output_by_name(output_str); + return get_output_by_name(output_str, true); } Output *get_output_for_con(Con *con) { @@ -51,7 +51,7 @@ Output *get_output_for_con(Con *con) { return NULL; } - Output *output = get_output_by_name(output_con->name); + Output *output = get_output_by_name(output_con->name, true); if (output == NULL) { ELOG("Could not get output from name \"%s\".\n", output_con->name); return NULL; diff --git a/src/randr.c b/src/randr.c index 8496fd03..48bffb46 100644 --- a/src/randr.c +++ b/src/randr.c @@ -40,15 +40,16 @@ static Output *get_output_by_id(xcb_randr_output_t id) { } /* - * Returns the output with the given name if it is active (!) or NULL. + * Returns the output with the given name or NULL. + * If require_active is true, only active outputs are considered. * */ -Output *get_output_by_name(const char *name) { +Output *get_output_by_name(const char *name, const bool require_active) { Output *output; bool get_primary = (strcasecmp("primary", name) == 0); TAILQ_FOREACH(output, &outputs, outputs) { if ((output->primary && get_primary) || - (output->active && strcasecmp(output->name, name) == 0)) { + ((!require_active || output->active) && strcasecmp(output->name, name) == 0)) { return output; } } @@ -442,7 +443,7 @@ void init_ws_for_output(Output *output, Con *content) { if (visible && previous == NULL) { LOG("There is no workspace left on \"%s\", re-initializing\n", workspace_out->name); - init_ws_for_output(get_output_by_name(workspace_out->name), + init_ws_for_output(get_output_by_name(workspace_out->name, true), output_get_content(workspace_out)); DLOG("Done re-initializing, continuing with \"%s\"\n", output->name); } @@ -590,7 +591,7 @@ static bool randr_query_outputs_15(void) { xcb_get_atom_name_name(atom_reply)); free(atom_reply); - Output *new = get_output_by_name(name); + Output *new = get_output_by_name(name, false); if (new == NULL) { new = scalloc(1, sizeof(Output)); new->name = sstrdup(name);