From 405bc8f259f230947e5fe8341f0bab8f0f88c678 Mon Sep 17 00:00:00 2001 From: Mike Gabriel Date: Wed, 11 Jan 2012 16:17:51 +0100 Subject: Add X2Go agent / NX agent flavouring via patch system: - 200_nxagent_check-binary-x2go-flavour.patch - 201_nxagent_set-x2go-icon-if-x2goagent-flavour.patch - 300_nxagent_set-wm-class.patch - 999_nxagent_unbrand-nxagent-brand-x2goagent.patch --- .../200_nxagent_check-binary-x2go-flavour.patch | 64 ++++ ...xagent_set-x2go-icon-if-x2goagent-flavour.patch | 220 ++++++++++++++ debian/patches/300_nxagent_set-wm-class.patch | 60 ++++ ...9_nxagent_unbrand-nxagent-brand-x2goagent.patch | 329 +++++++++++++++++++++ 4 files changed, 673 insertions(+) create mode 100644 debian/patches/200_nxagent_check-binary-x2go-flavour.patch create mode 100644 debian/patches/201_nxagent_set-x2go-icon-if-x2goagent-flavour.patch create mode 100644 debian/patches/300_nxagent_set-wm-class.patch create mode 100644 debian/patches/999_nxagent_unbrand-nxagent-brand-x2goagent.patch (limited to 'debian/patches') diff --git a/debian/patches/200_nxagent_check-binary-x2go-flavour.patch b/debian/patches/200_nxagent_check-binary-x2go-flavour.patch new file mode 100644 index 000000000..089b57022 --- /dev/null +++ b/debian/patches/200_nxagent_check-binary-x2go-flavour.patch @@ -0,0 +1,64 @@ +Description: Detect nxagent/x2goagent flavour + Whether the agent runs in X2Go or NX mode is decide by the + name of the binary that executes the code. + . + Binary name equal to nxagent -> (Free)NX flavour + Binary name equal to x2goagent -> X2Go flavour +Forwarded: not-needed +Author: Oleksandr Shneyder +Last-Update: 2012-01-11 +--- a/nx-X11/programs/Xserver/hw/nxagent/Init.c ++++ b/nx-X11/programs/Xserver/hw/nxagent/Init.c +@@ -178,6 +178,29 @@ + + int nxagentDoFullGeneration = 1; + ++ /* ++ * 1 if agent running as X2goAgent ++ * 0 if NX Agent ++ */ ++int nxagentX2go; ++ ++/* ++ * Checking if agent is x2go agent ++ */ ++ ++void checkX2goAgent() ++{ ++ extern const char *__progname; ++ if( strcasecmp(__progname,"x2goagent") == 0) ++ { ++ fprintf(stderr, "\nrunning as X2Go Agent\n"); ++ nxagentX2go=1; ++ } ++ else ++ nxagentX2go=0; ++} ++ ++ + /* + * Called at X server's initialization. + */ +@@ -194,6 +217,11 @@ + #endif + + /* ++ * Check if we running as X2Go Agent ++ */ ++ checkX2goAgent(); ++ ++ /* + * Print our pid and version information. + */ + +--- a/nx-X11/programs/Xserver/hw/nxagent/Init.h ++++ b/nx-X11/programs/Xserver/hw/nxagent/Init.h +@@ -37,6 +37,8 @@ + extern int nxagentBackingStore; + extern int nxagentSaveUnder; + ++extern int nxagentX2go; ++ + extern ServerGrabInfoRec nxagentGrabServerInfo; + + #endif /* __Init_H__ */ diff --git a/debian/patches/201_nxagent_set-x2go-icon-if-x2goagent-flavour.patch b/debian/patches/201_nxagent_set-x2go-icon-if-x2goagent-flavour.patch new file mode 100644 index 000000000..ff3861d6e --- /dev/null +++ b/debian/patches/201_nxagent_set-x2go-icon-if-x2goagent-flavour.patch @@ -0,0 +1,220 @@ +Description: X2Go icon when run with x2goagent flavour + Depending on the binary name of the agent either nxagent.xpm + or x2go.xpm is used as window icon. +Forwarded: not-needed +Author: Oleksandr Shneyder +Last-Update: 2012-01-11 +--- a/nx-X11/programs/Xserver/hw/nxagent/Display.c 2012-01-11 10:09:05.000000000 +0100 ++++ b/nx-X11/programs/Xserver/hw/nxagent/Display.c 2012-01-11 12:28:11.000000000 +0100 +@@ -77,6 +77,7 @@ is" without express or implied warranty. + #include "NXlib.h" + + #include NXAGENT_ICON_NAME ++#include X2GOAGENT_ICON_NAME + + /* + * Set here the required log level. +@@ -1918,12 +1919,29 @@ Bool nxagentMakeIcon(Display *display, P + Bool success = False; + XlibPixmap IconPixmap; + XlibPixmap IconShape; ++ char* agent_icon_name; ++ char* agentIconData; + +- snprintf(default_path, PATH_MAX-1, "/usr/NX/share/images/%s", NXAGENT_ICON_NAME); ++ /* ++ * selecting x2go icon when running as X2Go agent ++ */ ++ if(nxagentX2go) ++ { ++ agent_icon_name=X2GOAGENT_ICON_NAME; ++ agentIconData=x2goagentIconData; ++ } ++ else ++ { ++ agent_icon_name=NXAGENT_ICON_NAME; ++ agentIconData=nxagentIconData; ++ } ++ ++ ++ snprintf(default_path, PATH_MAX-1, "/usr/NX/share/images/%s", agent_icon_name); + + if ((icon_fp = fopen(default_path, "r")) == NULL) + { +- icon_fp = nxagentLookForIconFile(NXAGENT_ICON_NAME, "r", icon_path); ++ icon_fp = nxagentLookForIconFile(agent_icon_name, "r", icon_path); + + if (icon_fp != NULL) + { +@@ -1962,7 +1980,7 @@ Bool nxagentMakeIcon(Display *display, P + { + status = XpmCreatePixmapFromData(display, + DefaultRootWindow(display), +- nxagentIconData, ++ agentIconData, + &IconPixmap, + &IconShape, + NULL); +--- a/nx-X11/programs/Xserver/hw/nxagent/Icons.h 2012-01-11 10:09:05.000000000 +0100 ++++ b/nx-X11/programs/Xserver/hw/nxagent/Icons.h 2012-01-11 12:17:21.000000000 +0100 +@@ -24,6 +24,8 @@ + + #define NXAGENT_ICON_NAME "nxagent.xpm" + ++#define X2GOAGENT_ICON_NAME "x2go.xpm" ++ + #define NXAGENT_PLACEHOLDER_NAME "nxmissing.xpm" + + #endif /* __Icons_H__ */ +--- a/nx-X11/programs/Xserver/hw/nxagent/x2go.xpm 1970-01-01 01:00:00.000000000 +0100 ++++ b/nx-X11/programs/Xserver/hw/nxagent/x2go.xpm 2012-01-11 12:26:24.000000000 +0100 +@@ -0,0 +1,148 @@ ++/* XPM */ ++static char *x2goagentIconData[]={ ++"128 128 17 1", ++". c None", ++"m c #323232", ++"l c #323232", ++"f c #323232", ++"e c #323232", ++"o c #323232", ++"# c #323232", ++"h c #323232", ++"i c #323232", ++"n c #323232", ++"d c #323232", ++"a c #323232", ++"g c #323232", ++"j c #323232", ++"b c #323232", ++"k c #323232", ++"c c #323232", ++".....#abccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccbde.....", ++"...fbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccgf...", ++"..#ccccaheeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeijccckf..", ++".ecccgl..................................................................................................................ejcckf.", ++".bccd.....................................................................................................................mdccg.", ++"#cca.......................................................................................................................mjcce", ++"gckm........................................................................................................................eccd", ++"ccn..........................................................................................................................jcb", ++"cce..........................................................................................................................icc", ++"ccm..........................................................................................................................ecc", ++"cc...........................................................................................................................ecc", ++"cc...........................................................................................................................ecc", ++"cc...........................................................................................................................ecc", ++"cc...........................................................................................................................ecc", ++"cc............................................meeee..........................................................................ecc", ++"cc.........eeeeeeeeoiiiiiiiinggggggggjccccccccccccc....#ggggggggggggggggggggggggggggf.............ggggggggggggggggggggggf....ecc", ++"cc....meeeeoiiiiiiiinggggggggjccccccccccccccccccccc....icccccccccccccccccccccccccccce.............cccccccccccccccccccccce....ecc", ++"cc....................................meeeeeeeeoiii....icccccccccccccccccccccccccccce.............cccccccccccccccccccccce....ecc", ++"cc.......................................................menbccccccccccccccccccbhe..................logccccccccccccghe.......ecc", ++"cc...........................................................iccccccccccccccccdm.......................#cccccccccke..........ecc", ++"cc..............................................lee...........#cccccccccccccckm.........................jccccccckm...........ecc", ++"cc........feeeeeeeeoiiiiiiiiiaggggggggjcccccccccccc............icccccccccccccd..........................icccccccf............ecc", ++"cc....meeeeeoiiiiiiiinggggggggjcccccccccccccccccccciiiiii#m.....jcccccccccccci..........................icccccci.............ecc", ++"cc......................................eeeeeeeeeiiiiiiiiigl....eccccccccccccd..........................dcccccj..............ecc", ++"cc...............................................................dcccccccccccj..........................bccccce..............ecc", ++"cc...............................................................lccccccccccccl........................lccccca...............ecc", ++"cc.............................................meeeeeeee#iiiie....dccccccccccch........................icccccl...............ecc", ++"cc.........meeeeeeeeoiiiiiiiinggggggggjccccccccccccccccccccccb....ecccccccccccb........................bccccn................ecc", ++"cc....meeeeiiiiiiiiiaggggggggbcccccccccccccccccccccccccccccccc#....gccccccccccco......................#cccckm................ecc", ++"cc....................................meeeeeeeeeiiiiiiiiiaggggd....#cccccccccccg......................bcccci.................ecc", ++"cc..................................................................bcccccccccccf....................#cccckm.................ecc", ++"cc..................................................................hcccccccccccd...................mkcccci..................ecc", ++"cc............................................meeeeeeeeoiiiiiiiil...mkcccccccccccl..................icccckm..................ecc", ++"cc.........eeeeeeeeoiiiiiiiinggggggggjccccccccccccccccccccccccccn....dccccccccccci.................mkcccci...................ecc", ++"cc....meeeeeiiiiiiiiiaggggggggbccccccccccccccccccccccccccccccccckm...lccccccccccck.................icccckm...................ecc", ++"cc.....................................leeeeeeeeoiiiiiiiiigggggggo....accccccccccc#...............mkcccch....................ecc", ++"cc....................................................................ecccccccccccb...............iccccb.....................ecc", ++"cc.....................................................................jccccccccccce.............mkcccc#.....................ecc", ++"cc.............................................meeeeeeeeehiiiiiiii#....#ccccccccccca.............nccccb......................ecc", ++"cc........feeeeeeee#iiiiiiiiigggggggggkccccccccccccccccccccccccccccl....kcccccccccccl...........lccccc#......................ecc", ++"cc....meeeeeoiiiiiiiiigggggggggkcccccccccccccccccccccccccccccccccccd....icccccccccccd...........dccccb.......................ecc", ++"cc......................................leeeeeeeeoiiiiiiiingggggggga....mccccccccccckm.........lccccc#.......................ecc", ++"cc.......................................................................dccccccccccch.........dccccb........................ecc", ++"cc.......................................................................lcccccccccccb........lccccc#........................ecc", ++"cc.............................................meeeeeeeeoiiiiiiiingggo....gccccccccccc#.......dccccg.........................ecc", ++"cc.........meeeeeeeeoiiiiiiiinggggggggjccccccccccccccccccccccccccccccg....occcccccccccg......lccccce.........................ecc", ++"cc....meeeeiiiiiiiiiaggggggggbcccccccccccccccccccccccccccccccccccccccce....bccccccccccce.....gccccg..........................ecc", ++"cc....................................meeeeeeeeeiiiiiiiiigggggggggkcccd....#cccccccccccd....eccccce..........................ecc", ++"cc.........................................................................mkcccccccccccl...gccccg...........................ecc", ++"cc..........................................................................nccccccccccci..eccccce...........................ecc", ++"cc............................................meeeeeeeeoiiiiiiiingggggggm...lccccccccccckm.gccccg............................ecc", ++"cc.........eeeeeeeeoiiiiiiiinggggggggjcccccccccccccccccccccccccccccccccc#....dccccccccccc#eccccce............................ecc", ++"cc....meeeeeiiiiiiiiiaggggggggkcccccccccccccccccccccccccccccccccccccccccb....ecccccccccccbgccccg.............................ecc", ++"cc.....................................leeeeeeeeoiiiiiiiiigggggggggkccccco....gccccccccccccccccl.............................ecc", ++"cc............................................................................#cccccccccccccccd..............................ecc", ++"cc.............................................................................bccccccccccccccl..............................ecc", ++"cc.............................................leeeeeeeeeiiiiiiiiiagggggggi....icccccccccccccd...............................ecc", ++"cc........feeeeeeee#iiiiiiiingggggggggkccccccccccccccccccccccccccccccccccckm...mkccccccccccccl...............................ecc", ++"cc....meeeeeoiiiiiiiiigggggggggkccccccccccccccccccccccccccccccccccccccccccci....dccccccccccca................................ecc", ++"cc......................................leeeeeeeeoiiiiiiiiigggggggggccccccck....lccccccccccckm...............................ecc", ++"cc...............................................................................accccccccccc#...............................ecc", ++"cc...............................................................................ecccccccccccb...............................ecc", ++"cc............................................leeeeeeeeeiiiiiiiiiaggggggggbcce....bccccccccccce..............................ecc", ++"cc.......feeeeeeee#iiiiiiiiigggggggggkcccccccccccccccccccccccccccccccccccccccd....#cccccccccccg..............................ecc", ++"cc....meeeeeeoiiiiiiiingggggggggccccccccccccccccccccccccccccccccccccccccccccccl....kcccccccccccl.............................ecc", ++"cc.......................................feeeeeeeehiiiiiiiidggggggggbccccccccci....ncccccccccccd.............................ecc", ++"cc...........................................................................mm....bccccccccccccm............................ecc", ++"cc................................................................................#ccccccccccccci............................ecc", ++"cc..........................................leeeeeeee#iiiiiiiidggggggggbcccccl....bccccccccccccck............................ecc", ++"cc......feeeeeeeehiiiiiiiiaggggggggkccccccccccccccccccccccccccccccccccccccccd....#ccccccccccccccc#...........................ecc", ++"cc....meeeeeee#iiiiiiiidggggggggjcccccccccccccccccccccccccccccccccccccccccccl....bcccccccccccccccb...........................ecc", ++"cc.......................................meeeeeeeeeiiiiiiiiigggggggggkcccccd....#cccccbccccccccccce..........................ecc", ++"cc..............................................................................bccccdhcccccccccccg..........................ecc", ++"cc.............................................................................#ccccclmkcccccccccccl.........................ecc", ++"cc..........................................meeeeeeeeeiiiiiiiiiaggggggggbkm....bccccd..ncccccccccccd.........................ecc", ++"cc.....leeeeeeeeoiiiiiiiiigggggggggkccccccccccccccccccccccccccccccccccccci....hcccckl..lccccccccccccm........................ecc", ++"cc....meeeeeeeehiiiiiiiidggggggggbcccccccccccccccccccccccccccccccccccccckm...mkcccci....dccccccccccci........................ecc", ++"cc........................................leeeeeeee#iiiiiiiinggggggggjcci....icccckm....eccccccccccck........................ecc", ++"cc..........................................................................mkcccci......gccccccccccc#.......................ecc", ++"cc..........................................................................icccckm......#cccccccccccb.......................ecc", ++"cc.........................................leeeeeeeeoiiiiiiiiigggggggga....mkcccci........bccccccccccce......................ecc", ++"cc....meeeeeeeeoiiiiiiiiigggggggggkccccccccccccccccccccccccccccccccccci....icccckm........hcccccccccccg......................ecc", ++"cc.....feeeeeeeehiiiiiiiiaggggggggkcccccccccccccccccccccccccccccccccckm...mkcccci.........mkcccccccccccl.....................ecc", ++"cc.........................................feeeeeeeehiiiiiiiiagggggggh....icccckm..........icccccccccccd.....................ecc", ++"cc.......................................................................mkcccci...........lccccccccccccm....................ecc", ++"cc.......................................................................icccckm............dccccccccccci....................ecc", ++"cc...........................................eeeeeeeeehiiiiiiiidggga....mkcccci.............fccccccccccck....................ecc", ++"cc......feeeeeeee#iiiiiiiingggggggggccccccccccccccccccccccccccccccci....iccccb...............gccccccccccc#...................ecc", ++"cc....meeeeeeeoiiiiiiiiigggggggggbcccccccccccccccccccccccccccccccckm...mkcccc#...............occcccccccccb...................ecc", ++"cc........................................meeeeeeeeeiiiiiiiiidgggg#....iccccb.................bccccccccccce..................ecc", ++"cc....................................................................mkcccc#.................#cccccccccccg..................ecc", ++"cc....................................................................iccccb..................mkcccccccccccl.................ecc", ++"cc..........................................eeeeeeeeeiiiiiiiiiaga....mkcccc#...................icccccccccccd.................ecc", ++"cc.....leeeeeeee#iiiiiiiinggggggggjccccccccccccccccccccccccccccci....iccccb....................lccccccccccccm................ecc", ++"cc....meeeeeeee#iiiiiiiiigggggggggkcccccccccccccccccccccccccccckm...mkcccc#.....................dccccccccccci................ecc", ++"cc.........................................leeeeeeeeoiiiiiiiiiah....iccccb......................lccccccccccck................ecc", ++"cc.................................................................mkcccc#.......................gccccccccccc#...............ecc", ++"cc.................................................................dccccj........................ecccccccccccj...............ecc", ++"cc..........................................leeeeeeeeeiiiiiiih....lccccce.........................bccccccccccce..............ecc", ++"cc....meeeeeeeeeiiiiiiiiidgggggggggcccccccccccccccccccccccccci....dccccg..........................#ccccccccccca..............ecc", ++"cc.....feeeeeeeeiiiiiiiinggggggggbcccccccccccccccccccccccccckm...lccccce...........................kcccccccccccl.............ecc", ++"cc........................................leeeeeeeehiiiiiiiih....dccccg............................ncccccccccccd.............ecc", ++"cc..............................................................lccccce............................fccccccccccccf............ecc", ++"cc..............................................................dccccb..............................jcccccccccccg............ecc", ++"cc.........................................meeeeeeeeoiiiiil....lcccccn..............................icccccccccccce...........ecc", ++"cc......feeeeeeeehiiiiiiiigggggggggccccccccccccccccjgggggo.....gccccc#..............................eccccccccccccbm..........ecc", ++"cc....meeeeeeeoiiiiiiiiidgggggggggccccccccccccccccc...........hcccccco...............................cccccccccccccn..........ecc", ++"cc.........................................leeeeeee..........ecccccccn..............................lcccccccccccccc#.........ecc", ++"cc..........................................................#kccccccckf.............................nccccccccccccccc#........ecc", ++"cc........................................................ldcccccccccck#m.........................lncccccccccccccccccdl......ecc", ++"cc.........................................feeeeeee....ogjcccccccccccccccggi..................oggbcccccccccccccccccccccja....ecc", ++"cc.....leeeeeeee#iiiiiiiidggggggggbcccccccccccccccc....icccccccccccccccccccg..................icccccccccccccccccccccccccc....ecc", ++"cc....meeeeeeeehiiiiiiiiaggggggggkccccccccccccccccc....icccccccccccccccccccg..................icccccccccccccccccccccccccc....ecc", ++"cc........................................feeeeeeee..........................................................................ecc", ++"cc...........................................................................................................................ecc", ++"cc...........................................................................................................................ecc", ++"cc...........................................................................................................................ecc", ++"cc...........................................................................................................................ecc", ++"cc...........................................................................................................................ecc", ++"cce..........................................................................................................................hcc", ++"ccn..........................................................................................................................acb", ++"jcb.........................................................................................................................lcca", ++"hcci........................................................................................................................acc#", ++"mkcc#......................................................................................................................dccb.", ++".occci...................................................................................................................macccf.", ++"..#cccbne.............................................................................................................menkccc#..", ++"...okccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccbe...", ++"....mhjccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccg#....."}; + diff --git a/debian/patches/300_nxagent_set-wm-class.patch b/debian/patches/300_nxagent_set-wm-class.patch new file mode 100644 index 000000000..765d6bc46 --- /dev/null +++ b/debian/patches/300_nxagent_set-wm-class.patch @@ -0,0 +1,60 @@ +Description: Set WM_CLASS to X2GoAgent/NXAgent + Depending on the binary name of the agent either NXAgent + or X2GoAgent is set as WM_Class. + . + This is needed for some window managers (like the one shipped with + Maemo) + . + The original WM_CLASS patch has been taken from the FreeNX patch + series, author unknown. + . + The nxagent/x2goagent has been done by the X2Go Project, author + see below. +Forwarded: not-needed +Author: Oleksandr Shneyder +Last-Update: 2012-01-11 +--- a/nx-X11/programs/Xserver/hw/nxagent/Screen.c ++++ b/nx-X11/programs/Xserver/hw/nxagent/Screen.c +@@ -1756,6 +1756,42 @@ + nxagentDefaultWindows[pScreen->myNum]); + #endif + ++ /* ++ * Setting WM_CLASS to "X2GoAgent" when running in X2Go Agent mode ++ * we need it to properly display all window parameters by some WMs ++ * (for example on Maemo) ++ */ ++ if(nxagentX2go) ++ { ++ #ifdef TEST ++ fprintf(stderr, "nxagentOpenScreen: Setting WM_CLASS and WM_NAME for window withid [%ld].\n", ++ nxagentDefaultWindows[pScreen->myNum]); ++ #endif ++ XClassHint hint; ++ hint.res_name=malloc(strlen("X2GoAgent")+1); ++ hint.res_class=malloc(strlen("X2GoAgent")+1); ++ strcpy(hint.res_name,"X2GoAgent"); ++ strcpy(hint.res_class,"X2GoAgent"); ++ XSetClassHint(nxagentDisplay,nxagentDefaultWindows[pScreen->myNum],&hint); ++ free(hint.res_name); ++ free(hint.res_class); ++ } else { ++ #ifdef TEST ++ fprintf(stderr, "nxagentOpenScreen: Setting WM_CLASS and WM_NAME for window withid [%ld].\n", ++ nxagentDefaultWindows[pScreen->myNum]); ++ #endif ++ ++ XClassHint hint; ++ hint.res_name=malloc(strlen("NXAgent")+1); ++ hint.res_class=malloc(strlen("NXAgent")+1); ++ strcpy(hint.res_name,"NXAgent"); ++ strcpy(hint.res_class,"NXAgent"); ++ XSetClassHint(nxagentDisplay,nxagentDefaultWindows[pScreen->myNum],&hint); ++ free(hint.res_name); ++ free(hint.res_class); ++ } ++ ++ + if (nxagentOption(Fullscreen)) + { + nxagentFullscreenWindow = nxagentDefaultWindows[pScreen->myNum]; diff --git a/debian/patches/999_nxagent_unbrand-nxagent-brand-x2goagent.patch b/debian/patches/999_nxagent_unbrand-nxagent-brand-x2goagent.patch new file mode 100644 index 000000000..e68d51b44 --- /dev/null +++ b/debian/patches/999_nxagent_unbrand-nxagent-brand-x2goagent.patch @@ -0,0 +1,329 @@ +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 +Last-Update: 2012-01-11 +--- a/nx-X11/programs/Xserver/hw/nxagent/Display.c2012-01-11 10:09:05.000000000 +0100 ++++ b/nx-X11/programs/Xserver/hw/nxagent/Display.c2012-01-11 14:47:51.000000000 +0100 +@@ -1407,6 +1408,7 @@ FIXME: Use of nxagentParentWindow is str + nxagentLogoBlack = 0x000000; + nxagentLogoRed = 0xff0000; + nxagentLogoWhite = 0xffffff; ++ nxagentLogoGray = 0x222222; + } + else + { +@@ -1417,6 +1419,7 @@ FIXME: Use of nxagentParentWindow is str + nxagentLogoRed = nxagentLogoColor(0xff0000); + nxagentLogoBlack = nxagentLogoColor(0x000000); + nxagentLogoWhite = 0xffffff; ++ nxagentLogoGray = nxagentLogoColor(0x222222); + } + + #ifdef WATCH +@@ -2660,6 +2680,7 @@ Bool nxagentReconnectDisplay(void *p0) + nxagentLogoBlack = 0x000000; + nxagentLogoRed = 0xff0000; + nxagentLogoWhite = 0xffffff; ++ nxagentLogoGray = 0x222222; + } + else + { +@@ -2670,6 +2691,7 @@ Bool nxagentReconnectDisplay(void *p0) + nxagentLogoRed = nxagentLogoColor(0xff0000); + nxagentLogoBlack = nxagentLogoColor(0x000000); + nxagentLogoWhite = 0xffffff; ++ nxagentLogoGray = nxagentLogoColor(0x222222); + } + + useXpmIcon = nxagentMakeIcon(nxagentDisplay, &nxagentIconPixmap, &nxagentIconShape); +--- a/nx-X11/programs/Xserver/hw/nxagent/Splash.c 2012-01-11 10:09:05.000000000 +0100 ++++ b/nx-X11/programs/Xserver/hw/nxagent/Splash.c 2012-01-11 15:03:39.000000000 +0100 +@@ -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 nxagentLogoDepth; + int nxagentLogoWhite; + int nxagentLogoRed; + int nxagentLogoBlack; ++int nxagentLogoGray; + + void nxagentPaintLogo(Window win, GC gc, int scale, int width, int height); + +@@ -166,6 +168,15 @@ void nxagentPaintLogo(Window win, GC gc, + 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 @@ void nxagentPaintLogo(Window win, GC gc, + 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/Splash.h 2012-01-11 10:09:05.000000000 +0100 ++++ b/nx-X11/programs/Xserver/hw/nxagent/Splash.h 2012-01-11 14:48:05.000000000 +0100 +@@ -33,6 +33,7 @@ extern int nxagentLogoDepth; + extern int nxagentLogoWhite; + extern int nxagentLogoRed; + extern int nxagentLogoBlack; ++extern int nxagentLogoGray; + + extern Window nxagentSplashWindow; + +--- a/nx-X11/programs/Xserver/hw/nxagent/Screen.c ++++ b/nx-X11/programs/Xserver/hw/nxagent/Screen.c +@@ -1754,7 +1754,20 @@ + #ifdef TEST + fprintf(stderr, "nxagentOpenScreen: Created new default window with id [%ld].\n", + nxagentDefaultWindows[pScreen->myNum]); ++ ++ fprintf(stderr, "nxagentOpenScreen: Setting WM_CLASS and WM_NAME for window withid [%ld].\n", ++ nxagentDefaultWindows[pScreen->myNum]); + #endif ++ ++ XClassHint hint; ++ hint.res_name=malloc(strlen(HINT)+1); ++ hint.res_class=malloc(strlen(HINT)+1); ++ strcpy(hint.res_name,HINT); ++ strcpy(hint.res_class,HINT); ++ XSetClassHint(nxagentDisplay,nxagentDefaultWindows[pScreen->myNum],&hint); ++ free(hint.res_name); ++ free(hint.res_class); ++ + + if (nxagentOption(Fullscreen)) + { +--- a/nx-X11/programs/Xserver/hw/nxagent/Screen.h ++++ b/nx-X11/programs/Xserver/hw/nxagent/Screen.h +@@ -36,6 +36,8 @@ + #define MIN_NXAGENT_HEIGHT 60 + #define NXAGENT_FRAME_WIDTH 2000 + ++#define HINT "NXAgent" ++ + #define nxagentSetPrintGeometry(screen) \ + nxagentPrintGeometryFlags = (1 << (screen)); + +--- a/nx-X11/programs/Xserver/hw/nxagent/Splash.c ++++ b/nx-X11/programs/Xserver/hw/nxagent/Splash.c +@@ -204,6 +204,7 @@ + + nxagentPixmapLogo = XCreatePixmap(nxagentDisplay, win, width, height, nxagentLogoDepth); + ++ return; + if (!nxagentPixmapLogo) + { + return; +--- a/nx-X11/programs/Xserver/hw/nxagent/Display.c ++++ b/nx-X11/programs/Xserver/hw/nxagent/Display.c +@@ -1919,7 +1919,7 @@ + XlibPixmap IconPixmap; + XlibPixmap IconShape; + +- snprintf(default_path, PATH_MAX-1, "/usr/NX/share/images/%s", NXAGENT_ICON_NAME); ++ snprintf(default_path, PATH_MAX-1, "/usr/share/pixmaps/%s", NXAGENT_ICON_NAME); + + if ((icon_fp = fopen(default_path, "r")) == NULL) + { -- cgit v1.2.3