[X2Go-Commits] nx-libs.git - build-main (branch) updated: nxagent/3.3.0-9

X2Go dev team git-admin at x2go.org
Fri Aug 30 16:22:01 CEST 2013


The branch, build-main has been updated
       via  6f5e20bc49695159bd3b313333591c4eb27ad422 (commit)
      from  45b970f25634519dac302a5691a7a2d45f8db49f (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
-----------------------------------------------------------------------

Summary of changes:
 nx-X11/programs/Xserver/hw/nxagent/CHANGELOG       |   21 +
 nx-X11/programs/Xserver/hw/nxagent/Events.c        |   40 +-
 nx-X11/programs/Xserver/hw/nxagent/Font.c          |   41 +-
 nx-X11/programs/Xserver/hw/nxagent/Keyboard.c      |  460 +++++++++++++++-----
 nx-X11/programs/Xserver/hw/nxagent/Keyboard.h      |    4 +
 nx-X11/programs/Xserver/hw/nxagent/Reconnect.c     |   31 +-
 nx-X11/programs/Xserver/hw/nxagent/Render.c        |    9 +-
 nx-X11/programs/Xserver/hw/nxagent/X/NXevents.c    |  119 ++++-
 .../Xserver/hw/nxagent/X/NXevents.c.NX.original    |  119 ++++-
 9 files changed, 693 insertions(+), 151 deletions(-)

The diff of changes is:
diff --git a/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG b/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG
index 17b69c3..1f7f0df 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG
+++ b/nx-X11/programs/Xserver/hw/nxagent/CHANGELOG
@@ -1,5 +1,26 @@
 ChangeLog:
 
+nxagent-3.3.0-9
+
+- Added /usr/NX/share/base to alternate font paths. This would fix
+  TR11F02130 if fonts fixed and cursor are installed there.
+
+- Changed Keyboard initialization and reset. This change should fix
+  TR11F02129, TR11F02131, TR11F02132.
+
+nxagent-3.3.0-8
+
+- Fixed TR12F02144. Image bits of render glyphs are copied before they
+  are cleaned. This will avoid a memory corruption.
+
+- Fixed TR12F02145. When dispatching a MotionNotify event, check if a
+  top-level window has been entered before trying to show the pulldown
+  dialog.
+
+nxagent-3.3.0-7
+
+- Added debug code for pointer input.
+
 nxagent-3.3.0-6
 
 - Fixed compile warnings.
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Events.c b/nx-X11/programs/Xserver/hw/nxagent/Events.c
index ab8c13c..3c1458c 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Events.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Events.c
@@ -63,7 +63,13 @@
 #include "NXproto.h"
 
 #include "xfixesproto.h"
+#define Window     XlibWindow
+#define Atom   XlibAtom
+#define Time XlibXID
 #include <X11/extensions/Xfixes.h>
+#undef Window
+#undef Atom
+#undef Time
 
 #ifdef NXAGENT_FIXKEYS
 #include "inputstr.h"
@@ -789,8 +795,9 @@ void nxagentDispatchEvents(PredicateFuncPtr predicate)
         }
 
         x.u.u.type = KeyRelease;
-        x.u.u.detail = X.xkey.keycode;
-        x.u.keyButtonPointer.time = nxagentLastKeyPressTime + (X.xkey.time - nxagentLastServerTime);
+        x.u.u.detail = nxagentConvertKeycode(X.xkey.keycode);
+        x.u.keyButtonPointer.time = nxagentLastKeyPressTime +
+            (X.xkey.time - nxagentLastServerTime);
 
         nxagentLastServerTime = X.xkey.time;
 
@@ -918,7 +925,7 @@ void nxagentDispatchEvents(PredicateFuncPtr predicate)
         #ifdef NX_DEBUG_INPUT
         if (nxagentDebugInput == 1)
         {
-          fprintf(stderr, "nxagentDispatchEvents: Going to handle new ButtonPress event.\n");
+          fprintf(stderr, "nxagentDispatchEvents: Going to handle new ButtonRelease event.\n");
         }
         #endif
 
@@ -1016,18 +1023,17 @@ void nxagentDispatchEvents(PredicateFuncPtr predicate)
             nxagentLastEnteredWindow = pWin;
           }
 
