WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] [qemu patches] Update patches upto change

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] [qemu patches] Update patches upto changeset 15036:dfbbb4d3b0dd.
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Tue, 15 May 2007 08:20:43 -0700
Delivery-date: Tue, 15 May 2007 08:25:07 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Christian Limpach <Christian.Limpach@xxxxxxxxxxxxx>
# Date 1178822125 -3600
# Node ID 16319e70f77d17b3524b6e02cca1a88e7515ed3c
# Parent  dfbbb4d3b0dd2107cfee2b07fab6f33cefc4719c
[qemu patches] Update patches upto changeset 15036:dfbbb4d3b0dd.

Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxxx>
---
 tools/ioemu/patches/vnc-numpad-handling |  231 --------------------------------
 tools/ioemu/patches/series              |    1 
 tools/ioemu/patches/vnc-keypad-handling |   81 +++++++++++
 3 files changed, 82 insertions(+), 231 deletions(-)

diff -r dfbbb4d3b0dd -r 16319e70f77d tools/ioemu/patches/series
--- a/tools/ioemu/patches/series        Thu May 10 19:33:05 2007 +0100
+++ b/tools/ioemu/patches/series        Thu May 10 19:35:25 2007 +0100
@@ -77,3 +77,4 @@ qemu-block-device-bounds-checks
 qemu-block-device-bounds-checks
 qemu-dma-null-pointer-check
 vnc-fix-text-display-shift-key
