]> git.sur5r.net Git - i3/i3/commitdiff
Merge pull request #2221 from Airblader/bug-2220
authorMichael Stapelberg <stapelberg@users.noreply.github.com>
Mon, 22 Feb 2016 08:15:31 +0000 (09:15 +0100)
committerMichael Stapelberg <stapelberg@users.noreply.github.com>
Mon, 22 Feb 2016 08:15:31 +0000 (09:15 +0100)
Revert e2e7b7 and remove unreachable fallback code

i3.config
i3.config.keycodes
i3bar/src/xcb.c

index b2d7fac8b50d22563e30ab1293404254dd6f58e5..f7722d361957c5d48b8aedc42c3d2033bba89d36 100644 (file)
--- a/i3.config
+++ b/i3.config
@@ -165,7 +165,6 @@ bindsym Mod1+r mode "resize"
 # finds out, if available)
 bar {
         status_command i3status
-        tray_output primary
 }
 
 #######################################################################
index e606d34702c004669ef507ff2ddb4e29fd3c36b8..0c978d0b7c15928009cc75a00f4d79b63d865728 100644 (file)
@@ -152,5 +152,4 @@ bindcode $mod+27 mode "resize"
 # finds out, if available)
 bar {
         status_command i3status
-        tray_output primary
 }
index d2aa28e9cbe1ab8660cfa41dfbc1095e17d88ddc..496035c22e0eaca3787ac1e13b430127288e8be0 100644 (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. */