- for(i = 0, m = newmons; m; m = m->next, i++) {
- m->screen_number = info[i].screen_number;
- m->wx = info[i].x_org;
- m->my = m->wy = info[i].y_org;
- m->ww = info[i].width;
- m->mh = m->wh = info[i].height;
- }
+ int i, j, n, nn;
+ Client *c;
+ Monitor *m;
+ XineramaScreenInfo *info = XineramaQueryScreens(dpy, &nn);
+ XineramaScreenInfo *unique = NULL;
+
+ info = XineramaQueryScreens(dpy, &nn);
+ for(n = 0, m = mons; m; m = m->next, n++);
+ /* only consider unique geometries as separate screens */
+ if(!(unique = (XineramaScreenInfo *)malloc(sizeof(XineramaScreenInfo) * nn)))
+ die("fatal: could not malloc() %u bytes\n", sizeof(XineramaScreenInfo) * nn);
+ for(i = 0, j = 0; i < nn; i++)
+ if(isuniquegeom(unique, j, &info[i]))
+ memcpy(&unique[j++], &info[i], sizeof(XineramaScreenInfo));