Merge pull request #2221 from Airblader/bug-2220

Revert e2e7b7 and remove unreachable fallback code
next
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)
bar {
status_command i3status
tray_output primary
}
#######################################################################

View File

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

View File

@ -769,19 +769,9 @@ static void handle_client_message(xcb_client_message_event_t *event) {
break;
}
/* Check whether any "tray_output primary" was defined for this bar. */
bool contains_primary = false;
TAILQ_FOREACH(tray_output, &(config.tray_outputs), 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)))) {
/* If no tray_output has been specified, we fall back to the first
* available output. */
if (output == NULL && TAILQ_EMPTY(&(config.tray_outputs))) {
SLIST_FOREACH(walk, outputs, slist) {
if (!walk->active)
continue;
@ -790,6 +780,7 @@ static void handle_client_message(xcb_client_message_event_t *event) {
break;
}
}
if (output == NULL) {
ELOG("No output found\n");
return;
@ -1770,16 +1761,35 @@ void reconfig_windows(bool redraw_bars) {
}
/* 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;
if (!tray_configured && strcasecmp(first, "none") != 0) {
/* We do a sanity check here to ensure that this i3bar instance actually handles
* the output on which the tray should appear. For example,
* consider tray_output == [VGA-1], but output == [HDMI-1]. */
bool no_tray = false;
if (!(TAILQ_EMPTY(&(config.tray_outputs)))) {
no_tray = strcasecmp(TAILQ_FIRST(&(config.tray_outputs))->output, "none") == 0;
}
/*
* 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
* we will be using the first available output. */
if (TAILQ_EMPTY(&(config.tray_outputs)))
if (TAILQ_EMPTY(&(config.tray_outputs))) {
init_tray();
}
/* 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. */