This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch 3.6.x in repository nx-libs. commit d26930d59838e2a8305c66b67aaa163db157920c Author: Oleksandr Shneyder <oleksandr.shneyder@obviously-nice.de> Date: Tue Feb 10 19:23:16 2015 +0100 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. --- .../patches/202_nx-X11_enable-xinerama.full.patch | 292 -------------------- debian/patches/series | 1 - nx-X11/config/cf/X11.tmpl | 2 +- nx-X11/config/cf/host.def | 2 +- nx-X11/lib/Xinerama/Xinerama.c | 98 +++++-- nx-X11/programs/Xserver/Imakefile | 2 +- nx-X11/programs/Xserver/Xext/panoramiX.c | 9 - nx-X11/programs/Xserver/Xext/panoramiX.h | 2 +- nx-X11/programs/Xserver/hw/nxagent/Imakefile | 2 +- nx-X11/programs/Xserver/hw/nxagent/X/NXxvdisp.c | 30 +- 10 files changed, 93 insertions(+), 347 deletions(-) diff --git a/debian/patches/202_nx-X11_enable-xinerama.full.patch b/debian/patches/202_nx-X11_enable-xinerama.full.patch deleted file mode 100644 index 6845ec5..0000000 --- a/debian/patches/202_nx-X11_enable-xinerama.full.patch +++ /dev/null @@ -1,292 +0,0 @@ -Description: Enable Xinerama support for NX - 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. -Forwarded: pending -Author: Oleksandr Shneyder <oleksandr.shneyder@obviously-nice.de> -Last-Update: 2012-01-13 ---- a/nx-X11/config/cf/host.def -+++ b/nx-X11/config/cf/host.def -@@ -686,7 +686,7 @@ - * - #define BuildXinerama NO - */ --#define BuildXinerama NO -+#define BuildXinerama YES - - /* - * If you don't want to build support for the GLX extension, uncomment this. ---- a/nx-X11/config/cf/X11.tmpl -+++ b/nx-X11/config/cf/X11.tmpl -@@ -456,7 +456,7 @@ - #define BuildXinerama NO - #endif - #ifndef BuildXineramaLibrary --#define BuildXineramaLibrary (BuildXinerama && !BuildServersOnly) -+#define BuildXineramaLibrary (BuildXinerama) - #endif - #ifndef BuildDmxDevelTools - #define BuildDmxDevelTools NO ---- a/nx-X11/lib/Xinerama/Xinerama.c -+++ b/nx-X11/lib/Xinerama/Xinerama.c -@@ -34,7 +34,7 @@ - #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 @@ - 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 @@ - return rep.state; - } - --#include <stdio.h> - - XineramaScreenInfo * - XineramaQueryScreens( -@@ -279,39 +288,72 @@ - 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; - } - ---- a/nx-X11/programs/Xserver/hw/nxagent/Imakefile -+++ b/nx-X11/programs/Xserver/hw/nxagent/Imakefile -@@ -206,7 +206,7 @@ - -UNX_DEBUG_INPUT \ - -DRANDR_10_INTERFACE \ - -DRANDR_12_INTERFACE \ -- -UPANORAMIX \ -+ -DPANORAMIX \ - -UDEBUG_TREE - - all:: $(OBJS) ---- a/nx-X11/programs/Xserver/hw/nxagent/X/NXxvdisp.c -+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXxvdisp.c -@@ -275,17 +275,19 @@ - case xv_PutVideo: - #ifdef PANORAMIX - if(!noPanoramiXExtension) -- result = (XineramaXvPutVideo(client)); break; -+ result = (XineramaXvPutVideo(client)); - else - #endif -- result = (ProcXvPutVideo(client)); break; -+ result = (ProcXvPutVideo(client)); -+ break; - case xv_PutStill: - #ifdef PANORAMIX - if(!noPanoramiXExtension) -- result = (XineramaXvPutStill(client)); break -+ result = (XineramaXvPutStill(client)); - else - #endif -- result = (ProcXvPutStill(client)); break; -+ result = (ProcXvPutStill(client)); -+ break; - case xv_GetVideo: result = (ProcXvGetVideo(client)); break; - case xv_GetStill: result = (ProcXvGetStill(client)); break; - case xv_GrabPort: result = (ProcXvGrabPort(client)); break; -@@ -295,35 +297,39 @@ - case xv_StopVideo: - #ifdef PANORAMIX - if(!noPanoramiXExtension) -- result = (XineramaXvStopVideo(client)); break; -+ result = (XineramaXvStopVideo(client)); - else - #endif -- result = (ProcXvStopVideo(client)); break; -+ result = (ProcXvStopVideo(client)); -+ break; - case xv_SetPortAttribute: - #ifdef PANORAMIX - if(!noPanoramiXExtension) -- result = (XineramaXvSetPortAttribute(client)); break; -+ result = (XineramaXvSetPortAttribute(client)); - else - #endif -- result = (ProcXvSetPortAttribute(client)); break; -+ result = (ProcXvSetPortAttribute(client)); -+ break; - case xv_GetPortAttribute: result = (ProcXvGetPortAttribute(client)); break; - case xv_QueryBestSize: result = (ProcXvQueryBestSize(client)); break; - case xv_QueryPortAttributes: result = (ProcXvQueryPortAttributes(client)); break; - case xv_PutImage: - #ifdef PANORAMIX - if(!noPanoramiXExtension) -- result = (XineramaXvPutImage(client)); break; -+ result = (XineramaXvPutImage(client)); - else - #endif -- result = (ProcXvPutImage(client)); break; -+ result = (ProcXvPutImage(client)); -+ break; - #ifdef MITSHM - case xv_ShmPutImage: - #ifdef PANORAMIX - if(!noPanoramiXExtension) -- result = (XineramaXvShmPutImage(client)); break; -+ result = (XineramaXvShmPutImage(client)); - else - #endif -- result = (ProcXvShmPutImage(client)); break; -+ result = (ProcXvShmPutImage(client)); -+ break; - #endif - case xv_QueryImageAttributes: result = (ProcXvQueryImageAttributes(client)); break; - case xv_ListImageFormats: result = (ProcXvListImageFormats(client)); break; ---- a/nx-X11/programs/Xserver/Imakefile -+++ b/nx-X11/programs/Xserver/Imakefile -@@ -1021,7 +1021,7 @@ - #else - NXAGENTNXLIBS = -L ../../../nxcomp -L ../../../nxcompext -L ../../../nxcompshad \ - -lXcomp -lXcompext -lXcompshad -lXrender -lX11 -lXext -lXfixes \ -- -L../../../nx-X11/exports/lib -lXtst -lXdamage -lXrandr -lXcomposite -+ -L../../../nx-X11/exports/lib -lXtst -lXdamage -lXrandr -lXcomposite -lXinerama - #endif - - #endif ---- a/nx-X11/programs/Xserver/Xext/panoramiX.c -+++ b/nx-X11/programs/Xserver/Xext/panoramiX.c -@@ -1045,16 +1045,7 @@ - rep.type = X_Reply; - rep.length = 0; - rep.sequenceNumber = client->sequence; --#if 1 -- { -- /* The following hack fools clients into thinking that Xinerama -- * is disabled even though it is not. */ -- extern Bool PanoramiXExtensionDisabledHack; -- rep.state = !noPanoramiXExtension && !PanoramiXExtensionDisabledHack; -- } --#else - rep.state = !noPanoramiXExtension; --#endif - if (client->swapped) { - register int n; - swaps (&rep.sequenceNumber, n); ---- a/nx-X11/programs/Xserver/Xext/panoramiX.h -+++ b/nx-X11/programs/Xserver/Xext/panoramiX.h -@@ -44,7 +44,7 @@ - #define _PANORAMIX_H_ - - #include <X11/extensions/panoramiXext.h> --#include "gcstruct.h" -+/*#include "gcstruct.h"*/ - - - typedef struct _PanoramiXData { diff --git a/debian/patches/series b/debian/patches/series index d9b63cc..746c6ad 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -1,4 +1,3 @@ -202_nx-X11_enable-xinerama.full.patch 203_nxagent_disable-rootless-exit.full.patch 204_nxagent_repaint-solidpict.full.patch 205_nxagent_refresh-adsl.full.patch diff --git a/nx-X11/config/cf/X11.tmpl b/nx-X11/config/cf/X11.tmpl index c1c92ca..accba40 100644 --- a/nx-X11/config/cf/X11.tmpl +++ b/nx-X11/config/cf/X11.tmpl @@ -456,7 +456,7 @@ XORGRELSTRING = XorgManVersionString #define BuildXinerama NO #endif #ifndef BuildXineramaLibrary -#define BuildXineramaLibrary (BuildXinerama && !BuildServersOnly) +#define BuildXineramaLibrary (BuildXinerama) #endif #ifndef BuildDmxDevelTools #define BuildDmxDevelTools NO diff --git a/nx-X11/config/cf/host.def b/nx-X11/config/cf/host.def index e9f53c2..7d0511f 100644 --- a/nx-X11/config/cf/host.def +++ b/nx-X11/config/cf/host.def @@ -686,7 +686,7 @@ XCOMM $XFree86: xc/config/cf/xf86site.def,v 3.186 2003/06/25 18:06:22 eich Exp $ * #define BuildXinerama NO */ -#define BuildXinerama NO +#define BuildXinerama YES /* * If you don't want to build support for the GLX extension, uncomment this. diff --git a/nx-X11/lib/Xinerama/Xinerama.c b/nx-X11/lib/Xinerama/Xinerama.c index 43084b2..fd717dd 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; } diff --git a/nx-X11/programs/Xserver/Imakefile b/nx-X11/programs/Xserver/Imakefile index b01fc2e..8ecb338 100644 --- a/nx-X11/programs/Xserver/Imakefile +++ b/nx-X11/programs/Xserver/Imakefile @@ -1021,7 +1021,7 @@ NXAGENTNXLIBS = -L ../../../nxcomp -L ../../../nxcompext \ #else NXAGENTNXLIBS = -L ../../../nxcomp -L ../../../nxcompext -L ../../../nxcompshad \ -lXcomp -lXcompext -lXcompshad -lXrender -lX11 -lXext -lXfixes \ - -L../../../nx-X11/exports/lib -lXtst -lXdamage -lXrandr -lXcomposite + -L../../../nx-X11/exports/lib -lXtst -lXdamage -lXrandr -lXcomposite -lXinerama #endif #endif diff --git a/nx-X11/programs/Xserver/Xext/panoramiX.c b/nx-X11/programs/Xserver/Xext/panoramiX.c index 33faedc..a1a5b9f 100644 --- a/nx-X11/programs/Xserver/Xext/panoramiX.c +++ b/nx-X11/programs/Xserver/Xext/panoramiX.c @@ -1045,16 +1045,7 @@ ProcXineramaIsActive(ClientPtr client) rep.type = X_Reply; rep.length = 0; rep.sequenceNumber = client->sequence; -#if 1 - { - /* The following hack fools clients into thinking that Xinerama - * is disabled even though it is not. */ - extern Bool PanoramiXExtensionDisabledHack; - rep.state = !noPanoramiXExtension && !PanoramiXExtensionDisabledHack; - } -#else rep.state = !noPanoramiXExtension; -#endif if (client->swapped) { register int n; swaps (&rep.sequenceNumber, n); diff --git a/nx-X11/programs/Xserver/Xext/panoramiX.h b/nx-X11/programs/Xserver/Xext/panoramiX.h index 5fa4ed3..4178b98 100644 --- a/nx-X11/programs/Xserver/Xext/panoramiX.h +++ b/nx-X11/programs/Xserver/Xext/panoramiX.h @@ -44,7 +44,7 @@ Equipment Corporation. #define _PANORAMIX_H_ #include <X11/extensions/panoramiXext.h> -#include "gcstruct.h" +/*#include "gcstruct.h"*/ typedef struct _PanoramiXData { diff --git a/nx-X11/programs/Xserver/hw/nxagent/Imakefile b/nx-X11/programs/Xserver/hw/nxagent/Imakefile index 9657958..a8e1621 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/Imakefile +++ b/nx-X11/programs/Xserver/hw/nxagent/Imakefile @@ -206,7 +206,7 @@ DEFINES = -g $(OS_DEFINES) $(EXT_DEFINES) $(UPG_DEFINES) \ -UNX_DEBUG_INPUT \ -DRANDR_10_INTERFACE \ -DRANDR_12_INTERFACE \ - -UPANORAMIX \ + -DPANORAMIX \ -UDEBUG_TREE all:: $(OBJS) diff --git a/nx-X11/programs/Xserver/hw/nxagent/X/NXxvdisp.c b/nx-X11/programs/Xserver/hw/nxagent/X/NXxvdisp.c index f6dad31..cbb3f63 100644 --- a/nx-X11/programs/Xserver/hw/nxagent/X/NXxvdisp.c +++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXxvdisp.c @@ -275,17 +275,19 @@ ProcXvDispatch(ClientPtr client) case xv_PutVideo: #ifdef PANORAMIX if(!noPanoramiXExtension) - result = (XineramaXvPutVideo(client)); break; + result = (XineramaXvPutVideo(client)); else #endif - result = (ProcXvPutVideo(client)); break; + result = (ProcXvPutVideo(client)); + break; case xv_PutStill: #ifdef PANORAMIX if(!noPanoramiXExtension) - result = (XineramaXvPutStill(client)); break + result = (XineramaXvPutStill(client)); else #endif - result = (ProcXvPutStill(client)); break; + result = (ProcXvPutStill(client)); + break; case xv_GetVideo: result = (ProcXvGetVideo(client)); break; case xv_GetStill: result = (ProcXvGetStill(client)); break; case xv_GrabPort: result = (ProcXvGrabPort(client)); break; @@ -295,35 +297,39 @@ ProcXvDispatch(ClientPtr client) case xv_StopVideo: #ifdef PANORAMIX if(!noPanoramiXExtension) - result = (XineramaXvStopVideo(client)); break; + result = (XineramaXvStopVideo(client)); else #endif - result = (ProcXvStopVideo(client)); break; + result = (ProcXvStopVideo(client)); + break; case xv_SetPortAttribute: #ifdef PANORAMIX if(!noPanoramiXExtension) - result = (XineramaXvSetPortAttribute(client)); break; + result = (XineramaXvSetPortAttribute(client)); else #endif - result = (ProcXvSetPortAttribute(client)); break; + result = (ProcXvSetPortAttribute(client)); + break; case xv_GetPortAttribute: result = (ProcXvGetPortAttribute(client)); break; case xv_QueryBestSize: result = (ProcXvQueryBestSize(client)); break; case xv_QueryPortAttributes: result = (ProcXvQueryPortAttributes(client)); break; case xv_PutImage: #ifdef PANORAMIX if(!noPanoramiXExtension) - result = (XineramaXvPutImage(client)); break; + result = (XineramaXvPutImage(client)); else #endif - result = (ProcXvPutImage(client)); break; + result = (ProcXvPutImage(client)); + break; #ifdef MITSHM case xv_ShmPutImage: #ifdef PANORAMIX if(!noPanoramiXExtension) - result = (XineramaXvShmPutImage(client)); break; + result = (XineramaXvShmPutImage(client)); else #endif - result = (ProcXvShmPutImage(client)); break; + result = (ProcXvShmPutImage(client)); + break; #endif case xv_QueryImageAttributes: result = (ProcXvQueryImageAttributes(client)); break; case xv_ListImageFormats: result = (ProcXvListImageFormats(client)); break; -- Alioth's /srv/git/_hooks_/post-receive-email on /srv/git/code.x2go.org/nx-libs.git