summary refs log tree commit diff
diff options
context:
space:
mode:
authorokan <okan>2012-07-06 14:18:00 +0000
committerokan <okan>2012-07-06 14:18:00 +0000
commitcb893d0aa96e0a3e86cbd1094206871b10d92cd0 (patch)
tree827460ad7b1986d1880c7c2497a6a4f2358eef38
parent315f25f7aba3eb416757465a55b487289d8f8c27 (diff)
downloadcwm-cb893d0aa96e0a3e86cbd1094206871b10d92cd0.tar.gz
cwm-cb893d0aa96e0a3e86cbd1094206871b10d92cd0.tar.xz
cwm-cb893d0aa96e0a3e86cbd1094206871b10d92cd0.zip
querying for Xinerama should be done per display, not per screen, so
move chuck to display init; allows some shuffling to occur limiting
screen_init_xinerama()'s scope while keeping order intact.
-rw-r--r--calmwm.c15
-rw-r--r--calmwm.h1
-rw-r--r--screen.c8
-rw-r--r--xevents.c1
4 files changed, 12 insertions, 13 deletions
diff --git a/calmwm.c b/calmwm.c
index 6254781..4ee7253 100644
--- a/calmwm.c
+++ b/calmwm.c
@@ -97,7 +97,7 @@ main(int argc, char **argv)
 static void
 dpy_init(const char *dpyname)
 {
-	int	i;
+	int	i, fake;
 
 	XSetErrorHandler(x_errorhandler);
 
@@ -110,6 +110,9 @@ dpy_init(const char *dpyname)
 	XSync(X_Dpy, False);
 	XSetErrorHandler(x_errorhandler);
 
+	if (XineramaQueryExtension(X_Dpy, &fake, &fake) == 1 &&
+	    ((HasXinerama = XineramaIsActive(X_Dpy)) == 1))
+		HasXinerama = 1;
 	HasRandr = XRRQueryExtension(X_Dpy, &Randr_ev, &i);
 }
 
@@ -157,7 +160,6 @@ x_setupscreen(struct screen_ctx *sc, u_int which)
 	Window			*wins, w0, w1;
 	XWindowAttributes	 winattr;
 	XSetWindowAttributes	 rootattr;
-	int			 fake;
 	u_int			 nwins, i;
 
 	sc->which = which;
@@ -201,17 +203,8 @@ x_setupscreen(struct screen_ctx *sc, u_int which)
 
 	screen_updatestackingorder(sc);
 
-	if (XineramaQueryExtension(X_Dpy, &fake, &fake) == 1 &&
-	    ((HasXinerama = XineramaIsActive(X_Dpy)) == 1))
-		HasXinerama = 1;
 	if (HasRandr)
 		XRRSelectInput(X_Dpy, sc->rootwin, RRScreenChangeNotifyMask);
-	/*
-	 * initial setup of xinerama screens, if we're using RandR then we'll
-	 * redo this whenever the screen changes since a CTRC may have been
-	 * added or removed
-	 */
-	screen_init_xinerama(sc);
 
 	XSync(X_Dpy, False);
 }
diff --git a/calmwm.h b/calmwm.h
index 301f21f..3ef5260 100644
--- a/calmwm.h
+++ b/calmwm.h
@@ -360,7 +360,6 @@ void			 search_print_client(struct menu *, int);
 
 XineramaScreenInfo	*screen_find_xinerama(struct screen_ctx *, int, int);
 struct screen_ctx	*screen_fromroot(Window);
-void			 screen_init_xinerama(struct screen_ctx *);
 void			 screen_update_geometry(struct screen_ctx *);
 void			 screen_updatestackingorder(struct screen_ctx *);
 
diff --git a/screen.c b/screen.c
index 2285257..dd7eb0e 100644
--- a/screen.c
+++ b/screen.c
@@ -30,6 +30,8 @@
 
 #include "calmwm.h"
 
+static void	 screen_init_xinerama(struct screen_ctx *);
+
 struct screen_ctx *
 screen_fromroot(Window rootwin)
 {
@@ -65,6 +67,10 @@ screen_updatestackingorder(struct screen_ctx *sc)
 	XFree(wins);
 }
 
+/*
+ * If we're using RandR then we'll redo this whenever the screen
+ * changes since a CTRC may have been added or removed
+ */
 void
 screen_init_xinerama(struct screen_ctx *sc)
 {
@@ -114,6 +120,8 @@ screen_update_geometry(struct screen_ctx *sc)
 	sc->xmax = DisplayWidth(X_Dpy, sc->which);
 	sc->ymax = DisplayHeight(X_Dpy, sc->which);
 
+	screen_init_xinerama(sc);
+
 	xu_ewmh_net_desktop_geometry(sc);
 	xu_ewmh_net_workarea(sc);
 }
diff --git a/xevents.c b/xevents.c
index 57983cd..9478505 100644
--- a/xevents.c
+++ b/xevents.c
@@ -366,7 +366,6 @@ xev_handle_randr(XEvent *ee)
 		if (sc->which == (u_int)i) {
 			XRRUpdateConfiguration(ee);
 			screen_update_geometry(sc);
-			screen_init_xinerama(sc);
 		}
 	}
 }