aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/lib/Xinerama
diff options
context:
space:
mode:
authorOleksandr Shneyder <oleksandr.shneyder@obviously-nice.de>2015-02-10 19:23:16 +0100
committerMike Gabriel <mike.gabriel@das-netzwerkteam.de>2015-02-10 19:40:54 +0100
commitd26930d59838e2a8305c66b67aaa163db157920c (patch)
treed927b29830bcbe4e57b30656790b76584132c02f /nx-X11/lib/Xinerama
parent6aa18cc28c4adee20b7a6494c8acb430380c4c98 (diff)
downloadnx-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.c98
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;
}