+/* query monitor information and cursor position */
+static void
+initmonitor(void)
+{
+ XineramaScreenInfo *info = NULL;
+ Window dw; /* dummy variable */
+ int di; /* dummy variable */
+ unsigned du; /* dummy variable */
+ int cursx, cursy; /* cursor position */
+ int nmons;
+ int i;
+
+ XQueryPointer(dpy, rootwin, &dw, &dw, &cursx, &cursy, &di, &di, &du);
+
+ mon.x = mon.y = 0;
+ mon.w = DisplayWidth(dpy, screen);
+ mon.h = DisplayHeight(dpy, screen);
+
+ if ((info = XineramaQueryScreens(dpy, &nmons)) != NULL) {
+ int selmon = 0;
+
+ if (!mflag || (mflag && (config.monitor < 0 || config.monitor >= nmons))) {
+ for (i = 0; i < nmons; i++) {
+ if (cursx >= info[i].x_org && cursx <= info[i].x_org + info[i].width &&
+ cursy >= info[i].y_org && cursy <= info[i].y_org + info[i].height) {
+ selmon = i;
+ break;
+ }
+ }
+ } else {
+ selmon = config.monitor;
+ }
+
+ mon.x = info[selmon].x_org;
+ mon.y = info[selmon].y_org;
+ mon.w = info[selmon].width;
+ mon.h = info[selmon].height;
+ }
+
+ if (!pflag) {
+ config.posx = cursx;
+ config.posy = cursy;
+ } else if (mflag) {
+ config.posx += mon.x;
+ config.posy += mon.y;
+ }
+}
+