+ XRRScreenResources *res = XRRGetScreenResourcesCurrent(server.dsp, server.root_win);
+
+ if (res && res->ncrtc >= nbmonitor) {
+ // use xrandr to identify monitors (does not work with proprietery nvidia drivers)
+ printf("xRandr: Found crtc's: %d\n", res->ncrtc );
+ server.monitor = malloc(res->ncrtc * sizeof(Monitor));
+ for (i=0; i<res->ncrtc; ++i) {
+ XRRCrtcInfo* crtc_info = XRRGetCrtcInfo(server.dsp, res, res->crtcs[i]);
+ server.monitor[i].x = crtc_info->x;
+ server.monitor[i].y = crtc_info->y;
+ server.monitor[i].width = crtc_info->width;
+ server.monitor[i].height = crtc_info->height;
+ server.monitor[i].names = malloc((crtc_info->noutput+1) * sizeof(char*));
+ for (j=0; j<crtc_info->noutput; ++j) {
+ XRROutputInfo* output_info = XRRGetOutputInfo(server.dsp, res, crtc_info->outputs[j]);
+ printf("xRandr: Linking output %s with crtc %d\n", output_info->name, i);
+ server.monitor[i].names[j] = g_strdup(output_info->name);
+ XRRFreeOutputInfo(output_info);
+ }
+ server.monitor[i].names[j] = 0;
+ XRRFreeCrtcInfo(crtc_info);
+ }
+ nbmonitor = res->ncrtc;
+ }
+ else if (info && nbmonitor > 0) {