diff options
-rw-r--r-- | debian/patches/202_nx-X11_enable-xinerama.full.patch | 292 | ||||
-rw-r--r-- | debian/patches/series | 1 | ||||
-rw-r--r-- | nx-X11/config/cf/X11.tmpl | 2 | ||||
-rw-r--r-- | nx-X11/config/cf/host.def | 2 | ||||
-rw-r--r-- | nx-X11/lib/Xinerama/Xinerama.c | 98 | ||||
-rw-r--r-- | nx-X11/programs/Xserver/Imakefile | 2 | ||||
-rw-r--r-- | nx-X11/programs/Xserver/Xext/panoramiX.c | 9 | ||||
-rw-r--r-- | nx-X11/programs/Xserver/Xext/panoramiX.h | 2 | ||||
-rw-r--r-- | nx-X11/programs/Xserver/hw/nxagent/Imakefile | 2 | ||||
-rw-r--r-- | 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 6845ec51e..000000000 --- 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 d9b63cce7..746c6ad43 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 c1c92ca10..accba403c 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 e9f53c2a9..7d0511f36 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 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; } diff --git a/nx-X11/programs/Xserver/Imakefile b/nx-X11/programs/Xserver/Imakefile index b01fc2e48..8ecb338b2 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 33faedc57..a1a5b9f1f 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 5fa4ed35c..4178b985f 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 96579583b..a8e162102 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 f6dad312a..cbb3f63e8 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; |