tigervnc/tigervnc11-rh611677.patch
Adam Tkac 1557084616 - separate Xvnc, vncpasswd and vncconfig to -server-minimal subpkg (#626946)
- 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>
2010-08-25 16:04:16 +02:00

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();
+ }
}
}