- move license to separate subpkg and Requires it from main subpkgs - Xvnc: handle situations when no modifiers exist well (#611677) Signed-off-by: Adam Tkac <atkac@redhat.com>
99 lines
2.5 KiB
Diff
99 lines
2.5 KiB
Diff
diff -up tigervnc-1.0.90-20100420svn4030/unix/xserver/hw/vnc/Input.cc.rh611677 tigervnc-1.0.90-20100420svn4030/unix/xserver/hw/vnc/Input.cc
|
|
--- tigervnc-1.0.90-20100420svn4030/unix/xserver/hw/vnc/Input.cc.rh611677 2010-08-24 17:40:00.511860227 +0200
|
|
+++ tigervnc-1.0.90-20100420svn4030/unix/xserver/hw/vnc/Input.cc 2010-08-24 17:49:23.169007409 +0200
|
|
@@ -322,6 +322,11 @@ public:
|
|
return;
|
|
}
|
|
|
|
+ if (maxKeysPerMod == 0) {
|
|
+ vlog.debug("Keyboard has no modifiers");
|
|
+ return;
|
|
+ }
|
|
+
|
|
keycode = modmap[modIndex * maxKeysPerMod];
|
|
xfree(modmap);
|
|
#else
|
|
@@ -355,6 +360,11 @@ public:
|
|
vlog.error("generate_modkeymap failed");
|
|
return;
|
|
}
|
|
+
|
|
+ if (maxKeysPerMod == 0) {
|
|
+ vlog.debug("Keyboard has no modifiers");
|
|
+ return;
|
|
+ }
|
|
#else
|
|
maxKeysPerMod = keyc->maxKeysPerModifier;
|
|
#endif
|
|
@@ -530,6 +540,9 @@ void InputDevice::keyEvent(rdr::U32 keys
|
|
return;
|
|
}
|
|
|
|
+ if (maxKeysPerMod == 0)
|
|
+ vlog.debug("Keyboard has no modifiers");
|
|
+
|
|
state = XkbStateFieldFromRec(&keyc->xkbInfo->state);
|
|
#else
|
|
keyc = keyboardDev->key;
|
|
@@ -565,11 +578,13 @@ void InputDevice::keyEvent(rdr::U32 keys
|
|
ModeSwitchFound:
|
|
|
|
int col = 0;
|
|
- if ((state & (1 << ShiftMapIndex)) != 0)
|
|
- col |= 1;
|
|
- if (modeSwitchMapIndex != 0 &&
|
|
- ((state & (1 << modeSwitchMapIndex))) != 0)
|
|
- col |= 2;
|
|
+ if (maxKeysPerMod != 0) {
|
|
+ if ((state & (1 << ShiftMapIndex)) != 0)
|
|
+ col |= 1;
|
|
+ if (modeSwitchMapIndex != 0 &&
|
|
+ ((state & (1 << modeSwitchMapIndex))) != 0)
|
|
+ col |= 2;
|
|
+ }
|
|
|
|
int kc = KeysymToKeycode(keymap, keysym, &col);
|
|
|
|
@@ -581,7 +596,8 @@ ModeSwitchFound:
|
|
* We never get ISO_Left_Tab here because it's already been translated
|
|
* in VNCSConnectionST.
|
|
*/
|
|
- if (keysym == XK_Tab && ((state & (1 << ShiftMapIndex))) != 0)
|
|
+ if (maxKeysPerMod != 0 && keysym == XK_Tab &&
|
|
+ ((state & (1 << ShiftMapIndex))) != 0)
|
|
col |= 1;
|
|
|
|
if (kc == 0) {
|
|
@@ -662,18 +678,20 @@ ModeSwitchFound:
|
|
}
|
|
}
|
|
|
|
- ModifierState shift(keyboardDev, ShiftMapIndex);
|
|
- ModifierState modeSwitch(keyboardDev, modeSwitchMapIndex);
|
|
- if (down) {
|
|
- if (col & 1)
|
|
- shift.press();
|
|
- else
|
|
- shift.release();
|
|
- if (modeSwitchMapIndex) {
|
|
- if (col & 2)
|
|
- modeSwitch.press();
|
|
+ if (maxKeysPerMod != 0) {
|
|
+ ModifierState shift(keyboardDev, ShiftMapIndex);
|
|
+ ModifierState modeSwitch(keyboardDev, modeSwitchMapIndex);
|
|
+ if (down) {
|
|
+ if (col & 1)
|
|
+ shift.press();
|
|
else
|
|
- modeSwitch.release();
|
|
+ shift.release();
|
|
+ if (modeSwitchMapIndex) {
|
|
+ if (col & 2)
|
|
+ modeSwitch.press();
|
|
+ else
|
|
+ modeSwitch.release();
|
|
+ }
|
|
}
|
|
}
|
|
|