]> git.sur5r.net Git - i3/i3/commitdiff
Add force_xinerama configuration option
authorMichael Walle <michael@walle.cc>
Mon, 19 Sep 2011 20:43:25 +0000 (22:43 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Mon, 19 Sep 2011 22:10:38 +0000 (23:10 +0100)
The configuration option does the same as the commandline parameter, except
it can be easily set by the user (e.g. you are using KDM and can't start a
session through ~/.xsession).

Signed-off-by: Michael Walle <michael@walle.cc>
include/config.h
src/cfgparse.l
src/cfgparse.y
src/main.c

index 3234b91e5d5f658cae51ed548d047b5df05116e4..07391a6af6458e4e02d1dfad3c11cf85992f6807 100644 (file)
@@ -123,6 +123,16 @@ struct Config {
          * more often. */
         bool force_focus_wrapping;
 
+        /** By default, use the RandR API for multi-monitor setups.
+         * Unfortunately, the nVidia binary graphics driver doesn't support
+         * this API. Instead, it only support the less powerful Xinerama API,
+         * which can be enabled by this option.
+         *
+         * Note: this option takes only effect on the initial startup (eg.
+         * reconfiguration is not possible). On startup, the list of screens
+         * is fetched once and never updated. */
+        bool force_xinerama;
+
         /** The default border style for new windows. */
         border_style_t default_border;
 
index 021e351633fcebf7725d6e31b987b693e3b8955a..dad5a915520dd60bfe10c9577c0587a180b92d27 100644 (file)
@@ -125,6 +125,7 @@ none                            { return TOK_NONE; }
 1pixel                          { return TOK_1PIXEL; }
 focus_follows_mouse             { return TOKFOCUSFOLLOWSMOUSE; }
 force_focus_wrapping            { return TOK_FORCE_FOCUS_WRAPPING; }
+force_xinerama                  { return TOK_FORCE_XINERAMA; }
 workspace_bar                   { return TOKWORKSPACEBAR; }
 popup_during_fullscreen         { return TOK_POPUP_DURING_FULLSCREEN; }
 ignore                          { return TOK_IGNORE; }
index 016953fd4c6f119f700a9dfab25cfacf0cdb43a1..536089487198d50f1c3548ab0670c61a742a2a3a 100644 (file)
@@ -619,6 +619,7 @@ void parse_file(const char *f) {
 %token                  TOK_1PIXEL                  "1pixel"
 %token                  TOKFOCUSFOLLOWSMOUSE        "focus_follows_mouse"
 %token                  TOK_FORCE_FOCUS_WRAPPING    "force_focus_wrapping"
+%token                  TOK_FORCE_XINERAMA          "force_xinerama"
 %token                  TOKWORKSPACEBAR             "workspace_bar"
 %token                  TOK_DEFAULT                 "default"
 %token                  TOK_STACKING                "stacking"
@@ -674,6 +675,7 @@ line:
     | new_float
     | focus_follows_mouse
     | force_focus_wrapping
+    | force_xinerama
     | workspace_bar
     | workspace
     | assign
@@ -1022,6 +1024,14 @@ force_focus_wrapping:
     }
     ;
 
+force_xinerama:
+    TOK_FORCE_XINERAMA bool
+    {
+        DLOG("force xinerama = %d\n", $2);
+        config.force_xinerama = $2;
+    }
+    ;
+
 workspace_bar:
     TOKWORKSPACEBAR bool
     {
index ea02bb6eb62e546fbc38282e59d0ea7d26809aa1..cc60d69cd8fd07a5a1cf4142d7e9510ad0e4016d 100644 (file)
@@ -432,7 +432,10 @@ int main(int argc, char *argv[]) {
 
     free(greply);
 
-    if (force_xinerama) {
+    /* Force Xinerama (for drivers which don't support RandR yet, esp. the
+     * nVidia binary graphics driver), when specified either in the config
+     * file or on command-line */
+    if (force_xinerama || config.force_xinerama) {
         xinerama_init();
     } else {
         DLOG("Checking for XRandR...\n");