-               if(n > 1) {
-                       int di, x, y;
-                       unsigned int dui;
-                       Window dummy;
-                       if(XQueryPointer(dpy, root, &dummy, &dummy, &x, &y, &di, &di, &dui))
-                               for(i = 0; i < n; i++)
-                                       if(INRECT(x, y, info[i].x_org, info[i].y_org, info[i].width, info[i].height))
-                                               break;
+               nmons = (unsigned int)n;
+               for(c = clients; c; c = c->next)
+                       if(c->mon >= nmons)
+                               c->mon = nmons - 1;
+               if(!(mon = (Monitor *)realloc(mon, sizeof(Monitor) * nmons)))
+                       die("fatal: could not realloc() %u bytes\n", sizeof(Monitor) * nmons);
+               pquery = XQueryPointer(dpy, root, &dummy, &dummy, &x, &y, &di, &di, &dui);
+               for(i = 0; i < nmons; i++) {
+                       /* TODO: consider re-using XineramaScreenInfo */
+                       mon[i].wx = info[i].x_org;
+                       mon[i].wy = info[i].y_org;
+                       mon[i].ww = info[i].width;
+                       mon[i].wh = info[i].height;
+                       mon[i].seltags = 0;
+                       mon[i].sellt = 0;
+                       if(pquery && INRECT(x, y, info[i].x_org, info[i].y_org, info[i].width, info[i].height))
+                               selmon = &mon[i];