-          if (nxagentPulldownDialogPid == 0 && (X.xmotion.y_root <
-                  nxagentLastEnteredTopLevelWindow -> drawable.y + 4))
+          if (nxagentPulldownDialogPid == 0 && nxagentLastEnteredTopLevelWindow &&
+                  (X.xmotion.y_root < nxagentLastEnteredTopLevelWindow -> drawable.y + 4))
           {
-            if (pWin && nxagentLastEnteredTopLevelWindow &&
-                    nxagentClientIsDialog(wClient(pWin)) == 0 &&
-                        nxagentLastEnteredTopLevelWindow -> parent == WindowTable[0] &&
-                            nxagentLastEnteredTopLevelWindow -> overrideRedirect == False &&
-                                X.xmotion.x_root > (nxagentLastEnteredTopLevelWindow -> drawable.x +
-                                    (nxagentLastEnteredTopLevelWindow -> drawable.width >> 1) - 50) &&
-                                        X.xmotion.x_root < (nxagentLastEnteredTopLevelWindow -> drawable.x +
-                                            (nxagentLastEnteredTopLevelWindow -> drawable.width >> 1) + 50) &&
-                                                nxagentOption(Menu) == 1)
+            if (pWin && nxagentClientIsDialog(wClient(pWin)) == 0 &&
+                    nxagentLastEnteredTopLevelWindow -> parent == WindowTable[0] &&
+                        nxagentLastEnteredTopLevelWindow -> overrideRedirect == False &&
+                            X.xmotion.x_root > (nxagentLastEnteredTopLevelWindow -> drawable.x +
+                                (nxagentLastEnteredTopLevelWindow -> drawable.width >> 1) - 50) &&
+                                    X.xmotion.x_root < (nxagentLastEnteredTopLevelWindow -> drawable.x +
+                                        (nxagentLastEnteredTopLevelWindow -> drawable.width >> 1) + 50) &&
+                                            nxagentOption(Menu) == 1)
             {
               nxagentPulldownDialog(nxagentLastEnteredTopLevelWindow -> drawable.id);
             }
@@ -1052,7 +1058,8 @@ void nxagentDispatchEvents(PredicateFuncPtr predicate)
           #ifdef NX_DEBUG_INPUT
           if (nxagentDebugInput == 1)
           {
-            fprintf(stderr, "nxagentDispatchEvents: Adding motion event [%d, %d] to the queue.\n", x.u.keyButtonPointer.rootX, x.u.keyButtonPointer.rootY);
+            fprintf(stderr, "nxagentDispatchEvents: Adding motion event [%d, %d] to the queue.\n",
+                        x.u.keyButtonPointer.rootX, x.u.keyButtonPointer.rootY);
           }
           #endif
 
@@ -1911,8 +1918,9 @@ int nxagentHandleKeyPress(XEvent *X, enum HandleEventResult *result)
 
   nxagentLastEventTime = nxagentLastKeyPressTime = GetTimeInMillis();
 
+  
   x.u.u.type = KeyPress;
-  x.u.u.detail = X -> xkey.keycode;
+  x.u.u.detail = nxagentConvertKeycode(X -> xkey.keycode);
   x.u.keyButtonPointer.time = nxagentLastKeyPressTime;
 
   nxagentLastServerTime = X -> xkey.time;
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Font.c b/nx-X11/programs/Xserver/hw/nxagent/Font.c
index 3f1fd0b..87f9f02 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Font.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Font.c
@@ -65,26 +65,34 @@ is" without express or implied warranty.
 #define NXAGENT_ALTERNATE_FONT_DIR    "/usr/share/X11/fonts"
 #define NXAGENT_ALTERNATE_FONT_DIR_2  "/usr/share/fonts/X11"
 #define NXAGENT_ALTERNATE_FONT_DIR_3  "/usr/share/fonts"
+#define NXAGENT_ALTERNATE_FONT_DIR_4  "/usr/NX/share/fonts"
 
 #define NXAGENT_DEFAULT_FONT_PATH  \
 "/usr/X11R6/lib/X11/fonts/misc/,/usr/X11R6/lib/X11/fonts/Speedo/,\
 /usr/X11R6/lib/X11/fonts/Type1/,/usr/X11R6/lib/X11/fonts/75dpi/,\
-/usr/X11R6/lib/X11/fonts/100dpi/,/usr/X11R6/lib/X11/fonts/TTF/"
+/usr/X11R6/lib/X11/fonts/100dpi/,/usr/X11R6/lib/X11/fonts/TTF/,\
+/usr/NX/share/fonts/base"
 
 #define NXAGENT_ALTERNATE_FONT_PATH  \
 "/usr/share/X11/fonts/misc/,/usr/share/X11/fonts/Speedo/,\
 /usr/share/X11/fonts/Type1/,/usr/share/X11/fonts/75dpi/,\
-/usr/share/X11/fonts/100dpi/,/usr/share/X11/fonts/TTF/"
+/usr/share/X11/fonts/100dpi/,/usr/share/X11/fonts/TTF/,\
+/usr/NX/share/fonts/base"
 
 #define NXAGENT_ALTERNATE_FONT_PATH_2  \
 "/usr/share/fonts/X11/misc/,/usr/share/fonts/X11/Speedo/,\
 /usr/share/fonts/X11/Type1/,/usr/share/fonts/X11/75dpi/,\
-/usr/share/fonts/X11/100dpi/,/usr/share/fonts/X11/TTF/"
+/usr/share/fonts/X11/100dpi/,/usr/share/fonts/X11/TTF/,\
+/usr/NX/share/fonts/base"
 
 #define NXAGENT_ALTERNATE_FONT_PATH_3  \
 "/usr/share/fonts/misc/,/usr/share/fonts/Speedo/,\
 /usr/share/fonts/Type1/,/usr/share/fonts/75dpi/,\
-/usr/share/fonts/100dpi/,/usr/share/fonts/TTF/"
+/usr/share/fonts/100dpi/,/usr/share/fonts/TTF/,\
+/usr/NX/share/fonts/base"
+
+#define NXAGENT_ALTERNATE_FONT_PATH_4  \
+"/usr/NX/share/fonts/base"
 
 #undef NXAGENT_FONTCACHE_DEBUG
 #undef NXAGENT_RECONNECT_FONT_DEBUG
@@ -1553,6 +1561,31 @@ void nxagentVerifyDefaultFontPath(void)
     strcat(fontPath, NXAGENT_ALTERNATE_FONT_PATH_3);
   }
 
