Update to r4237.

- patches merged
  - tigervnc11-optionsdialog.patch
  - tigervnc11-rh607866.patch

Signed-off-by: Adam Tkac <atkac@redhat.com>
This commit is contained in:
Adam Tkac 2011-01-17 12:11:40 +01:00
parent c4f0e38be8
commit b9c453b224
5 changed files with 10 additions and 178 deletions

1
.gitignore vendored
View File

@ -1,3 +1,4 @@
tigervnc-1.0.90-20100721svn4113.tar.bz2
/tigervnc-1.0.90-20100813svn4123.tar.bz2
/tigervnc-1.0.90-20101208svn4225.tar.bz2
/tigervnc-1.0.90-20110117svn4237.tar.bz2

View File

@ -1 +1 @@
e30858eb41d040696b95901b3de45349 tigervnc-1.0.90-20101208svn4225.tar.bz2
435627c00fc0cd7c6cf3596a3b139e27 tigervnc-1.0.90-20110117svn4237.tar.bz2

View File

@ -1,8 +1,8 @@
%define snap 20101208svn4225
%define snap 20110117svn4237
Name: tigervnc
Version: 1.0.90
Release: 0.29.%{snap}%{?dist}
Release: 0.30.%{snap}%{?dist}
Summary: A TigerVNC remote display system
Group: User Interface/Desktops
@ -43,8 +43,6 @@ Patch0: tigervnc-102434.patch
Patch4: tigervnc-cookie.patch
Patch8: tigervnc-viewer-reparent.patch
Patch10: tigervnc11-ldnow.patch
Patch11: tigervnc11-optionsdialog.patch
Patch12: tigervnc11-rh607866.patch
%description
Virtual Network Computing (VNC) is a remote display system which
@ -130,10 +128,6 @@ This package contains license of the TigerVNC suite
%patch4 -p1 -b .cookie
%patch8 -p1 -b .viewer-reparent
%patch10 -p1 -b .ldnow
pushd unix/vncviewer
%patch11 -p0 -b .optionsdialog
popd
%patch12 -p1 -b .rh607866
cp -r /usr/share/xorg-x11-server-source/* unix/xserver
pushd unix/xserver
@ -303,6 +297,12 @@ fi
%doc LICENCE.TXT
%changelog
* Mon Jan 17 2011 Adam Tkac <atkac redhat com> 1.0.90-0.30.20110117svn4237
- update to r4237
- patches merged
- tigervnc11-optionsdialog.patch
- tigervnc11-rh607866.patch
* Fri Jan 14 2011 Adam Tkac <atkac redhat com> 1.0.90-0.29.20101208svn4225
- improve patch for keyboard issues

View File

@ -1,13 +0,0 @@
Index: OptionsDialog.h
===================================================================
--- OptionsDialog.h (revision 4225)
+++ OptionsDialog.h (revision 4232)
@@ -198,6 +198,8 @@
y += secVnc.height();
secPlain.move(xPad, y);
y += secPlain.height();
+
+ xPad -= SECOND_COL_XPAD;
#endif
/* Render "OK" and "Cancel" buttons */

View File

