Status XPanoramiXQueryVersion( Display *dpy, int *major_versionp, int *minor_versionp ) { XExtDisplayInfo *info = find_display (dpy); xPanoramiXQueryVersionReply rep; register xPanoramiXQueryVersionReq *req; PanoramiXCheckExtension (dpy, info, 0); LockDisplay (dpy); GetReq (PanoramiXQueryVersion, req); req->reqType = info->codes->major_opcode; req->panoramiXReqType = X_PanoramiXQueryVersion; req->clientMajor = PANORAMIX_MAJOR_VERSION; req->clientMinor = PANORAMIX_MINOR_VERSION; if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) { UnlockDisplay (dpy); SyncHandle (); return 0; } *major_versionp = rep.majorVersion; *minor_versionp = rep.minorVersion; UnlockDisplay (dpy); SyncHandle (); return 1; }
Status XPanoramiXGetScreenCount ( Display *dpy, Drawable drawable, XPanoramiXInfo *panoramiX_info ) { XExtDisplayInfo *info = find_display (dpy); xPanoramiXGetScreenCountReply rep; register xPanoramiXGetScreenCountReq *req; PanoramiXCheckExtension (dpy, info, 0); LockDisplay (dpy); GetReq (PanoramiXGetScreenCount, req); req->reqType = info->codes->major_opcode; req->panoramiXReqType = X_PanoramiXGetScreenCount; req->window = drawable; if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) { UnlockDisplay (dpy); SyncHandle (); return 0; } UnlockDisplay (dpy); SyncHandle (); panoramiX_info->window = rep.window; panoramiX_info->ScreenCount = rep.ScreenCount; return 1; }
Status XPanoramiXGetScreenSize ( Display *dpy, Drawable drawable, int screen_num, XPanoramiXInfo *panoramiX_info ) { XExtDisplayInfo *info = find_display (dpy); xPanoramiXGetScreenSizeReply rep; register xPanoramiXGetScreenSizeReq *req; PanoramiXCheckExtension (dpy, info, 0); LockDisplay (dpy); GetReq (PanoramiXGetScreenSize, req); req->reqType = info->codes->major_opcode; req->panoramiXReqType = X_PanoramiXGetScreenSize; req->window = drawable; req->screen = screen_num; /* need to define */ if (!_XReply (dpy, (xReply *) &rep, 0, xTrue)) { UnlockDisplay (dpy); SyncHandle (); return 0; } UnlockDisplay (dpy); SyncHandle (); panoramiX_info->window = rep.window; panoramiX_info->screen = rep.screen; panoramiX_info->width = rep.width; panoramiX_info->height = rep.height; return 1; }
XineramaScreenInfo * XineramaQueryScreens( Display *dpy, int *number ) { XExtDisplayInfo *info = find_display (dpy); xXineramaQueryScreensReply rep; xXineramaQueryScreensReq *req; XineramaScreenInfo *scrnInfo = NULL; PanoramiXCheckExtension (dpy, info, NULL); if (NULL != (scrnInfo = XineramaGetFake(number))) { return scrnInfo; } LockDisplay (dpy); GetReq (XineramaQueryScreens, req); req->reqType = info->codes->major_opcode; req->panoramiXReqType = X_XineramaQueryScreens; if (!_XReply (dpy, (xReply *) &rep, 0, xFalse)) { UnlockDisplay (dpy); SyncHandle (); return NULL; } if(rep.number) { if((scrnInfo = Xmalloc(sizeof(XineramaScreenInfo) * rep.number))) { xXineramaScreenInfo scratch; int i; for(i = 0; i < rep.number; i++) { _XRead(dpy, (char*)(&scratch), sz_XineramaScreenInfo); scrnInfo[i].screen_number = i; scrnInfo[i].x_org = scratch.x_org; scrnInfo[i].y_org = scratch.y_org; scrnInfo[i].width = scratch.width; scrnInfo[i].height = scratch.height; } *number = rep.number; } else _XEatData(dpy, rep.length << 2); } else { *number = 0; } UnlockDisplay (dpy); SyncHandle (); return scrnInfo; }