+  if (stat(NXAGENT_ALTERNATE_FONT_DIR_4, &dirStat) == 0 &&
+          S_ISDIR(dirStat.st_mode) != 0)
+  {
+    /*
+     * Let's use the "/usr/NX/share/fonts" path.
+     */
+
+    #ifdef TEST
+    fprintf(stderr, "nxagentVerifyDefaultFontPath: Assuming fonts in directory [%s].\n",
+                validateString(NXAGENT_ALTERNATE_FONT_DIR_4));
+    #endif
+
+    if (*fontPath != '\0')
+    {
+      fontPath = realloc(fontPath, strlen(fontPath) + strlen(NXAGENT_ALTERNATE_FONT_PATH_4) + 2);
+      strcat(fontPath, ",");
+    }
+    else
+    {
+      fontPath = realloc(fontPath, strlen(fontPath) + strlen(NXAGENT_ALTERNATE_FONT_PATH_4) + 1);
+    }
+
+    strcat(fontPath, NXAGENT_ALTERNATE_FONT_PATH_4);
+  }
+
   if (*fontPath == '\0') 
   {
     #ifdef WARNING
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
index 37e49ea..73b4c70 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.c
@@ -75,6 +75,8 @@ is" without express or implied warranty.
 static int nxagentXkbGetNames(char **rules, char **model, char **layout,
                                   char **variant, char **options);
 
+static void nxagentKeycodeConversionSetup(void);
+
 #endif /* XKB */
 
 /*
@@ -189,6 +191,281 @@ unsigned int nxagentAltMetaMask;
 
 void nxagentCheckAltMetaKeys(CARD8, int);
 
+static CARD8 nxagentConvertedKeycodes[] =
+{
+  /* evdev  pc105*/
+  /*   0 */   0,
+  /*   1 */   1,
+  /*   2 */   2,
+  /*   3 */   3,
+  /*   4 */   4,
+  /*   5 */   5,
+  /*   6 */   6,
+  /*   7 */   7,
+  /*   8 */   8,
+  /*   9 */   9,
+  /*  10 */   10,
+  /*  11 */   11,
+  /*  12 */   12,
+  /*  13 */   13,
+  /*  14 */   14,
+  /*  15 */   15,
+  /*  16 */   16,
+  /*  17 */   17,
+  /*  18 */   18,
+  /*  19 */   19,
+  /*  20 */   20,
+  /*  21 */   21,
+  /*  22 */   22,
+  /*  23 */   23,
+  /*  24 */   24,
+  /*  25 */   25,
+  /*  26 */   26,
+  /*  27 */   27,
+  /*  28 */   28,
+  /*  29 */   29,
+  /*  30 */   30,
+  /*  31 */   31,
+  /*  32 */   32,
+  /*  33 */   33,
+  /*  34 */   34,
+  /*  35 */   35,
+  /*  36 */   36,
+  /*  37 */   37,
+  /*  38 */   38,
+  /*  39 */   39,
+  /*  40 */   40,
+  /*  41 */   41,
+  /*  42 */   42,
+  /*  43 */   43,
+  /*  44 */   44,
+  /*  45 */   45,
+  /*  46 */   46,
+  /*  47 */   47,
+  /*  48 */   48,
+  /*  49 */   49,
+  /*  50 */   50,
+  /*  51 */   51,
+  /*  52 */   52,
+  /*  53 */   53,
+  /*  54 */   54,
+  /*  55 */   55,
+  /*  56 */   56,
+  /*  57 */   57,
+  /*  58 */   58,
+  /*  59 */   59,
+  /*  60 */   60,
+  /*  61 */   61,
+  /*  62 */   62,
+  /*  63 */   63,
+  /*  64 */   64,
+  /*  65 */   65,
+  /*  66 */   66,
+  /*  67 */   67,
+  /*  68 */   68,
+  /*  69 */   69,
+  /*  70 */   70,
+  /*  71 */   71,
+  /*  72 */   72,
+  /*  73 */   73,
+  /*  74 */   74,
+  /*  75 */   75,
+  /*  76 */   76,
+  /*  77 */   77,
+  /*  78 */   78,
+  /*  79 */   79,
+  /*  80 */   80,
+  /*  81 */   81,
+  /*  82 */   82,
+  /*  83 */   83,
+  /*  84 */   84,
+  /*  85 */   85,
+  /*  86 */   86,
+  /*  87 */   87,
+  /*  88 */   88,
+  /*  89 */   89,
+  /*  90 */   90,
+  /*  91 */   91,
+  /*  92 */  124,
+  /*  93 */   93,
+  /*  94 */   94,
+  /*  95 */   95,
+  /*  96 */   96,
+  /*  97 */  211,
+  /*  98 */   98,
+  /*  99 */   99,
+  /* 100 */  100,
+  /* 101 */  208,
+  /* 102 */  102,
+  /* 103 */  103,
+  /* 104 */  108,
+  /* 105 */  109,
+  /* 106 */  112,
+  /* 107 */  111,
+  /* 108 */  113,
+  /* 109 */  109,
+  /* 110 */   97,
+  /* 111 */   98,
+  /* 112 */   99,
+  /* 113 */  100,
+  /* 114 */  102,
+  /* 115 */  103,
+  /* 116 */  104,
+  /* 117 */  105,
+  /* 118 */  106,
+  /* 119 */  107,
+  /* 120 */  120,
+  /* 121 */  121,
+  /* 122 */  122,
+  /* 123 */  123,
+  /* 124 */  124,
+  /* 125 */  126,
+  /* 126 */  126,
+  /* 127 */  110,
+  /* 128 */  128,
+  /* 129 */  129,
+  /* 130 */  130,
+  /* 131 */  131,
+  /* 132 */  133,
+  /* 133 */  115,
+  /* 134 */  116,
+  /* 135 */  117,
+  /* 136 */  136,
+  /* 137 */  137,
+  /* 138 */  138,
+  /* 139 */  139,
+  /* 140 */  140,
+  /* 141 */  141,
+  /* 142 */  142,
+  /* 143 */  143,
+  /* 144 */  144,
+  /* 145 */  145,
+  /* 146 */  146,
+  /* 147 */  147,
+  /* 148 */  148,
+  /* 149 */  149,
+  /* 150 */  150,
+  /* 151 */  151,
+  /* 152 */  152,
+  /* 153 */  153,
+  /* 154 */  154,
+  /* 155 */  155,
+  /* 156 */  156,
+  /* 157 */  157,
+  /* 158 */  158,
+  /* 159 */  159,
+  /* 160 */  160,
+  /* 161 */  161,
+  /* 162 */  162,
+  /* 163 */  163,
+  /* 164 */  164,
+  /* 165 */  165,
+  /* 166 */  166,
+  /* 167 */  167,
+  /* 168 */  168,
+  /* 169 */  169,
+  /* 170 */  170,
+  /* 171 */  171,
+  /* 172 */  172,
+  /* 173 */  173,
+  /* 174 */  174,
+  /* 175 */  175,
+  /* 176 */  176,
+  /* 177 */  177,
+  /* 178 */  178,
+  /* 179 */  179,
+  /* 180 */  180,
+  /* 181 */  181,
+  /* 182 */  182,
+  /* 183 */  183,
+  /* 184 */  184,
+  /* 185 */  185,
+  /* 186 */  186,
+  /* 187 */  187,
+  /* 188 */  188,
+  /* 189 */  189,
+  /* 190 */  190,
+  /* 191 */  118,
+  /* 192 */  119,
+  /* 193 */  120,
+  /* 194 */  121,
+  /* 195 */  122,
+  /* 196 */  196,
+  /* 197 */  197,
+  /* 198 */  198,
+  /* 199 */  199,
+  /* 200 */  200,
+  /* 201 */  201,
+  /* 202 */  202,
+  /* 203 */   93,
+  /* 204 */  125,
+  /* 205 */  156,
+  /* 206 */  127,
+  /* 207 */  128,
+  /* 208 */  208,
+  /* 209 */  209,
+  /* 210 */  210,
+  /* 211 */  211,
+  /* 212 */  212,
+  /* 213 */  213,
+  /* 214 */  214,
+  /* 215 */  215,
+  /* 216 */  216,
+  /* 217 */  217,
+  /* 218 */  218,
+  /* 219 */  219,
+  /* 220 */  220,
+  /* 221 */  221,
+  /* 222 */  222,
+  /* 223 */  223,
+  /* 224 */  224,
+  /* 225 */  225,
+  /* 226 */  226,
+  /* 227 */  227,
+  /* 228 */  228,
+  /* 229 */  229,
+  /* 230 */  230,
+  /* 231 */  231,
+  /* 232 */  232,
+  /* 233 */  233,
+  /* 234 */  234,
+  /* 235 */  235,
+  /* 236 */  236,
+  /* 237 */  237,
+  /* 238 */  238,
+  /* 239 */  239,
+  /* 240 */  240,
+  /* 241 */  241,
+  /* 242 */  242,
+  /* 243 */  243,
+  /* 244 */  244,
+  /* 245 */  245,
+  /* 246 */  246,
+  /* 247 */  247,
+  /* 248 */  248,
+  /* 249 */  249,
+  /* 250 */  250,
+  /* 251 */  251,
+  /* 252 */  252,
+  /* 253 */  253,
+  /* 254 */  254,
+  /* 255 */  255
+};
+
+static int nxagentKeycodeConversion = 0;
+
+CARD8 nxagentConvertKeycode(CARD8 k)
+{
+ if (nxagentKeycodeConversion != 0)
+ {
+   return nxagentConvertedKeycodes[k];
+ }
+ else
+ {
+   return k;
+ }
+}
+
 static int nxagentSaveKeyboardDeviceData(DeviceIntPtr dev, DeviceIntPtr devBackup);
 
 static int nxagentRestoreKeyboardDeviceData(DeviceIntPtr devBackup, DeviceIntPtr dev);