@ -1,156 +0,0 @@
diff -up tigervnc-1.0.90-20101208svn4225/unix/xserver/hw/vnc/Input.cc.rh607866 tigervnc-1.0.90-20101208svn4225/unix/xserver/hw/vnc/Input.cc
--- tigervnc-1.0.90-20101208svn4225/unix/xserver/hw/vnc/Input.cc.rh607866 2010-12-08 17:31:39.000000000 +0100
+++ tigervnc-1.0.90-20101208svn4225/unix/xserver/hw/vnc/Input.cc 2011-01-14 14:28:20.920142574 +0100
@@ -520,6 +520,49 @@ static struct altKeysym_t {
#define FREE_MAPS
#endif
+#if XORG >= 17
+/*
+ * Modifier keysyms must be handled differently. Instead of finding
+ * the right row and collumn in the keymap, directly press/release
+ * the keycode which is mapped as modifier with the same keysym.
+ *
+ * This will avoid issues when there are multiple modifier keysyms
+ * in the keymap but only some of them are mapped as modifiers in
+ * the modmap.
+ *
+ * Returns keycode of the modifier key.
+ */
+
+static inline int isModifier(KeySymsPtr keymap, KeyCode *modmap,
+ int maxKeysPerMod, rdr::U32 keysym)
+{
+ KeySym *map = keymap->map;
+ KeyCode minKeyCode = keymap->minKeyCode;
+ int mapWidth = keymap->mapWidth;
+ int i, j, k;
+
+ /* Find modifier index in the modmap */
+ for (i = 0; i < 8; i++) {
+ for (k = 0; k < maxKeysPerMod; k++) {
+ int index = i * maxKeysPerMod + k;
+ int keycode = modmap[index];
+
+ if (keycode == 0)
+ continue;
+
+ for (j = 0; j < mapWidth; j++) {
+ if (map[(keycode - minKeyCode) * mapWidth + j]
+ == keysym) {
+ return keycode;
+ }
+ }
+ }
+ }
+
+ return -1; /* Not a modifier */
+}
+#endif
+
void InputDevice::keyEvent(rdr::U32 keysym, bool down)
{
#if XORG < 17
@@ -533,6 +576,9 @@ void InputDevice::keyEvent(rdr::U32 keys
int mapWidth;
unsigned int i;
int j, k, state, maxKeysPerMod;
+#if XORG >= 18
+ KeybdCtrl ctrl;
+#endif
initInputDevice();
@@ -582,6 +628,18 @@ void InputDevice::keyEvent(rdr::U32 keys
maxKeyCode = keymap->maxKeyCode;
mapWidth = keymap->mapWidth;
+#if XORG >= 18
+ /*
+ * No server-side key repeating, please. Some clients won't work well,
+ * check https://bugzilla.redhat.com/show_bug.cgi?id=607866.
+ */
+ ctrl = keyboardDev->kbdfeed->ctrl;
+ if (ctrl.autoRepeat != FALSE) {
+ ctrl.autoRepeat = FALSE;
+ XkbSetRepeatKeys(keyboardDev, -1, ctrl.autoRepeat);
+ }
+#endif
+
/* find which modifier Mode_switch is on. */
int modeSwitchMapIndex = 0;
for (i = 3; i < 8; i++) {
@@ -603,7 +661,26 @@ void InputDevice::keyEvent(rdr::U32 keys
}
ModeSwitchFound:
+ int kc;
int col = 0;
+
+#if XORG >= 17
+ if ((kc = isModifier(keymap, modmap, maxKeysPerMod, keysym)) != -1) {
+ /*
+ * It is a modifier key event.
+ *
+ * Don't do any auto-repeat because the X server will translate
+ * each press into a release followed by a press.
+ */
+ if (IS_PRESSED(keyc, kc) && down) {
+ FREE_MAPS;
+ return;
+ }
+
+ goto press;
+ }
+#endif
+
if (maxKeysPerMod != 0) {
if ((state & (1 << ShiftMapIndex)) != 0)
col |= 1;
@@ -612,7 +689,7 @@ ModeSwitchFound:
col |= 2;
}
- int kc = KeysymToKeycode(keymap, keysym, &col);
+ kc = KeysymToKeycode(keymap, keysym, &col);
/*
* Sort out the "shifted Tab" mess. If we are sent a shifted Tab,
@@ -689,6 +766,7 @@ ModeSwitchFound:
return;
}
+#if XORG < 17
/*
* See if it's a modifier key. If so, then don't do any auto-repeat,
* because the X server will translate each press into a release
@@ -703,6 +781,17 @@ ModeSwitchFound:
}
}
}
+#else
+ /*
+ * If you would like to press a key which is already pressed then
+ * viewer didn't send the "release" event. In this case release it
+ * before the press.
+ */
+ if (IS_PRESSED(keyc, kc) && down) {
+ vlog.debug("KeyRelease for %d wasn't sent, releasing", kc);
+ pressKey(keyboardDev, kc, false, "fixing keycode");
+ }
+#endif
if (maxKeysPerMod != 0) {
ModifierState shift(keyboardDev, ShiftMapIndex);
@@ -724,8 +813,10 @@ ModeSwitchFound:
* pressKey call, otherwise fake modifier keypress can be lost.
*/
pressKey(keyboardDev, kc, down, "keycode");
- } else
+ } else {
+press:
pressKey(keyboardDev, kc, down, "keycode");
+ }
FREE_MAPS;