+vnc-keypad-handling
diff -r dfbbb4d3b0dd -r 16319e70f77d tools/ioemu/patches/vnc-keypad-handling
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/ioemu/patches/vnc-keypad-handling   Thu May 10 19:35:25 2007 +0100
@@ -0,0 +1,190 @@
+# HG changeset patch
+# User Christian Limpach <Christian.Limpach@xxxxxxxxxxxxx>
+# Date 1178821985 -3600
+# Node ID dfbbb4d3b0dd2107cfee2b07fab6f33cefc4719c
+# Parent  23c4790512dbc889c4deed8ae1f8d54813c4b474
+[qemu] Fix keypad handling for VNC.
+
+Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxxx>
+
+Index: ioemu/vnc.c
+===================================================================
+--- ioemu.orig/vnc.c   2007-05-10 19:34:49.000000000 +0100
++++ ioemu/vnc.c        2007-05-10 19:34:51.000000000 +0100
+@@ -909,6 +909,12 @@
+     }
+ }
+ 
++static void press_key(VncState *vs, int keysym)
++{
++    kbd_put_keycode(keysym2scancode(vs->kbd_layout, keysym) & 0x7f);
++    kbd_put_keycode(keysym2scancode(vs->kbd_layout, keysym) | 0x80);
++}
++
+ static void do_key_event(VncState *vs, int down, uint32_t sym)
+ {
+     int keycode;
+@@ -936,6 +942,28 @@
+             return;
+         }
+         break;
++    case 0x45:                        /* NumLock */
++      if (!down)
++          vs->modifiers_state[keycode] ^= 1;
++      break;
++    }
++
++    if (keycodeIsKeypad(vs->kbd_layout, keycode)) {
++        /* If the numlock state needs to change then simulate an additional
++           keypress before sending this one.  This will happen if the user
++           toggles numlock away from the VNC window.
++        */
++        if (keysymIsNumlock(vs->kbd_layout, sym & 0xFFFF)) {
++          if (!vs->modifiers_state[0x45]) {
++              vs->modifiers_state[0x45] = 1;
++              press_key(vs, 0xff7f);
++          }
++      } else {
++          if (vs->modifiers_state[0x45]) {
++              vs->modifiers_state[0x45] = 0;
++              press_key(vs, 0xff7f);
++          }
++        }
+     }
+ 
+     if (is_graphic_console()) {
+@@ -1427,6 +1455,7 @@
+     vs->kbd_layout = init_keyboard_layout(keyboard_layout);
+     if (!vs->kbd_layout)
+       exit(1);
++    vs->modifiers_state[0x45] = 1; /* NumLock on - on boot */
+ 
+     vs->ds->data = NULL;
+     vs->ds->dpy_update = vnc_dpy_update;
+Index: ioemu/keymaps.c
+===================================================================
+--- ioemu.orig/keymaps.c       2007-05-10 19:34:49.000000000 +0100
++++ ioemu/keymaps.c    2007-05-10 19:34:51.000000000 +0100
+@@ -32,6 +32,12 @@
+     return 0;
+ }
+ 
++struct key_range {
++    int start;
++    int end;
++    struct key_range *next;
++};
++
+ #define MAX_NORMAL_KEYCODE 512
+ #define MAX_EXTRA_COUNT 256
+ typedef struct {
+@@ -41,8 +47,34 @@
+       uint16_t keycode;
+     } keysym2keycode_extra[MAX_EXTRA_COUNT];
+     int extra_count;
++    struct key_range *keypad_range;
++    struct key_range *numlock_range;
+ } kbd_layout_t;
+ 
++static void add_to_key_range(struct key_range **krp, int code) {
++    struct key_range *kr;
++    for (kr = *krp; kr; kr = kr->next) {
++      if (code >= kr->start && code <= kr->end)
++          break;
++      if (code == kr->start - 1) {
++          kr->start--;
++          break;
++      }
++      if (code == kr->end + 1) {
++          kr->end++;
++          break;
++      }
++    }
++    if (kr == NULL) {
++      kr = qemu_mallocz(sizeof(*kr));
++      if (kr) {
++          kr->start = kr->end = code;
++          kr->next = *krp;
++          *krp = kr;
++      }
++    }
++}
++
+ static kbd_layout_t *parse_keyboard_layout(const char *language,
+                                          kbd_layout_t * k)
+ {
+@@ -87,7 +119,15 @@
+                     //                    fprintf(stderr, "Warning: unknown 
keysym %s\n", line);
+               } else {
+                   const char *rest = end_of_keysym + 1;
+-                  int keycode = strtol(rest, NULL, 0);
++                  char *rest2;
++                  int keycode = strtol(rest, &rest2, 0);
++
++                  if (rest && strstr(rest, "numlock")) {
++                      add_to_key_range(&k->keypad_range, keycode);
++                      add_to_key_range(&k->numlock_range, keysym);
++                      fprintf(stderr, "keypad keysym %04x keycode %d\n", 
keysym, keycode);
++                  }
++
+                   /* if(keycode&0x80)
+                      keycode=(keycode<<8)^0x80e0; */
+                   if (keysym < MAX_NORMAL_KEYCODE) {
+@@ -143,3 +183,25 @@
+     }
+     return 0;
+ }
++
++static int keycodeIsKeypad(void *kbd_layout, int keycode)
++{
++    kbd_layout_t *k = kbd_layout;
++    struct key_range *kr;
++
++    for (kr = k->keypad_range; kr; kr = kr->next)
++      if (keycode >= kr->start && keycode <= kr->end)
++          return 1;
++    return 0;
++}
++
++static int keysymIsNumlock(void *kbd_layout, int keysym)
++{
++    kbd_layout_t *k = kbd_layout;
++    struct key_range *kr;
++
++    for (kr = k->numlock_range; kr; kr = kr->next)
++      if (keysym >= kr->start && keysym <= kr->end)
++          return 1;
++    return 0;
++}
+Index: ioemu/vnc_keysym.h
+===================================================================
+--- ioemu.orig/vnc_keysym.h    2007-05-10 19:34:49.000000000 +0100
++++ ioemu/vnc_keysym.h 2007-05-10 19:34:51.000000000 +0100
+@@ -232,6 +232,19 @@
+ {"Home", 0xff50},      /* XK_Home */
+ {"End", 0xff57},       /* XK_End */
+ {"Scroll_Lock", 0xff14}, /* XK_Scroll_Lock */
++{"KP_Home", 0xff95},
++{"KP_Left", 0xff96},
++{"KP_Up", 0xff97},
++{"KP_Right", 0xff98},
++{"KP_Down", 0xff99},
++{"KP_Prior", 0xff9a},
++{"KP_Page_Up", 0xff9a},
++{"KP_Next", 0xff9b},
++{"KP_Page_Down", 0xff9b},
++{"KP_End", 0xff9c},
++{"KP_Begin", 0xff9d},
++{"KP_Insert", 0xff9e},
++{"KP_Delete", 0xff9f},
+ {"F1", 0xffbe},        /* XK_F1 */
+ {"F2", 0xffbf},        /* XK_F2 */
+ {"F3", 0xffc0},        /* XK_F3 */
+@@ -259,6 +272,7 @@
+ {"KP_8", 0xffb8},      /* XK_KP_8 */
+ {"KP_9", 0xffb9},      /* XK_KP_9 */
+ {"KP_Add", 0xffab},    /* XK_KP_Add */
++{"KP_Separator", 0xffac},/* XK_KP_Separator */
+ {"KP_Decimal", 0xffae},  /* XK_KP_Decimal */
+ {"KP_Divide", 0xffaf},   /* XK_KP_Divide */
+ {"KP_Enter", 0xff8d},    /* XK_KP_Enter */
diff -r dfbbb4d3b0dd -r 16319e70f77d tools/ioemu/patches/vnc-numpad-handling
--- a/tools/ioemu/patches/vnc-numpad-handling   Thu May 10 19:33:05 2007 +0100
+++ /dev/null   Thu Jan 01 00:00:00 1970 +0000
@@ -1,236 +0,0 @@
-# HG changeset patch
-# User Ewan Mellor <ewan@xxxxxxxxxxxxx>
-# Node ID c7f4a89eb054a1ad411da1e4cdc8aeda1a98c4fa
-# Parent  565cd8f32c70da8ae7dbaaeb9dff28aa8b6307e1
-Fix numpad handling in QEMU's VNC server.  The keymaps that we have include
-information on which keys change depending upon the numlock setting, but
-this isn't being used.  By forcing numlock on and off as necessary, when
-receiving these keysyms through the VNC connection, we ensure that the
-server's numlock status is the same as the client's.
-
-Signed-off-by: Ewan Mellor <ewan@xxxxxxxxxxxxx>
-
-Index: ioemu/keymaps.c
-===================================================================
---- ioemu.orig/keymaps.c       2006-12-06 23:41:30.000000000 +0000
-+++ ioemu/keymaps.c    2006-12-08 18:20:27.000000000 +0000
-@@ -36,8 +36,10 @@
- #define MAX_EXTRA_COUNT 256
- typedef struct {
-     uint16_t keysym2keycode[MAX_NORMAL_KEYCODE];
-+    int keysym2numlock[MAX_NORMAL_KEYCODE];
-     struct {
-       int keysym;
-+      int numlock;
-       uint16_t keycode;
-     } keysym2keycode_extra[MAX_EXTRA_COUNT];
-     int extra_count;
-@@ -50,6 +52,8 @@
-     char file_name[1024];
-     char line[1024];
-     int len;
-+    int *keycode2numlock;
-+    int i;
- 
-     snprintf(file_name, sizeof(file_name),
-              "%s/keymaps/%s", bios_dir, language);
-@@ -63,6 +67,15 @@
-               "Could not read keymap file: '%s'\n", file_name);
-       return 0;
-     }
-+
-+    /* Allocate a temporary map tracking which keycodes change when numlock is
-+       set.  Keycodes are 16 bit, so 65536 is safe. */
-+    keycode2numlock = malloc(65536 * sizeof(int));
-+    if (!keycode2numlock) {
-+        perror("Could not read keymap file");
-+      return 0;
-+    }
-+
-     for(;;) {
-       if (fgets(line, 1024, f) == NULL)
-             break;
-@@ -86,13 +99,19 @@
-               if (keysym == 0) {
-                     //                    fprintf(stderr, "Warning: unknown 
keysym %s\n", line);
-               } else {
--                  const char *rest = end_of_keysym + 1;
--                  int keycode = strtol(rest, NULL, 0);
-+                  char *rest = end_of_keysym + 1;
-+                  int keycode = strtol(rest, &rest, 0);
-+                  int numlock = (rest != NULL &&
-+                                 strstr(rest, "numlock") != NULL);
-+
-+                    keycode2numlock[keycode] = numlock;
-+
-                   /* if(keycode&0x80)
-                      keycode=(keycode<<8)^0x80e0; */
-                   if (keysym < MAX_NORMAL_KEYCODE) {
-                       //fprintf(stderr,"Setting keysym %s (%d) to 
%d\n",line,keysym,keycode);
-                       k->keysym2keycode[keysym] = keycode;
-+                      k->keysym2numlock[keysym] = numlock;
-                   } else {
-                       if (k->extra_count >= MAX_EXTRA_COUNT) {
-                           fprintf(stderr,
-@@ -107,6 +126,8 @@
-                               keysym = keysym;
-                           k->keysym2keycode_extra[k->extra_count].
-                               keycode = keycode;
-+                          k->keysym2keycode_extra[k->extra_count].
-+                              numlock = numlock;
-                           k->extra_count++;
-                       }
-                   }
-@@ -115,6 +136,22 @@
-       }
-     }
-     fclose(f);
-+
-+    for (i = 0; i < MAX_NORMAL_KEYCODE; i++) {
-+        if (k->keysym2numlock[i] != 1) {
-+            k->keysym2numlock[i] = -keycode2numlock[k->keysym2keycode[i]];
-+        }
-+    }
-+
-+    for (i = 0; i < k->extra_count; i++) {
-+        if (k->keysym2keycode_extra[i].numlock != 1) {
-+            k->keysym2keycode_extra[i].numlock =
-+                -keycode2numlock[k->keysym2keycode_extra[i].keycode];
-+        }
-+    }
-+
-+    free(keycode2numlock);
-+
-     return k;
- }
- 
-@@ -143,3 +180,25 @@
-     }
-     return 0;
- }
-+
-+/**
-+ * Returns 1 if the given keysym requires numlock to be pressed, -1 if it
-+ * requires it to be cleared, and 0 otherwise.
-+ */
-+static int keysym2numlock(void *kbd_layout, int keysym)
-+{
-+    kbd_layout_t *k = kbd_layout;
-+    if (keysym < MAX_NORMAL_KEYCODE) {
-+      return k->keysym2numlock[keysym];
-+    } else {
-+      int i;
-+#ifdef XK_ISO_Left_Tab
-+      if (keysym == XK_ISO_Left_Tab)
-+          keysym = XK_Tab;
-+#endif
-+      for (i = 0; i < k->extra_count; i++)
-+          if (k->keysym2keycode_extra[i].keysym == keysym)
-+              return k->keysym2keycode_extra[i].numlock;
-+    }
-+    return 0;
-+}
-Index: ioemu/vnc.c
-===================================================================
---- ioemu.orig/vnc.c   2006-12-08 18:18:26.000000000 +0000
-+++ ioemu/vnc.c        2006-12-08 18:19:43.000000000 +0000
-@@ -115,6 +115,7 @@
- 
-     int ctl_keys;               /* Ctrl+Alt starts calibration */
-     int shift_keys;             /* Shift / CapsLock keys */
-+    int numlock;
- };
- 
- #define DIRTY_PIXEL_BITS 64
-@@ -854,14 +855,40 @@
-     }
- }
- 
-+static void press_key(VncState *vs, int keycode)
-+{
-+    kbd_put_keycode(keysym2scancode(vs->kbd_layout, keycode) & 0x7f);
-+    kbd_put_keycode(keysym2scancode(vs->kbd_layout, keycode) | 0x80);
-+}
-+
- static void do_key_event(VncState *vs, int down, uint32_t sym)
- {
-     sym &= 0xFFFF;
- 
-     if (is_graphic_console()) {
-       int keycode;
-+      int numlock;
- 
-       keycode = keysym2scancode(vs->kbd_layout, sym);
-+      numlock = keysym2numlock(vs->kbd_layout, sym);
-+
-+        /* If the numlock state needs to change then simulate an additional
-+           keypress before sending this one.  This will happen if the user
-+           toggles numlock away from the VNC window.
-+        */
-+      if (numlock == 1) {
-+          if (!vs->numlock) {
-+              vs->numlock = 1;
-+              press_key(vs, XK_Num_Lock);
-+          }
-+      }
-+      else if (numlock == -1) {
-+          if (vs->numlock) {
-+              vs->numlock = 0;
-+              press_key(vs, XK_Num_Lock);
-+          }
-+        }
-+
-       if (keycode & 0x80)
-           kbd_put_keycode(0xe0);
-       if (down)
-@@ -932,6 +959,10 @@
-           vs->shift_keys ^= 2;
-           break;
- 
-+      case XK_Num_Lock:
-+          vs->numlock = !vs->numlock;
-+          break;
-+
-       case XK_1 ... XK_9:
-           if ((vs->ctl_keys & 3) != 3)
-               break;
-@@ -1355,6 +1386,7 @@
-     vs->lsock = -1;
-     vs->csock = -1;
-     vs->depth = 4;
-+    vs->numlock = 0;
- 
-     vs->ds = ds;
- 
-Index: ioemu/vnc_keysym.h
-===================================================================
---- ioemu.orig/vnc_keysym.h    2006-12-08 18:17:01.000000000 +0000
-+++ ioemu/vnc_keysym.h 2006-12-08 18:19:43.000000000 +0000
-@@ -231,6 +231,19 @@
- {"Home", 0xff50},      /* XK_Home */
- {"End", 0xff57},       /* XK_End */
- {"Scroll_Lock", 0xff14}, /* XK_Scroll_Lock */
-+{"KP_Home", 0xff95},
-+{"KP_Left", 0xff96},
-+{"KP_Up", 0xff97},
-+{"KP_Right", 0xff98},
-+{"KP_Down", 0xff99},
-+{"KP_Prior", 0xff9a},
-+{"KP_Page_Up", 0xff9a},
-+{"KP_Next", 0xff9b},
-+{"KP_Page_Down", 0xff9b},
-+{"KP_End", 0xff9c},
-+{"KP_Begin", 0xff9d},
-+{"KP_Insert", 0xff9e},
-+{"KP_Delete", 0xff9f},
- {"F1", 0xffbe},        /* XK_F1 */
- {"F2", 0xffbf},        /* XK_F2 */
- {"F3", 0xffc0},        /* XK_F3 */
-@@ -258,6 +271,7 @@
- {"KP_8", 0xffb8},      /* XK_KP_8 */
- {"KP_9", 0xffb9},      /* XK_KP_9 */
- {"KP_Add", 0xffab},    /* XK_KP_Add */
-+{"KP_Separator", 0xffac},/* XK_KP_Separator */
- {"KP_Decimal", 0xffae},  /* XK_KP_Decimal */
- {"KP_Divide", 0xffaf},   /* XK_KP_Divide */
- {"KP_Enter", 0xff8d},    /* XK_KP_Enter */

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] [qemu patches] Update patches upto changeset 15036:dfbbb4d3b0dd., Xen patchbot-unstable <=