diff options
author | Oleksandr Shneyder <oleksandr.shneyder@obviously-nice.de> | 2015-02-10 19:23:16 +0100 |
---|---|---|
committer | Mike Gabriel <mike.gabriel@das-netzwerkteam.de> | 2015-02-10 19:40:54 +0100 |
commit | d26930d59838e2a8305c66b67aaa163db157920c (patch) | |
tree | d927b29830bcbe4e57b30656790b76584132c02f /nx-X11/lib/Xinerama | |
parent | 6aa18cc28c4adee20b7a6494c8acb430380c4c98 (diff) | |
download | nx-libs-d26930d59838e2a8305c66b67aaa163db157920c.tar.gz nx-libs-d26930d59838e2a8305c66b67aaa163db157920c.tar.bz2 nx-libs-d26930d59838e2a8305c66b67aaa163db157920c.zip |
Enable Xinerama support for NX (202_nx-X11_enable-xinerama.full.patch).
This patch adds Xinerama awareness to NX agent windows.
The advantage of Xinerama awareness is that an NX session window
will only maximize to the dimensions of the active physical
display.
Diffstat (limited to 'nx-X11/lib/Xinerama')
-rw-r--r-- | nx-X11/lib/Xinerama/Xinerama.c | 98 |
1 files changed, 70 insertions, 28 deletions
diff --git a/nx-X11/lib/Xinerama/Xinerama.c b/nx-X11/lib/Xinerama/Xinerama.c index 43084b213..fd717dd22 100644 --- a/nx-X11/lib/Xinerama/Xinerama.c +++ b/nx-X11/lib/Xinerama/Xinerama.c @@ -34,7 +34,7 @@ Equipment Corporation. #include <X11/extensions/panoramiXext.h> #include <X11/extensions/panoramiXproto.h> #include <X11/extensions/Xinerama.h> - +#include <stdio.h> static XExtensionInfo _panoramiX_ext_info_data; static XExtensionInfo *panoramiX_ext_info = &_panoramiX_ext_info_data; @@ -249,6 +249,16 @@ Bool XineramaIsActive(Display *dpy) xXineramaIsActiveReq *req; XExtDisplayInfo *info = find_display (dpy); + + FILE* fptr; + if((fptr=fopen(getenv("NX_XINERAMA_CONF"),"r"))!=NULL) { + fclose (fptr); + return True; + } + else { + return False; + } + if(!XextHasExtension(info)) return False; /* server doesn't even have the extension */ @@ -266,7 +276,6 @@ Bool XineramaIsActive(Display *dpy) return rep.state; } -#include <stdio.h> XineramaScreenInfo * XineramaQueryScreens( @@ -279,39 +288,72 @@ XineramaQueryScreens( xXineramaQueryScreensReq *req; XineramaScreenInfo *scrnInfo = NULL; - PanoramiXCheckExtension (dpy, info, 0); + int i; + int x,y,w,h; + FILE* fptr; + if((fptr=fopen(getenv("NX_XINERAMA_CONF"),"r"))==NULL) { + PanoramiXCheckExtension (dpy, info, 0); + 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); + } + } - 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; - } + } else { - *number = rep.number; - } else - _XEatData(dpy, rep.length << 2); + i=0; + while(!feof(fptr)) { + w=h=0; + fscanf(fptr,"%d %d %d %d",&x,&y,&w,&h); + if(w&&h) + i++; + } + rewind(fptr); + *number=i; + if((scrnInfo = Xmalloc(sizeof(XineramaScreenInfo) * i))) { + i=0; + while(!feof(fptr)){ + w=h=0; + fscanf(fptr,"%d %d %d %d",&x,&y,&w,&h); + if(w&&h){ + scrnInfo[i].screen_number=i; + scrnInfo[i].x_org=x; + scrnInfo[i].y_org=y; + scrnInfo[i].width=w; + scrnInfo[i].height=h; + i++; + } + } + } + fclose(fptr); } - UnlockDisplay (dpy); - SyncHandle (); return scrnInfo; } |