int main (int argc, char **argv) { int event_number, error_number; int major, minor; int nscreens = 0; XineramaScreenInfo *xsi; int i; XtAppContext app; Widget toplevel_shell = XtAppInitialize (&app, progclass, 0, 0, &argc, argv, 0, 0, 0); Display *dpy = XtDisplay (toplevel_shell); XtGetApplicationNameAndClass (dpy, &progname, &progclass); if (!XineramaQueryExtension(dpy, &event_number, &error_number)) { fprintf(stderr, "%s: XineramaQueryExtension(dpy, ...) ==> False\n", blurb()); fprintf(stderr, "%s: server does not support the Xinerama extension.\n", blurb()); exit(1); } else fprintf(stderr, "%s: XineramaQueryExtension(dpy, ...) ==> %d, %d\n", blurb(), event_number, error_number); if (!XineramaIsActive(dpy)) { fprintf(stderr, "%s: XineramaIsActive(dpy) ==> False\n", blurb()); fprintf(stderr, "%s: server says Xinerama is turned off.\n", blurb()); exit(1); } else fprintf(stderr, "%s: XineramaIsActive(dpy) ==> True\n", blurb()); if (!XineramaQueryVersion(dpy, &major, &minor)) { fprintf(stderr, "%s: XineramaQueryVersion(dpy, ...) ==> False\n", blurb()); fprintf(stderr, "%s: server didn't report Xinerama version numbers?\n", blurb()); } else fprintf(stderr, "%s: XineramaQueryVersion(dpy, ...) ==> %d, %d\n", blurb(), major, minor); xsi = XineramaQueryScreens (dpy, &nscreens); fprintf(stderr, "%s: %d Xinerama screens\n", blurb(), nscreens); for (i = 0; i < nscreens; i++) fprintf (stderr, "%s: screen %d: %dx%d+%d+%d\n", blurb(), xsi[i].screen_number, xsi[i].width, xsi[i].height, xsi[i].x_org, xsi[i].y_org); XFree (xsi); XSync (dpy, False); exit (0); }
void init_xinerama(void) { if (opt.xinerama && XineramaIsActive(disp)) { int major, minor, px, py, i; /* discarded */ Window dw; int di; unsigned int du; XineramaQueryVersion(disp, &major, &minor); xinerama_screens = XineramaQueryScreens(disp, &num_xinerama_screens); if (getenv("XINERAMA_SCREEN")) xinerama_screen = atoi(getenv("XINERAMA_SCREEN")); else { xinerama_screen = 0; XQueryPointer(disp, root, &dw, &dw, &px, &py, &di, &di, &du); for (i = 0; i < num_xinerama_screens; i++) { if (XY_IN_RECT(px, py, xinerama_screens[i].x_org, xinerama_screens[i].y_org, xinerama_screens[i].width, xinerama_screens[i].height)) { xinerama_screen = i; break; } } } } }
static void _al_xsys_xinerama_init(ALLEGRO_SYSTEM_XGLX *s) { int event_base = 0; int error_base = 0; /* init xinerama info to defaults */ s->xinerama_available = 0; s->xinerama_screen_count = 0; s->xinerama_screen_info = NULL; _al_mutex_lock(&s->lock); if (XineramaQueryExtension(s->x11display, &event_base, &error_base)) { int minor_version = 0, major_version = 0; int status = XineramaQueryVersion(s->x11display, &major_version, &minor_version); ALLEGRO_INFO("Xinerama version: %i.%i\n", major_version, minor_version); if (status && !XineramaIsActive(s->x11display)) { ALLEGRO_WARN("Xinerama is not active\n"); } else { ALLEGRO_INFO("Xinerama is active\n"); s->xinerama_available = 1; } } else { ALLEGRO_WARN("Xinerama extension is not available.\n"); } _al_mutex_unlock(&s->lock); }
static Bool TopologyCanSet(void) { ResolutionInfoX11Type *resInfoX = &resolutionInfoX11; /** * Note: For some strange reason, an early call to XineramaQueryVersion in * in this function stops vmtoolsd from deadlocking and freezing the X * display. Might be a call to XGrabServer() in and X library init * function that is called when we've already grabbed the server.... */ #ifdef NO_MULTIMON resInfoX->canUseVMwareCtrlTopologySet = FALSE; return FALSE; #else int major; int minor; if (resInfoX->canUseVMwareCtrl && XineramaQueryVersion(resInfoX->display, &major, &minor)) { /* * We need both a new enough VMWARE_CTRL and Xinerama for this to work. */ resInfoX->canUseVMwareCtrlTopologySet = (major > 0) || (major == 0 && minor >= 2); } else { resInfoX->canUseVMwareCtrlTopologySet = FALSE; } return resInfoX->canUseVMwareCtrlTopologySet || (resInfoX->canUseRandR12 && resInfoX->canUseVMwareCtrl); #endif }
void init_xinerama(void) { int evbase, errbase, major, minor; rp_have_xinerama = 0; #ifdef XINERAMA if (xine_screens) XFree(xine_screens); if (!XineramaQueryExtension(dpy, &evbase, &errbase)) { return; } if (!XineramaQueryVersion(dpy, &major, &minor) != Success) { return; } if (major != 1) { fprintf (stderr, "Warning: Xinerama version %d.%d not supported\n", major, minor); return; } if (!XineramaIsActive(dpy)) { return; } xine_screens = XineramaQueryScreens(dpy, &xine_screen_count); if ((xine_screens == NULL) || (xine_screen_count < 2)) { return; } rp_have_xinerama = 1; #endif }
int_fast32_t xinerama_is_active(Display *dpy) { int minor, major; if (!dpy) return 0; if (!XineramaQueryVersion(dpy, &minor, &major)) return 0; if (!XineramaIsActive(dpy)) return 0; return 1; }
static XineramaScreenInfo *x11_query_screens(Display *dpy, int *num_screens) { int major, minor; if (!XineramaQueryExtension(dpy, &major, &minor)) return NULL; XineramaQueryVersion(dpy, &major, &minor); RARCH_LOG("[X11]: Xinerama version: %d.%d.\n", major, minor); if (!XineramaIsActive(dpy)) return NULL; return XineramaQueryScreens(dpy, num_screens); }