]> git.sur5r.net Git - i3/i3/commitdiff
Bugfix: Ensure that all outputs have a ->con before handling disabled outputs (Thanks...
authorMichael Stapelberg <michael@stapelberg.de>
Wed, 27 Apr 2011 08:18:46 +0000 (10:18 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Wed, 27 Apr 2011 08:18:46 +0000 (10:18 +0200)
Steps to reproduce:
• xrandr --output VGA1 --auto
• xrandr --output LVDS1 --off

src/randr.c

index 0c702db05ab9dc1868a3405031081e00bede64a5..0c43670d8c3542b5e25e4408f8942fa04a89f9e1 100644 (file)
@@ -633,6 +633,18 @@ void randr_query_outputs() {
         }
     }
 
+    /* Ensure that all outputs which are active also have a con. This is
+     * necessary because in the next step, a clone might get disabled. Example:
+     * LVDS1 active, VGA1 gets activated as a clone of LVDS1 (has no con).
+     * LVDS1 gets disabled. */
+    TAILQ_FOREACH(output, &outputs, outputs) {
+        if (output->active && output->con == NULL) {
+            DLOG("Need to initialize a Con for output %s\n", output->name);
+            output_init_con(output);
+            output->changed = false;
+        }
+    }
+
     /* Handle outputs which have a new mode or are disabled now (either
      * because the user disabled them or because they are clones) */
     TAILQ_FOREACH(output, &outputs, outputs) {
@@ -706,12 +718,6 @@ void randr_query_outputs() {
             output->changed = false;
         }
 
-        if (output->active && output->con == NULL) {
-            DLOG("Need to initialize a Con for output %s\n", output->name);
-            output_init_con(output);
-            output->changed = false;
-        }
-
         if (output->changed) {
             output_change_mode(conn, output);
             output->changed = false;