aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nxcompshad/CHANGELOG5
-rw-r--r--nxcompshad/Shadow.cpp3
-rw-r--r--nxcompshad/X11.cpp60
3 files changed, 52 insertions, 16 deletions
diff --git a/nxcompshad/CHANGELOG b/nxcompshad/CHANGELOG
index 79319b81a..8678d2159 100644
--- a/nxcompshad/CHANGELOG
+++ b/nxcompshad/CHANGELOG
@@ -1,5 +1,10 @@
ChangeLog:
+nxcompshad-3.3.0-3
+
+- Fixed TR01G02158. Keymap initialization could be incorrect because
+ of a type mismatch on 64 bit platforms.
+
nxcompshad-3.3.0-2
- Updated VERSION.
diff --git a/nxcompshad/Shadow.cpp b/nxcompshad/Shadow.cpp
index c7fb6b4a3..f9154aa25 100644
--- a/nxcompshad/Shadow.cpp
+++ b/nxcompshad/Shadow.cpp
@@ -466,6 +466,5 @@ void NXShadowInitKeymap(void *keysyms)
{
NXShadowKeymap = (KeySymsPtr) keysyms;
- logTest("NXShadowInitKeymap","KeySyms pointer [0x%p] mapWidth [%d]",
- (void *)NXShadowKeymap, NXShadowKeymap -> mapWidth);
+ logTest("NXShadowInitKeymap","KeySyms pointer [0x%p]", (void *)NXShadowKeymap);
}
diff --git a/nxcompshad/X11.cpp b/nxcompshad/X11.cpp
index 3971c8ea9..99333b0ec 100644
--- a/nxcompshad/X11.cpp
+++ b/nxcompshad/X11.cpp
@@ -23,6 +23,7 @@
#undef DEBUG
#include <X11/Xlibint.h>
+#include <X11/Xproto.h>
#include <X11/extensions/XTest.h>
#include <X11/keysym.h>
#include <string.h>
@@ -59,6 +60,8 @@ static KeyPressedRec *shadowKeyPressedPtr = NULL;
static KeySym *shadowKeysyms = NULL;
static KeySym *masterKeysyms = NULL;
+static KeySym *shadowKeymap = NULL;
+
static int shadowMinKey, shadowMaxKey, shadowMapWidth;
static int masterMinKey, masterMaxKey, masterMapWidth;
@@ -409,12 +412,35 @@ void Poller::shmInit(void)
void Poller::keymapShadowInit(Display *display)
{
- if (NXShadowKeymap)
+ int i, len;
+ CARD32 *map;
+
+ if (NXShadowKeymap != NULL)
{
- shadowMinKey = NXShadowKeymap -> minKeyCode;
- shadowMaxKey = NXShadowKeymap -> maxKeyCode;
+ shadowMinKey = NXShadowKeymap -> minKeyCode;
+ shadowMaxKey = NXShadowKeymap -> maxKeyCode;
shadowMapWidth = NXShadowKeymap -> mapWidth;
- shadowKeysyms = NXShadowKeymap -> map;
+
+ len = (shadowMaxKey - shadowMinKey + 1) * shadowMapWidth;
+
+ map = (CARD32 *) NXShadowKeymap -> map;
+
+ if (shadowKeymap != NULL)
+ {
+ free(shadowKeymap);
+ }
+
+ shadowKeymap = (KeySym *) malloc(len * sizeof(KeySym));
+
+ if (shadowKeymap != NULL)
+ {
+ for (i = 0; i < len; i++)
+ {
+ shadowKeymap[i] = map[i];
+ }
+
+ shadowKeysyms = shadowKeymap;
+ }
}
if (shadowKeysyms == NULL)
@@ -426,13 +452,16 @@ void Poller::keymapShadowInit(Display *display)
}
#ifdef DEBUG
- if (shadowKeysyms)
+ if (shadowKeysyms != NULL)
{
- for (int i = 0; i < (shadowMaxKey - shadowMinKey) * shadowMapWidth; i++)
+ for (i = 0; i < (shadowMaxKey - shadowMinKey + 1) * shadowMapWidth; i++)
{
- logDebug("Poller::keymapShadowInit", "keycode %d - keysym %x %s",
- (int)(i / shadowMapWidth), (unsigned int)shadowKeysyms[i],
- XKeysymToString(shadowKeysyms[i]));
+ if (i % shadowMapWidth == 0)
+ {
+ logDebug("Poller::keymapShadowInit", "keycode [%d]", (int) (i / shadowMapWidth));
+ }
+
+ logDebug("\tkeysym", " [%x] [%s]", (unsigned int) shadowKeysyms[i], XKeysymToString(shadowKeysyms[i]));
}
}
#endif
@@ -446,13 +475,16 @@ void Poller::keymapMasterInit()
&masterMapWidth);
#ifdef DEBUG
- if (masterKeysyms)
+ if (masterKeysyms != NULL)
{
- for (int i = 0; i < (masterMaxKey - masterMinKey) * masterMapWidth; i++)
+ for (int i = 0; i < (masterMaxKey - masterMinKey + 1) * masterMapWidth; i++)
{
- logDebug("Poller::keymapMasterInit", "keycode %d - keysym %x %s",
- (int)(i / masterMapWidth), (unsigned int)masterKeysyms[i],
- XKeysymToString(masterKeysyms[i]));
+ if (i % masterMapWidth == 0)
+ {
+ logDebug("Poller::keymapMasterInit", "keycode [%d]", (int) (i / masterMapWidth));
+ }
+
+ logDebug("\tkeysym", " [%x] [%s]", (unsigned int) masterKeysyms[i], XKeysymToString(masterKeysyms[i]));
}
}
#endif