i3bar: Only configure tray on own outputs

If the config specifies a `tray_output` not in the list of outputs over
which this bar will span, do not initialize a tray for the bar.

Fixes former behavior, which was to initialize the tray without showing
the icons, causing disapearing tray icons in multi-monitor environments
when `tray_output` isnt `output`.
This commit is contained in:
Tony Crisci 2013-10-20 07:51:50 -04:00 committed by Michael Stapelberg
parent e99158e419
commit cce3c8066a
1 changed files with 14 additions and 4 deletions

View File

@ -1531,10 +1531,20 @@ void reconfig_windows(bool redraw_bars) {
exit(EXIT_FAILURE);
}
if (!tray_configured &&
(!config.tray_output ||
strcasecmp("none", config.tray_output) != 0)) {
init_tray();
const char *tray_output = (config.tray_output ? config.tray_output : SLIST_FIRST(outputs)->name);
if (!tray_configured && strcasecmp(tray_output, "none") != 0) {
/* Configuration sanity check: ensure this i3bar instance handles the output on
* which the tray should appear (e.g. dont initialize a tray if tray_output ==
* VGA-1 but output == [HDMI-1]).
*/
i3_output *output;
SLIST_FOREACH(output, outputs, slist) {
if (strcasecmp(output->name, tray_output) == 0 ||
(strcasecmp(tray_output, "primary") == 0 && output->primary)) {
init_tray();
break;
}
}
tray_configured = true;
}
} else {