@@ -398,13 +675,6 @@ int nxagentKeyboardProc(DeviceIntPtr pDev, int onoff)
 
   int ret;
 
-  char *remoteRules = NULL;
-  char *remoteModel = NULL;
-
-  unsigned int remoteRulesLen;
-
-  XkbRF_VarDefsRec remoteDefs;
-
   switch (onoff)
   {
     case DEVICE_INIT:
@@ -676,14 +946,21 @@ XkbError:
 
         xkb = XkbGetKeyboard(nxagentDisplay, XkbGBN_AllComponentsMask, XkbUseCoreKbd);
 
+        nxagentKeycodeConversionSetup();
+
         if (xkb == NULL || xkb->geom == NULL)
         {
           #ifdef TEST
           fprintf(stderr, "nxagentKeyboardProc: No current keyboard.\n");
-          #endif
-
-          #ifdef TEST
-          fprintf(stderr, "nxagentKeyboardProc: No keyboard, going to set rules and init device.\n");
+          if (xkb == NULL)
+          {
+            fprintf(stderr, "nxagentKeyboardProc: xkb is null.\n");
+          }
+          else
+          {
+            fprintf(stderr, "nxagentKeyboardProc: xkb->geom is null.\n");
+          }
+          fprintf(stderr, "nxagentKeyboardProc: Going to set rules and init device.\n");
           #endif
 
           XkbSetRulesDflts(rules, model, layout, variants, options);
@@ -699,40 +976,6 @@ XkbError:
           goto XkbEnd;
         }
 
-        if (xkb != NULL)
-        {
-          char *drules = 0;
-          char *dmodel = 0;
-          char *dlayout = 0;
-          char *dvariant = 0;
-          char *doptions = 0;
-
-          remoteRulesLen = nxagentXkbGetNames(&drules, &dmodel, &dlayout,
-                                                  &dvariant, &doptions);
-
-          if (remoteRulesLen != 0 && drules != NULL && dmodel != NULL)
-          {
-            #ifdef DEBUG
-            fprintf(stderr, "nxagentKeyboardProc: Remote: [%s,%s,%s,%s,%s].\n",
-                        drules, dmodel, dlayout, dvariant, doptions);
-            #endif
-
-            remoteRules = drules;
-            remoteModel = dmodel;
-            remoteDefs.model = dmodel;
-            remoteDefs.layout = dlayout;
-            remoteDefs.variant = dvariant;
-            remoteDefs.options = doptions;
-          }
-          #ifdef DEBUG
-          else
-          {
-            fprintf(stderr, "nxagentKeyboardProc: Failed to retrieve remote "
-                        "rules");
-          }
-          #endif
-        }
-
         XkbGetControls(nxagentDisplay, XkbAllControlsMask, xkb);
 
         nxagentXkbConfigFilePathSize = strlen(XkbBaseDirectory) +
@@ -813,66 +1056,6 @@ XkbError:
 
           free(nxagentXkbConfigFilePath);
 
-          if (xkb != NULL && nxagentOption(ClientOs) == ClientOsLinux &&
-                  remoteRules != NULL && remoteModel != NULL &&
-                      (strcmp(remoteRules, "evdev") == 0 ||
-                          strcmp(remoteModel, "evdev") == 0) &&
-                              pDev->key->xkbInfo != NULL &&
-                                  pDev->key->xkbInfo->desc != NULL)
-          {
-            XkbDescPtr xkbt;
-            void *tmp;
-            #ifdef _XSERVER64
-            int i;
-            #endif
-
-            xkbt = pDev->key->xkbInfo->desc;
-
-            xkbt->min_key_code = xkb->min_key_code;
-            xkbt->max_key_code = xkb->max_key_code;
-
-            if (xkbt->map != NULL && xkb->map != NULL)
-            {
-              tmp = (void *)xkbt->map;
-              xkbt->map = xkb->map;
-              xkb->map = (XkbClientMapPtr)tmp;
-
-              #ifdef _XSERVER64
-
-              tmp = (void *) xkbt->map->syms;
-              xkbt->map->syms = xalloc(xkbt->map->size_syms * sizeof(KeySym));
-
-              for (i = 0; i < xkbt->map->size_syms; i++)
-              {
-                xkbt->map->syms[i] = ((KeySym64 *)tmp)[i];
-              }
-
-              #endif
-            }
-
-            if (xkbt->server != NULL && xkb->server != NULL)
-            {
-              tmp = (void *)xkbt->server;
-              xkbt->server = xkb->server;
-              xkb->server = (XkbServerMapPtr)tmp;
-            }
-
-            if (xkbt->compat != NULL && xkb->compat != NULL)
-            {
-              tmp = (void *)xkbt->compat;
-              xkbt->compat = xkb->compat;
-              xkb->compat = (XkbCompatMapPtr)tmp;
-            }
-
-            XkbSetRulesDflts(remoteRules, remoteDefs.model, remoteDefs.layout,
-                                 remoteDefs.variant, remoteDefs.options);
-            XkbSetRulesUsed(&remoteDefs);
-
-            free(remoteRules);
-
-            goto XkbEnd;
-          }
-
           if (!nxagentKeyboard ||
                  (nxagentKeyboard && (strcmp(nxagentKeyboard, "query") == 0)))
           {
@@ -1562,4 +1745,71 @@ static int nxagentXkbGetNames(char **rules, char **model, char **layout,
   return n;
 }
 
+void nxagentKeycodeConversionSetup(void)
+{
+  char *drules = 0;
+  char *dmodel = 0;
+  char *dlayout = 0;
+  char *dvariant = 0;
+  char *doptions = 0;
+  unsigned int drulesLen;
+
+  nxagentKeycodeConversion = 0;
+
+  drulesLen = nxagentXkbGetNames(&drules, &dmodel, &dlayout,
+                                     &dvariant, &doptions);
+
+  #ifdef DEBUG
+  if (drulesLen != 0 && drules != NULL && dmodel != NULL)
+  {
+    fprintf(stderr, "nxagentKeycodeConversionSetup: "
+                "Remote: [%s,%s,%s,%s,%s].\n", drules, dmodel, dlayout,
+                    dvariant, doptions);
+  }
+  else
+  {
+    fprintf(stderr, "nxagentKeycodeConversionSetup: "
+                "Failed to retrieve remote rules.\n");
+  }
+  #endif
+
+  if (nxagentOption(ClientOs) == ClientOsLinux &&
+            drules != NULL && dmodel != NULL &&
+                (strcmp(drules, "evdev") == 0 ||
+                    strcmp(dmodel, "evdev") == 0))
+  {
+    nxagentKeycodeConversion = 1;
+  }
+
+  if (drules != NULL)
+  {
+    XFree(drules);
+  }
+}
+
+void nxagentResetKeycodeConversion(void)
+{
+  int result;
+  XkbAgentInfoRec info;
+  XkbDescPtr xkb;
+
+  result = XkbQueryExtension(nxagentDisplay, &info.Opcode, &info.EventBase,
+                                 &info.ErrorBase, &info.MajorVersion,
+                                     &info.MinorVersion);
+
+  if (result != 0)
+  {
+    nxagentKeycodeConversionSetup();
+  }
+  else
+  {
+    #ifdef WARNING
+    fprintf(stderr, "nxagentResetKeycodeConversion: "
+                "WARNING! Failed to query XKB extension.\n");
+    #endif
+
+    nxagentKeycodeConversion = 0;
+  }
+}
+
 #endif
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.h b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.h
index f292402..50dd2be 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Keyboard.h
+++ b/nx-X11/programs/Xserver/hw/nxagent/Keyboard.h
@@ -109,6 +109,10 @@ void nxagentEnableXkbExtension(void);
 
 void nxagentTuneXkbWrapper(void);
 
+void nxagentResetKeycodeConversion(void);
+
 #endif
 
+CARD8 nxagentConvertKeycode(CARD8 k);
+
 #endif /* __Keyboard_H__ */
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c b/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
index ce3e6ee..69b73a9 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Reconnect.c
@@ -547,28 +547,29 @@ Bool nxagentReconnectSession(void)
     goto nxagentReconnectError;
   }
 
-  if (nxagentOption(ResetKeyboardAtResume))
+  if (nxagentOption(ResetKeyboardAtResume) == 1 &&
+         (nxagentKeyboard  == NULL || nxagentOldKeyboard == NULL ||
+             strcmp(nxagentKeyboard, nxagentOldKeyboard) != 0 ||
+                 strcmp(nxagentKeyboard, "query") == 0))
   {
-    if (nxagentKeyboard  == NULL || nxagentOldKeyboard == NULL ||
-           strcmp(nxagentKeyboard, nxagentOldKeyboard) != 0 ||
-               strcmp(nxagentKeyboard, "query") == 0)
+    if (nxagentResetKeyboard() == 0)
     {
-
-      if (nxagentResetKeyboard() == 0)
+      #ifdef WARNING
+      if (nxagentVerbose == 1)
       {
-        #ifdef WARNING
-        if (nxagentVerbose == 1)
-        {
-          fprintf(stderr, "nxagentReconnect: Failed to reset keyboard device.\n");
-        }
-        #endif
+        fprintf(stderr, "nxagentReconnect: Failed to reset keyboard device.\n");
+      }
+      #endif
 
-        failedStep = WINDOW_STEP;
+      failedStep = WINDOW_STEP;
 
-        goto nxagentReconnectError;
-      }
+      goto nxagentReconnectError;
     }
   }
