Merge pull request #2221 from Airblader/bug-2220

Revert e2e7b7 and remove unreachable fallback code
This commit is contained in:
Michael Stapelberg 2016-02-22 09:15:31 +01:00
commit eb631ce3c3
3 changed files with 29 additions and 21 deletions

View File

@ -165,7 +165,6 @@ bindsym Mod1+r mode "resize"
# finds out, if available) # finds out, if available)
bar { bar {
status_command i3status status_command i3status
tray_output primary
} }
####################################################################### #######################################################################

View File

@ -152,5 +152,4 @@ bindcode $mod+27 mode "resize"
# finds out, if available) # finds out, if available)
bar { bar {
status_command i3status status_command i3status
tray_output primary
} }

View File

@ -769,19 +769,9 @@ static void handle_client_message(xcb_client_message_event_t *event) {
break; break;
} }
/* Check whether any "tray_output primary" was defined for this bar. */ /* If no tray_output has been specified, we fall back to the first
bool contains_primary = false; * available output. */
TAILQ_FOREACH(tray_output, &(config.tray_outputs), tray_outputs) { if (output == NULL && TAILQ_EMPTY(&(config.tray_outputs))) {
if (strcasecmp("primary", tray_output->output) == 0) {
contains_primary = true;
break;
}
}
/* In case of tray_output == primary and there is no primary output
* configured, we fall back to the first available output. We do the
* same if no tray_output was specified. */
if (output == NULL && (contains_primary || TAILQ_EMPTY(&(config.tray_outputs)))) {
SLIST_FOREACH(walk, outputs, slist) { SLIST_FOREACH(walk, outputs, slist) {
if (!walk->active) if (!walk->active)
continue; continue;
@ -790,6 +780,7 @@ static void handle_client_message(xcb_client_message_event_t *event) {
break; break;
} }
} }
if (output == NULL) { if (output == NULL) {
ELOG("No output found\n"); ELOG("No output found\n");
return; return;
@ -1770,16 +1761,35 @@ void reconfig_windows(bool redraw_bars) {
} }
/* Unless "tray_output none" was specified, we need to initialize the tray. */ /* Unless "tray_output none" was specified, we need to initialize the tray. */
const char *first = (TAILQ_EMPTY(&(config.tray_outputs))) ? SLIST_FIRST(outputs)->name : TAILQ_FIRST(&(config.tray_outputs))->output; bool no_tray = false;
if (!tray_configured && strcasecmp(first, "none") != 0) { if (!(TAILQ_EMPTY(&(config.tray_outputs)))) {
/* We do a sanity check here to ensure that this i3bar instance actually handles no_tray = strcasecmp(TAILQ_FIRST(&(config.tray_outputs))->output, "none") == 0;
* the output on which the tray should appear. For example, }
* consider tray_output == [VGA-1], but output == [HDMI-1]. */
/*
* There are three scenarios in which we need to initialize the tray:
* 1. A specific output was listed in tray_outputs which is also
* in the list of outputs managed by this bar.
* 2. No tray_output directive was specified. In this case, we
* use the first available output.
* 3. 'tray_output primary' was specified. In this case we use the
* primary output.
*
* Three scenarios in which we specifically don't want to
* initialize the tray are:
* 1. 'tray_output none' was specified.
* 2. A specific output was listed as a tray_output, but is not
* one of the outputs managed by this bar. For example, consider
* tray_outputs == [VGA-1], but outputs == [HDMI-1].
* 3. 'tray_output primary' was specified and no output in the list
* is primary.
*/
if (!tray_configured && !no_tray) {
/* If no tray_output was specified, we go ahead and initialize the tray as /* If no tray_output was specified, we go ahead and initialize the tray as
* we will be using the first available output. */ * we will be using the first available output. */
if (TAILQ_EMPTY(&(config.tray_outputs))) if (TAILQ_EMPTY(&(config.tray_outputs))) {
init_tray(); init_tray();
}
/* If one or more tray_output assignments were specified, we ensure that at least one of /* If one or more tray_output assignments were specified, we ensure that at least one of
* them is actually an output managed by this instance. */ * them is actually an output managed by this instance. */