Add emulatexinerama option in desktops section that splits the screen in two side...
authorMikael Magnusson <mikachu@comhem.se>
Mon, 23 Jul 2007 23:35:12 +0000 (01:35 +0200)
committerMikael Magnusson <mikachu@comhem.se>
Thu, 26 Jul 2007 19:11:07 +0000 (21:11 +0200)
openbox/config.c
openbox/config.h
openbox/extensions.c

index 0d6efc9250e5d83ef790b94accd2a38c5988906b..11797b85ddc3f121ff12347bb949cbcb83b377ca 100644 (file)
@@ -57,6 +57,7 @@ RrFont *config_font_osd;
 gint    config_desktops_num;
 GSList *config_desktops_names;
 guint   config_screen_firstdesk;
+gint    config_emulate_xinerama;
 
 gboolean config_resize_redraw;
 gboolean config_resize_four_corners;
@@ -618,6 +619,8 @@ static void parse_desktops(ObParseInst *i, xmlDocPtr doc, xmlNodePtr node,
         if (d > 0)
             config_screen_firstdesk = (unsigned) d;
     }
+    if ((n = parse_find_node("emulatexinerama", node)))
+        config_emulate_xinerama = parse_bool(doc, n);
     if ((n = parse_find_node("names", node))) {
         GSList *it;
         xmlNodePtr nname;
@@ -899,6 +902,7 @@ void config_startup(ObParseInst *i)
 
     config_desktops_num = 4;
     config_screen_firstdesk = 1;
+    config_emulate_xinerama = FALSE;
     config_desktops_names = NULL;
 
     parse_register(i, "desktops", parse_desktops, NULL);
index 42bf35346770964de08b3774ce3c75d36174ad2b..b5ce54fc7006915c65bf0c068da026312538d75b 100644 (file)
@@ -143,6 +143,8 @@ extern RrFont *config_font_osd;
 extern gint config_desktops_num;
 /*! Desktop to start on, put 5 to start in the center of a 3x3 grid */
 extern guint config_screen_firstdesk;
+/*! Emulate xinerama by dividing screen in two halves, left and right. */
+extern gboolean config_emulate_xinerama;
 /*! Names for the desktops */
 extern GSList *config_desktops_names;
 
index 89a965769970e8224d01029cf8c9a3f934b665cd..130804fc84631f230c5163a7bb45cb572cf8ac07 100644 (file)
@@ -21,6 +21,7 @@
 #include "geom.h"
 #include "extensions.h"
 #include "screen.h"
+#include "config.h"
 #include "debug.h"
 
 gboolean extensions_xkb       = FALSE;
@@ -87,7 +88,7 @@ void extensions_xinerama_screens(Rect **xin_areas, guint *nxin)
     guint i;
     gint l, r, t, b;
 #ifdef XINERAMA
-    if (extensions_xinerama) {
+    if (!config_emulate_xinerama && extensions_xinerama) {
         guint i;
         gint n;
         XineramaScreenInfo *info = XineramaQueryScreens(ob_display, &n);
@@ -99,22 +100,27 @@ void extensions_xinerama_screens(Rect **xin_areas, guint *nxin)
         XFree(info);
     } else
 #endif
-    if (ob_debug_xinerama) {
-        gint w = WidthOfScreen(ScreenOfDisplay(ob_display, ob_screen));
-        gint h = HeightOfScreen(ScreenOfDisplay(ob_display, ob_screen));
-        *nxin = 2;
-        *xin_areas = g_new(Rect, *nxin + 1);
-        RECT_SET((*xin_areas)[0], 0, 0, w/2, h);
-        RECT_SET((*xin_areas)[1], w/2, 0, w-(w/2), h);
-    }
-    else {
+    if (config_emulate_xinerama) {
+    *nxin = 2;
+    *xin_areas = g_new(Rect, *nxin + 1);
+    RECT_SET((*xin_areas)[0], 0, 0,
+                 WidthOfScreen(ScreenOfDisplay(ob_display, ob_screen)) / 2,
+                 HeightOfScreen(ScreenOfDisplay(ob_display, ob_screen)));
+    RECT_SET((*xin_areas)[1],
+                 WidthOfScreen(ScreenOfDisplay(ob_display, ob_screen)) / 2,
+                 0,
+                 WidthOfScreen(ScreenOfDisplay(ob_display, ob_screen)) / 2,
+                 HeightOfScreen(ScreenOfDisplay(ob_display, ob_screen)));
+    RECT_SET((*xin_areas)[*nxin], 0, 0,
+                 WidthOfScreen(ScreenOfDisplay(ob_display, ob_screen)),
+                 HeightOfScreen(ScreenOfDisplay(ob_display, ob_screen)));
+    } else {
         *nxin = 1;
         *xin_areas = g_new(Rect, *nxin + 1);
         RECT_SET((*xin_areas)[0], 0, 0,
                  WidthOfScreen(ScreenOfDisplay(ob_display, ob_screen)),
                  HeightOfScreen(ScreenOfDisplay(ob_display, ob_screen)));
     }
-
     /* returns one extra with the total area in it */
     l = (*xin_areas)[0].x;
     t = (*xin_areas)[0].y;