+  else
+  {
+    nxagentResetKeycodeConversion();
+  }
 
   nxagentXkbState.Initialized = 0;
 
diff --git a/nx-X11/programs/Xserver/hw/nxagent/Render.c b/nx-X11/programs/Xserver/hw/nxagent/Render.c
index b1ff219..f2d7b15 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Render.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Render.c
@@ -2270,8 +2270,7 @@ void nxagentAddGlyphs(GlyphSetPtr glyphSet, Glyph *gids, xGlyphInfo *gi,
 
   normalizedImages = NULL;
 
-  if (glyphDepths[glyphSet -> fdepth] == 1 &&
-          nxagentServerOrder() != BitmapBitOrder(nxagentDisplay))
+  if (sizeImages > 0)
   {
     normalizedImages = xalloc(sizeImages);
 
@@ -2279,7 +2278,11 @@ void nxagentAddGlyphs(GlyphSetPtr glyphSet, Glyph *gids, xGlyphInfo *gi,
     {
       memcpy(normalizedImages, images, sizeImages);
 
-      BitOrderInvert ((unsigned char *) normalizedImages, sizeImages);
+      if (glyphDepths[glyphSet -> fdepth] == 1 &&
+              nxagentServerOrder() != BitmapBitOrder(nxagentDisplay))
+      {
+        BitOrderInvert ((unsigned char *) normalizedImages, sizeImages);
+      }
     }
     else
     {
diff --git a/nx-X11/programs/Xserver/hw/nxagent/X/NXevents.c b/nx-X11/programs/Xserver/hw/nxagent/X/NXevents.c
index 91e2909..a8a2a68 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXevents.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXevents.c
@@ -189,6 +189,10 @@ xEvent *xeviexE;
 #include "Windows.h"
 #include "Args.h"
 
+#ifdef NX_DEBUG_INPUT
+extern int nxagentDebugInput;
+#endif
+ 
 extern Display *nxagentDisplay;
 
 extern WindowPtr nxagentLastEnteredWindow;
@@ -1682,11 +1686,28 @@ TryClientEvents (ClientPtr client, xEvent *pEvents, int count, Mask mask,
     int i;
     int type;
 
-#ifdef DEBUG
+#ifdef NX_DEBUG_INPUT
+    if (grab && nxagentDebugInput && grab->window)
+    {
+	fprintf(stderr, "TryClientEvents: Grab window is [0x%x].\n",
+		(unsigned int)grab->window->drawable.id);
+	if (!SameClient(grab, client))
+		fprintf(stderr, "TryClientEvents: Events are going to be "
+			    "discarded.\n");
+    }
+#endif
+#if defined(DEBUG) || defined(NX_DEBUG_INPUT)
+#ifdef NX_DEBUG_INPUT
+    if (nxagentDebugInput == 1)
+	fprintf(stderr, "Event([%d, %d], mask=0x%x), client=%d",
+	pEvents->u.u.type, pEvents->u.u.detail, (unsigned int)mask,
+	client->index);
+#else
     if (debug_events) ErrorF(
 	"Event([%d, %d], mask=0x%x), client=%d",
 	pEvents->u.u.type, pEvents->u.u.detail, mask, client->index);
 #endif
+#endif
     if ((client) && (client != serverClient) && (!client->clientGone) &&
 	((filter == CantBeFiltered) || (mask & filter)))
     {
@@ -1700,10 +1721,17 @@ TryClientEvents (ClientPtr client, xEvent *pEvents, int count, Mask mask,
 		if (WID(inputInfo.pointer->valuator->motionHintWindow) ==
 		    pEvents->u.keyButtonPointer.event)
 		{
-#ifdef DEBUG
+#if defined(DEBUG) || defined(NX_DEBUG_INPUT)
+#ifdef NX_DEBUG_INPUT
+    if (nxagentDebugInput == 1)
+    {
+	fprintf(stderr,"\nmotionHintWindow == keyButtonPointer.event\n");
+    }
+#else
 		    if (debug_events) ErrorF("\n");
 	    fprintf(stderr,"motionHintWindow == keyButtonPointer.event\n");
 #endif
+#endif
 		    return 1; /* don't send, but pretend we did */
 		}
 		pEvents->u.u.detail = NotifyHint;
@@ -1740,16 +1768,26 @@ TryClientEvents (ClientPtr client, xEvent *pEvents, int count, Mask mask,
 	}
 
 	WriteEventsToClient(client, count, pEvents);
-#ifdef DEBUG
+#if defined(DEBUG) || defined(NX_DEBUG_INPUT)
+#ifdef NX_DEBUG_INPUT
+    if (nxagentDebugInput == 1)
+	fprintf(stderr, " delivered\n");
+#else
 	if (debug_events) ErrorF(  " delivered\n");
 #endif
+#endif
 	return 1;
     }
     else
     {
-#ifdef DEBUG
+#if defined(DEBUG) || defined(NX_DEBUG_INPUT)
+#ifdef NX_DEBUG_INPUT
+    if (nxagentDebugInput == 1)
+	fprintf(stderr, "\n");
+#else
 	if (debug_events) ErrorF("\n");
 #endif
+#endif
 	return 0;
     }
 }
@@ -3116,6 +3154,12 @@ ProcessPointerEvent (register xEvent *xE, register DeviceIntPtr mouse, int count
         xevieEventSent = 0;
       else {
         xeviemouse = mouse;
+        #ifdef NX_DEBUG_INPUT
+        if (nxagentDebugInput == 1)
+        {
+          fprintf(stderr, "ProcessPointerEvent: Going to send XEVIE event.\n");
+        }
+        #endif
         WriteToClient(clients[xevieClientIndex], sizeof(xEvent), (char *)xE);
         return;
       }
@@ -3170,14 +3214,38 @@ ProcessPointerEvent (register xEvent *xE, register DeviceIntPtr mouse, int count
 #if !defined(XFree86Server) || !defined(XINPUT)
 	    xE->u.u.detail = butc->map[key];
 #endif
+	    #ifdef NX_DEBUG_INPUT
+	    if (xE->u.u.detail == 0)
+	    {
+		if (nxagentDebugInput == 1)
+		{
+		    fprintf(stderr, "ProcessPointerEvent: WARNING! detail == 0"
+			    " for ButtonPress.\n");
+		}
+		return;
+	    }
+	    #else
 	    if (xE->u.u.detail == 0)
 		return;
+	    #endif
 	    if (xE->u.u.detail <= 5)
 		butc->state |= (Button1Mask >> 1) << xE->u.u.detail;
 	    filters[MotionNotify] = Motion_Filter(butc);
 	    if (!grab)
+	    #ifdef NX_DEBUG_INPUT
+		if (CheckDeviceGrabs(mouse, xE, 0, count))
+		{
+		    if (nxagentDebugInput == 1)
+		    {
+			fprintf(stderr, "ProcessPointerEvent: CheckDeviceGrabs"
+				" returned True for ButtonPress.\n");
+		    }
+		    return;
+		}
+	    #else
 		if (CheckDeviceGrabs(mouse, xE, 0, count))
 		    return;
+	    #endif
 	    break;
 	case ButtonRelease: 
 	    mouse->valuator->motionHintWindow = NullWindow;
@@ -3189,8 +3257,20 @@ ProcessPointerEvent (register xEvent *xE, register DeviceIntPtr mouse, int count
 #if !defined(XFree86Server) || !defined(XINPUT)
 	    xE->u.u.detail = butc->map[key];
 #endif
+	    #ifdef NX_DEBUG_INPUT
 	    if (xE->u.u.detail == 0)
+	    {
+		if (nxagentDebugInput == 1)
+		{
+		    fprintf(stderr, "ProcessPointerEvent: WARNING! detail == 0"
+			    " for ButtonRelease.\n");
+		}
 		return;
+	    }
+	    #else
+	    if (xE->u.u.detail == 0)
+		return;
+	    #endif
 	    if (xE->u.u.detail <= 5)
 		butc->state &= ~((Button1Mask >> 1) << xE->u.u.detail);
 	    filters[MotionNotify] = Motion_Filter(butc);
@@ -3201,6 +3281,36 @@ ProcessPointerEvent (register xEvent *xE, register DeviceIntPtr mouse, int count
 	    FatalError("bogus pointer event from ddx");
 	}
     }
+    #ifdef NX_DEBUG_INPUT
+    else if (!CheckMotion(xE))
+    {
+	if (nxagentDebugInput == 1)
+	{
+	    fprintf(stderr, "ProcessPointerEvent: CheckMotion returned False"
+		    " for MotionNotify.\n");
+	}
+	return;
+    }
+    if (grab)
+    {
+	if (nxagentDebugInput == 1)
+	{
+	    fprintf(stderr, "ProcessPointerEvent: Going to deliver grabbed "
+		    "events (count = %d).\n", count);
+	}
+	DeliverGrabbedEvent(xE, mouse, deactivateGrab, count);
+    }
+    else
+    {
+	if (nxagentDebugInput == 1)
+	{
+	    fprintf(stderr, "ProcessPointerEvent: Going to deliver device "
+		    "events (count = %d).\n", count);
+	}
+	DeliverDeviceEvents(sprite.win, xE, NullGrab, NullWindow,
+			    mouse, count);
+    }
+    #else
     else if (!CheckMotion(xE))
 	return;
     if (grab)
@@ -3208,6 +3318,7 @@ ProcessPointerEvent (register xEvent *xE, register DeviceIntPtr mouse, int count
     else
 	DeliverDeviceEvents(sprite.win, xE, NullGrab, NullWindow,
 			    mouse, count);
+    #endif
     if (deactivateGrab)
         (*mouse->DeactivateGrab)(mouse);
 }
diff --git a/nx-X11/programs/Xserver/hw/nxagent/X/NXevents.c.NX.original b/nx-X11/programs/Xserver/hw/nxagent/X/NXevents.c.NX.original
index 91e2909..a8a2a68 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/X/NXevents.c.NX.original
+++ b/nx-X11/programs/Xserver/hw/nxagent/X/NXevents.c.NX.original
@@ -189,6 +189,10 @@ xEvent *xeviexE;
 #include "Windows.h"
 #include "Args.h"
 
+#ifdef NX_DEBUG_INPUT
+extern int nxagentDebugInput;
+#endif
+ 
 extern Display *nxagentDisplay;
 
 extern WindowPtr nxagentLastEnteredWindow;
@@ -1682,11 +1686,28 @@ TryClientEvents (ClientPtr client, xEvent *pEvents, int count, Mask mask,
     int i;
     int type;
 
-#ifdef DEBUG
+#ifdef NX_DEBUG_INPUT
+    if (grab && nxagentDebugInput && grab->window)
+    {
+	fprintf(stderr, "TryClientEvents: Grab window is [0x%x].\n",
+		(unsigned int)grab->window->drawable.id);
+	if (!SameClient(grab, client))
+		fprintf(stderr, "TryClientEvents: Events are going to be "
+			    "discarded.\n");
+    }
+#endif
+#if defined(DEBUG) || defined(NX_DEBUG_INPUT)
+#ifdef NX_DEBUG_INPUT
+    if (nxagentDebugInput == 1)
+	fprintf(stderr, "Event([%d, %d], mask=0x%x), client=%d",
+	pEvents->u.u.type, pEvents->u.u.detail, (unsigned int)mask,
+	client->index);
+#else
     if (debug_events) ErrorF(
 	"Event([%d, %d], mask=0x%x), client=%d",
 	pEvents->u.u.type, pEvents->u.u.detail, mask, client->index);
 #endif
+#endif
     if ((client) && (client != serverClient) && (!client->clientGone) &&
 	((filter == CantBeFiltered) || (mask & filter)))
     {
@@ -1700,10 +1721,17 @@ TryClientEvents (ClientPtr client, xEvent *pEvents, int count, Mask mask,
 		if (WID(inputInfo.pointer->valuator->motionHintWindow) ==
 		    pEvents->u.keyButtonPointer.event)
 		{
-#ifdef DEBUG
+#if defined(DEBUG) || defined(NX_DEBUG_INPUT)
+#ifdef NX_DEBUG_INPUT
+    if (nxagentDebugInput == 1)
+    {
+	fprintf(stderr,"\nmotionHintWindow == keyButtonPointer.event\n");
+    }
+#else
 		    if (debug_events) ErrorF("\n");
 	    fprintf(stderr,"motionHintWindow == keyButtonPointer.event\n");
 #endif
+#endif
 		    return 1; /* don't send, but pretend we did */
 		}
 		pEvents->u.u.detail = NotifyHint;
@@ -1740,16 +1768,26 @@ TryClientEvents (ClientPtr client, xEvent *pEvents, int count, Mask mask,
 	}
 
 	WriteEventsToClient(client, count, pEvents);
-#ifdef DEBUG
+#if defined(DEBUG) || defined(NX_DEBUG_INPUT)
+#ifdef NX_DEBUG_INPUT
+    if (nxagentDebugInput == 1)
+	fprintf(stderr, " delivered\n");
+#else
 	if (debug_events) ErrorF(  " delivered\n");
 #endif
+#endif
 	return 1;
     }
     else
     {
-#ifdef DEBUG
+#if defined(DEBUG) || defined(NX_DEBUG_INPUT)
+#ifdef NX_DEBUG_INPUT
+    if (nxagentDebugInput == 1)
+	fprintf(stderr, "\n");
+#else
 	if (debug_events) ErrorF("\n");
 #endif
+#endif
 	return 0;
     }
 }
@@ -3116,6 +3154,12 @@ ProcessPointerEvent (register xEvent *xE, register DeviceIntPtr mouse, int count
         xevieEventSent = 0;
       else {
         xeviemouse = mouse;
+        #ifdef NX_DEBUG_INPUT
+        if (nxagentDebugInput == 1)
+        {
+          fprintf(stderr, "ProcessPointerEvent: Going to send XEVIE event.\n");
+        }
+        #endif
         WriteToClient(clients[xevieClientIndex], sizeof(xEvent), (char *)xE);
         return;
       }
@@ -3170,14 +3214,38 @@ ProcessPointerEvent (register xEvent *xE, register DeviceIntPtr mouse, int count
 #if !defined(XFree86Server) || !defined(XINPUT)
 	    xE->u.u.detail = butc->map[key];
 #endif
+	    #ifdef NX_DEBUG_INPUT
+	    if (xE->u.u.detail == 0)
+	    {
+		if (nxagentDebugInput == 1)
+		{
+		    fprintf(stderr, "ProcessPointerEvent: WARNING! detail == 0"
+			    " for ButtonPress.\n");
+		}
+		return;
+	    }
+	    #else
 	    if (xE->u.u.detail == 0)
 		return;
+	    #endif
 	    if (xE->u.u.detail <= 5)
 		butc->state |= (Button1Mask >> 1) << xE->u.u.detail;
 	    filters[MotionNotify] = Motion_Filter(butc);
 	    if (!grab)
+	    #ifdef NX_DEBUG_INPUT
+		if (CheckDeviceGrabs(mouse, xE, 0, count))
+		{
+		    if (nxagentDebugInput == 1)
+		    {
+			fprintf(stderr, "ProcessPointerEvent: CheckDeviceGrabs"
+				" returned True for ButtonPress.\n");
+		    }
+		    return;
+		}
+	    #else
 		if (CheckDeviceGrabs(mouse, xE, 0, count))
 		    return;
+	    #endif
 	    break;
 	case ButtonRelease: 
 	    mouse->valuator->motionHintWindow = NullWindow;
@@ -3189,8 +3257,20 @@ ProcessPointerEvent (register xEvent *xE, register DeviceIntPtr mouse, int count
 #if !defined(XFree86Server) || !defined(XINPUT)
 	    xE->u.u.detail = butc->map[key];
 #endif
+	    #ifdef NX_DEBUG_INPUT
 	    if (xE->u.u.detail == 0)
+	    {
+		if (nxagentDebugInput == 1)
+		{
+		    fprintf(stderr, "ProcessPointerEvent: WARNING! detail == 0"
+			    " for ButtonRelease.\n");
+		}
 		return;
+	    }
+	    #else
+	    if (xE->u.u.detail == 0)
+		return;
+	    #endif
 	    if (xE->u.u.detail <= 5)
 		butc->state &= ~((Button1Mask >> 1) << xE->u.u.detail);
 	    filters[MotionNotify] = Motion_Filter(butc);
@@ -3201,6 +3281,36 @@ ProcessPointerEvent (register xEvent *xE, register DeviceIntPtr mouse, int count
 	    FatalError("bogus pointer event from ddx");
 	}
     }
+    #ifdef NX_DEBUG_INPUT
+    else if (!CheckMotion(xE))
+    {
+	if (nxagentDebugInput == 1)
+	{
+	    fprintf(stderr, "ProcessPointerEvent: CheckMotion returned False"
+		    " for MotionNotify.\n");
+	}
+	return;
+    }
+    if (grab)
+    {
+	if (nxagentDebugInput == 1)
+	{
+	    fprintf(stderr, "ProcessPointerEvent: Going to deliver grabbed "
+		    "events (count = %d).\n", count);
+	}
+	DeliverGrabbedEvent(xE, mouse, deactivateGrab, count);
+    }
+    else
+    {
+	if (nxagentDebugInput == 1)
+	{
+	    fprintf(stderr, "ProcessPointerEvent: Going to deliver device "
+		    "events (count = %d).\n", count);
+	}
+	DeliverDeviceEvents(sprite.win, xE, NullGrab, NullWindow,
+			    mouse, count);
+    }
+    #else
     else if (!CheckMotion(xE))
 	return;
     if (grab)
@@ -3208,6 +3318,7 @@ ProcessPointerEvent (register xEvent *xE, register DeviceIntPtr mouse, int count
     else
 	DeliverDeviceEvents(sprite.win, xE, NullGrab, NullWindow,
 			    mouse, count);
+    #endif
     if (deactivateGrab)
         (*mouse->DeactivateGrab)(mouse);
 }


hooks/post-receive
-- 
nx-libs.git (NX (redistributed))

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "nx-libs.git" (NX (redistributed)).




More information about the x2go-commits mailing list