aboutsummaryrefslogtreecommitdiff
path: root/debian/patches/0999_nxagent_unbrand-nxagent-brand-x2goagent.full.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches/0999_nxagent_unbrand-nxagent-brand-x2goagent.full.patch')
-rw-r--r--debian/patches/0999_nxagent_unbrand-nxagent-brand-x2goagent.full.patch367
1 files changed, 367 insertions, 0 deletions
diff --git a/debian/patches/0999_nxagent_unbrand-nxagent-brand-x2goagent.full.patch b/debian/patches/0999_nxagent_unbrand-nxagent-brand-x2goagent.full.patch
new file mode 100644
index 000000000..62c85cfb2
--- /dev/null
+++ b/debian/patches/0999_nxagent_unbrand-nxagent-brand-x2goagent.full.patch
@@ -0,0 +1,367 @@
+Description: Unbrand NX Agent Startup Screen / Brand X2Go Agent Startup Screen
+ When launched with NX Agent flavour, the startup screen gets unbranded by
+ this patch (the !M logo does not get shown).
+ .
+ When launched with X2Go Agent flavour, the startup screen gets branded
+ with the X2GO logo.
+Forwarded: not-needed
+Author: Oleksandr Shneyder <oleksandr.shneyder@obviously-nice.de>
+Last-Update: 2012-01-11
+--- a/nx-X11/programs/Xserver/hw/nxagent/Splash.c
++++ b/nx-X11/programs/Xserver/hw/nxagent/Splash.c
+@@ -35,6 +35,7 @@
+ #include "Windows.h"
+ #include "Atoms.h"
+ #include "Trap.h"
++#include "Init.h"
+
+ /*
+ * Set here the required log level.
+@@ -53,6 +54,7 @@
+ int nxagentLogoWhite;
+ int nxagentLogoRed;
+ int nxagentLogoBlack;
++int nxagentLogoGray;
+
+ void nxagentPaintLogo(Window win, GC gc, int scale, int width, int height);
+
+@@ -166,6 +168,15 @@
+ XPoint m[12];
+ int w, h, c, w2, h2;
+
++ /*
++ * Show only X2GO Logo when running as X2Go Agent
++ */
++ if(! nxagentX2go)
++ {
++ nxagentPixmapLogo = 0L;
++ return;
++ }
++
+ #ifdef DEBUG
+ fprintf(stderr, "nxagenShowtLogo: Got called.\n");
+ #endif
+@@ -218,75 +229,146 @@
+ XSetForeground(nxagentDisplay, gc, nxagentLogoRed);
+ XSetBackground(nxagentDisplay, gc, nxagentLogoWhite);
+
+- rect[0].x = w2-10*c; rect[0].y = h2-8*c;
+- rect[1].x = w2-10*c; rect[1].y = h2+8*c;
+- rect[2].x = w2+10*c; rect[2].y = h2+8*c;
+- rect[3].x = w2+10*c; rect[3].y = h2-8*c;
++ /*
++ * Draw X2GO Logo
++ */
+
++ /*
++ * Begin 'X'.
++ */
++
++ XSetForeground(nxagentDisplay, gc, nxagentLogoGray);
++ XSetBackground(nxagentDisplay, gc, nxagentLogoWhite);
++ rect[0].x = w2-7*c; rect[0].y = h2-5*c;
++ rect[1].x = w2-8*c; rect[1].y = h2-5*c;
++ rect[2].x = w2-4*c; rect[2].y = h2+3*c;
++ rect[3].x = w2-3*c; rect[3].y = h2+3*c;
+ XFillPolygon(nxagentDisplay, nxagentPixmapLogo, gc, rect, 4, Convex, CoordModeOrigin);
+
+- #ifdef NXAGENT_LOGO_DEBUG
+- fprintf(stderr, "filled red rect\n");
+- #endif
++ rect[0].x = w2-4*c; rect[0].y = h2-5*c;
++ rect[1].x = w2-3*c; rect[1].y = h2-5*c;
++ rect[2].x = w2-7*c; rect[2].y = h2+3*c;
++ rect[3].x = w2-8*c; rect[3].y = h2+3*c;
++ XFillPolygon(nxagentDisplay, nxagentPixmapLogo, gc, rect, 4, Convex, CoordModeOrigin);
+
+- rect[0].x = w2-9*c; rect[0].y = h2-7*c;
+- rect[1].x = w2-9*c; rect[1].y = h2+7*c;
+- rect[2].x = w2+9*c; rect[2].y = h2+7*c;
+- rect[3].x = w2+9*c; rect[3].y = h2-7*c;
++ /*
++ * End 'X'.
++ */
+
+- XSetForeground(nxagentDisplay, gc, nxagentLogoWhite);
+- XSetBackground(nxagentDisplay, gc, nxagentLogoRed);
++ /*
++ * Start '2'.
++ */
++
++ rect[0].x = w2-2*c; rect[0].y = h2-5*c;
++ rect[1].x = w2-1*c; rect[1].y = h2-5*c;
++ rect[2].x = w2-1*c; rect[2].y = h2-3*c;
++ rect[3].x = w2-2*c; rect[3].y = h2-3*c;
++ XFillPolygon(nxagentDisplay, nxagentPixmapLogo, gc, rect, 4, Convex, CoordModeOrigin);
++
++ rect[0].x = w2-2*c; rect[0].y = h2-5*c;
++ rect[1].x = w2+2*c; rect[1].y = h2-5*c;
++ rect[2].x = w2+2*c; rect[2].y = h2-4*c;
++ rect[3].x = w2-2*c; rect[3].y = h2-4*c;
++ XFillPolygon(nxagentDisplay, nxagentPixmapLogo, gc, rect, 4, Convex, CoordModeOrigin);
+
++ rect[0].x = w2+1*c; rect[0].y = h2-5*c;
++ rect[1].x = w2+2*c; rect[1].y = h2-5*c;
++ rect[2].x = w2+2*c; rect[2].y = h2-2*c;
++ rect[3].x = w2+1*c; rect[3].y = h2-2*c;
+ XFillPolygon(nxagentDisplay, nxagentPixmapLogo, gc, rect, 4, Convex, CoordModeOrigin);
+
++ rect[0].x = w2+2*c; rect[0].y = h2-2*c;
++ rect[1].x = w2+1*c; rect[1].y = h2-2*c;
++ rect[2].x = w2-2*c; rect[2].y = h2+2*c;
++ rect[3].x = w2-1*c; rect[3].y = h2+2*c;
++ XFillPolygon(nxagentDisplay, nxagentPixmapLogo, gc, rect, 4, Convex, CoordModeOrigin);
++
++
++ rect[0].x = w2-2*c; rect[0].y = h2+2*c;
++ rect[1].x = w2+2*c; rect[1].y = h2+2*c;
++ rect[2].x = w2+2*c; rect[2].y = h2+3*c;
++ rect[3].x = w2-2*c; rect[3].y = h2+3*c;
++ XFillPolygon(nxagentDisplay, nxagentPixmapLogo, gc, rect, 4, Convex, CoordModeOrigin);
+ /*
+- * Begin 'M'.
++ * End '2'.
+ */
+
+- m[0].x = w2-3*c; m[0].y = h2-5*c;
+- m[1].x = w2+7*c; m[1].y = h2-5*c;
+- m[2].x = w2+7*c; m[2].y = h2+5*c;
+- m[3].x = w2+5*c; m[3].y = h2+5*c;
+- m[4].x = w2+5*c; m[4].y = h2-3*c;
+- m[5].x = w2+3*c; m[5].y = h2-3*c;
+- m[6].x = w2+3*c; m[6].y = h2+5*c;
+- m[7].x = w2+1*c; m[7].y = h2+5*c;
+- m[8].x = w2+1*c; m[8].y = h2-3*c;
+- m[9].x = w2-1*c; m[9].y = h2-3*c;
+- m[10].x = w2-1*c; m[10].y = h2+5*c;
+- m[11].x = w2-3*c; m[11].y = h2+5*c;
++ /*
++ * Start 'G'.
++ */
+
+- XSetForeground(nxagentDisplay, gc, nxagentLogoRed);
+- XSetBackground(nxagentDisplay, gc, nxagentLogoWhite);
++ rect[0].x = w2+3*c; rect[0].y = h2-5*c;
++ rect[1].x = w2+7*c; rect[1].y = h2-5*c;
++ rect[2].x = w2+7*c; rect[2].y = h2-4*c;
++ rect[3].x = w2+3*c; rect[3].y = h2-4*c;
++ XFillPolygon(nxagentDisplay, nxagentPixmapLogo, gc, rect, 4, Convex, CoordModeOrigin);
+
+- XFillPolygon(nxagentDisplay, nxagentPixmapLogo, gc, m, 12, Nonconvex, CoordModeOrigin);
++ rect[0].x = w2+3*c; rect[0].y = h2-5*c;
++ rect[1].x = w2+4*c; rect[1].y = h2-5*c;
++ rect[2].x = w2+4*c; rect[2].y = h2+3*c;
++ rect[3].x = w2+3*c; rect[3].y = h2+3*c;
++ XFillPolygon(nxagentDisplay, nxagentPixmapLogo, gc, rect, 4, Convex, CoordModeOrigin);
+
++ rect[0].x = w2+3*c; rect[0].y = h2+2*c;
++ rect[1].x = w2+7*c; rect[1].y = h2+2*c;
++ rect[2].x = w2+7*c; rect[2].y = h2+3*c;
++ rect[3].x = w2+3*c; rect[3].y = h2+3*c;
++ XFillPolygon(nxagentDisplay, nxagentPixmapLogo, gc, rect, 4, Convex, CoordModeOrigin);
++
++ rect[0].x = w2+6*c; rect[0].y = h2-5*c;
++ rect[1].x = w2+7*c; rect[1].y = h2-5*c;
++ rect[2].x = w2+7*c; rect[2].y = h2-3*c;
++ rect[3].x = w2+6*c; rect[3].y = h2-3*c;
++ XFillPolygon(nxagentDisplay, nxagentPixmapLogo, gc, rect, 4, Convex, CoordModeOrigin);
++
++ rect[0].x = w2+6*c; rect[0].y = h2-0*c;
++ rect[1].x = w2+7*c; rect[1].y = h2-0*c;
++ rect[2].x = w2+7*c; rect[2].y = h2+3*c;
++ rect[3].x = w2+6*c; rect[3].y = h2+3*c;
++ XFillPolygon(nxagentDisplay, nxagentPixmapLogo, gc, rect, 4, Convex, CoordModeOrigin);
++
++ rect[0].x = w2+5*c; rect[0].y = h2-1*c;
++ rect[1].x = w2+7*c; rect[1].y = h2-1*c;
++ rect[2].x = w2+7*c; rect[2].y = h2+0*c;
++ rect[3].x = w2+5*c; rect[3].y = h2+0*c;
++ XFillPolygon(nxagentDisplay, nxagentPixmapLogo, gc, rect, 4, Convex, CoordModeOrigin);
+ /*
+- * End 'M'.
++ * End 'G'.
+ */
+
+ /*
+- * Begin '!'.
++ * Start 'O'.
+ */
+
+- rect[0].x = w2-7*c; rect[0].y = h2-5*c;
+- rect[1].x = w2-5*c; rect[1].y = h2-5*c;
+- rect[2].x = w2-5*c; rect[2].y = h2+2*c;
+- rect[3].x = w2-7*c; rect[3].y = h2+2*c;
++ rect[0].x = w2+8*c; rect[0].y = h2-5*c;
++ rect[1].x = w2+12*c; rect[1].y = h2-5*c;
++ rect[2].x = w2+12*c; rect[2].y = h2-4*c;
++ rect[3].x = w2+8*c; rect[3].y = h2-4*c;
++ XFillPolygon(nxagentDisplay, nxagentPixmapLogo, gc, rect, 4, Convex, CoordModeOrigin);
+
++ rect[0].x = w2+8*c; rect[0].y = h2+3*c;
++ rect[1].x = w2+12*c; rect[1].y = h2+3*c;
++ rect[2].x = w2+12*c; rect[2].y = h2+2*c;
++ rect[3].x = w2+8*c; rect[3].y = h2+2*c;
+ XFillPolygon(nxagentDisplay, nxagentPixmapLogo, gc, rect, 4, Convex, CoordModeOrigin);
+
+- rect[0].x = w2-7*c; rect[0].y = h2+3*c;
+- rect[1].x = w2-5*c; rect[1].y = h2+3*c;
+- rect[2].x = w2-5*c; rect[2].y = h2+5*c;
+- rect[3].x = w2-7*c; rect[3].y = h2+5*c;
++ rect[0].x = w2+8*c; rect[0].y = h2-5*c;
++ rect[1].x = w2+9*c; rect[1].y = h2-5*c;
++ rect[2].x = w2+9*c; rect[2].y = h2+3*c;
++ rect[3].x = w2+8*c; rect[3].y = h2+3*c;
++ XFillPolygon(nxagentDisplay, nxagentPixmapLogo, gc, rect, 4, Convex, CoordModeOrigin);
+
++ rect[0].x = w2+11*c; rect[0].y = h2-5*c;
++ rect[1].x = w2+12*c; rect[1].y = h2-5*c;
++ rect[2].x = w2+12*c; rect[2].y = h2+3*c;
++ rect[3].x = w2+11*c; rect[3].y = h2+3*c;
+ XFillPolygon(nxagentDisplay, nxagentPixmapLogo, gc, rect, 4, Convex, CoordModeOrigin);
+
+ /*
+- * End 'M'.
++ * End 'O'.
+ */
+
++
+ XSetWindowBackgroundPixmap(nxagentDisplay, win, nxagentPixmapLogo);
+
+ #ifdef NXAGENT_LOGO_DEBUG
+--- a/nx-X11/programs/Xserver/hw/nxagent/Display.c
++++ b/nx-X11/programs/Xserver/hw/nxagent/Display.c
+@@ -1430,22 +1430,10 @@
+ g = pV.green_mask;
+ b = pV.blue_mask;
+
+- if (!pV.red_mask || !pV.green_mask || !pV.blue_mask)
+- {
+- nxagentLogoBlack = 0x000000;
+- nxagentLogoRed = 0xff0000;
+- nxagentLogoWhite = 0xffffff;
+- }
+- else
+- {
+- for (or=0, off=0x800000; (r&(off>>or)) == 0; or++);
+- for (og=0, off=0x800000; (g&(off>>og)) == 0; og++);
+- for (ob=0, off=0x800000; (b&(off>>ob)) == 0; ob++);
+-
+- nxagentLogoRed = nxagentLogoColor(0xff0000);
+- nxagentLogoBlack = nxagentLogoColor(0x000000);
+- nxagentLogoWhite = 0xffffff;
+- }
++ nxagentLogoBlack = 0x000000;
++ nxagentLogoRed = 0xff0000;
++ nxagentLogoWhite = 0xffffff;
++ nxagentLogoGray = 0x222222;
+
+ #ifdef WATCH
+
+@@ -2696,22 +2684,10 @@
+ g = pV.green_mask;
+ b = pV.blue_mask;
+
+- if (!pV.red_mask || !pV.green_mask || !pV.blue_mask)
+- {
+- nxagentLogoBlack = 0x000000;
+- nxagentLogoRed = 0xff0000;
+- nxagentLogoWhite = 0xffffff;
+- }
+- else
+- {
+- for (or=0, off=0x800000; (r&(off>>or)) == 0; or++);
+- for (og=0, off=0x800000; (g&(off>>og)) == 0; og++);
+- for (ob=0, off=0x800000; (b&(off>>ob)) == 0; ob++);
+-
+- nxagentLogoRed = nxagentLogoColor(0xff0000);
+- nxagentLogoBlack = nxagentLogoColor(0x000000);
+- nxagentLogoWhite = 0xffffff;
+- }
++ nxagentLogoBlack = 0x000000;
++ nxagentLogoRed = 0xff0000;
++ nxagentLogoWhite = 0xffffff;
++ nxagentLogoGray = 0x222222;
+
+ useXpmIcon = nxagentMakeIcon(nxagentDisplay, &nxagentIconPixmap, &nxagentIconShape);
+
+--- a/nx-X11/programs/Xserver/hw/nxagent/Splash.h
++++ b/nx-X11/programs/Xserver/hw/nxagent/Splash.h
+@@ -33,6 +33,7 @@
+ extern int nxagentLogoWhite;
+ extern int nxagentLogoRed;
+ extern int nxagentLogoBlack;
++extern int nxagentLogoGray;
+
+ extern Window nxagentSplashWindow;
+
+--- a/nx-X11/programs/Xserver/os/oscolor.c
++++ b/nx-X11/programs/Xserver/os/oscolor.c
+@@ -53,7 +53,19 @@
+ #include <sys/stat.h>
+ #include <unistd.h>
+
+-static char* nxAltRgbPaths[] = {"/etc/nxagent/rgb", "/usr/share/nx/rgb", "/usr/local/share/nx/rgb", "/usr/NX/share/rgb", "/usr/share/X11/rgb", "/etc/X11/rgb"};
++/* FIXME: we need more intelligent code (like provided by the nxagentX2go
++ * var in hw/nxagent/Init.h) to detect our current runtime mode (running
++ * as x2goagent, running as nxagent)
++ */
++static char* nxAltRgbPaths[] = {"/etc/x2go/rgb", \
++ "/usr/share/x2go/rgb", \
++ "/usr/local/share/x2go/rgb", \
++ "/etc/nxagent/rgb", \
++ "/usr/share/nx/rgb", \
++ "/usr/local/share/nx/rgb", \
++ "/usr/NX/share/rgb", \
++ "/usr/share/X11/rgb", \
++ "/etc/X11/rgb"};
+ static char _NXRgbPath[1024];
+
+ #endif
+--- a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
++++ b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
+@@ -62,6 +62,7 @@
+
+ #include "globals.h"
+ #include "property.h"
++#include "Init.h"
+
+ #include <X11/extensions/XKB.h>
+
+@@ -138,8 +139,11 @@
+ #ifndef XKB_ALTERNATE_BASE_DIRECTORY
+ #define XKB_ALTERNATE_BASE_DIRECTORY "/usr/X11R6/lib/X11/xkb"
+ #endif
+-#ifndef XKB_CONFIG_FILE
+-#define XKB_CONFIG_FILE "/etc/nxagent/nxagent.keyboard"
++#ifndef XKB_CONFIG_FILE_NX
++#define XKB_CONFIG_FILE_NX "/etc/nxagent/nxagent.keyboard"
++#endif
++#ifndef XKB_CONFIG_FILE_X2GO
++#define XKB_CONFIG_FILE_X2GO "/etc/x2go/x2goagent.keyboard"
+ #endif
+ #ifndef XKB_DFLT_RULES_FILE
+ #define XKB_DFLT_RULES_FILE "xfree86"
+@@ -988,7 +992,10 @@
+
+ XkbGetControls(nxagentDisplay, XkbAllControlsMask, xkb);
+
+- nxagentXkbConfigFilePathSize = strlen(XKB_CONFIG_FILE);
++ if (nxagentX2go)
++ nxagentXkbConfigFilePathSize = strlen(XKB_CONFIG_FILE_X2GO);
++ else
++ nxagentXkbConfigFilePathSize = strlen(XKB_CONFIG_FILE_NX);
+
+ nxagentXkbConfigFilePath = malloc((nxagentXkbConfigFilePathSize + 1) * sizeof(char));
+
+@@ -997,7 +1004,10 @@
+ FatalError("nxagentKeyboardProc: malloc failed.");
+ }
+
+- strcpy(nxagentXkbConfigFilePath, XKB_CONFIG_FILE);
++ if (nxagentX2go)
++ nxagentXkbConfigFilePathSize = strlen(XKB_CONFIG_FILE_X2GO);
++ else
++ nxagentXkbConfigFilePathSize = strlen(XKB_CONFIG_FILE_NX);
+
+ #ifdef TEST
+ fprintf(stderr, "nxagentKeyboardProc: nxagentXkbConfigFilePath [%s].\n",