aboutsummaryrefslogtreecommitdiffstats
path: root/calmwm.c
diff options
context:
space:
mode:
Diffstat (limited to 'calmwm.c')
-rw-r--r--calmwm.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/calmwm.c b/calmwm.c
index dd1ea6d..b0397e0 100644
--- a/calmwm.c
+++ b/calmwm.c
@@ -15,7 +15,7 @@
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
- * $Id: calmwm.c,v 1.29 2008/09/22 14:28:04 oga Exp $
+ * $Id: calmwm.c,v 1.30 2008/09/29 23:16:46 oga Exp $
*/
#include "headers.h"
@@ -36,6 +36,7 @@ u_int Nscreens;
struct client_ctx_q Clientq;
int Doshape, Shape_ev;
+int HasXinerama, HasRandr, Randr_ev;
int Starting;
struct conf Conf;
@@ -121,6 +122,8 @@ dpy_init(const char *dpyname)
Doshape = XShapeQueryExtension(X_Dpy, &Shape_ev, &i);
+ HasRandr = XRRQueryExtension(X_Dpy, &Randr_ev, &i);
+
TAILQ_INIT(&Screenq);
}
@@ -133,7 +136,7 @@ x_setup(void)
Nscreens = ScreenCount(X_Dpy);
for (i = 0; i < (int)Nscreens; i++) {
- XMALLOC(sc, struct screen_ctx);
+ XCALLOC(sc, struct screen_ctx);
x_setupscreen(sc, i);
TAILQ_INSERT_TAIL(&Screenq, sc, entry);
}
@@ -161,6 +164,7 @@ x_setupscreen(struct screen_ctx *sc, u_int which)
Window *wins, w0, w1;
XWindowAttributes winattr;
XSetWindowAttributes rootattr;
+ int fake;
u_int nwins, i;
Curscreen = sc;
@@ -246,6 +250,18 @@ x_setupscreen(struct screen_ctx *sc, u_int which)
XChangeWindowAttributes(X_Dpy, sc->rootwin,
CWEventMask, &rootattr);
+ 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);
return;