diff -rup xen-3.0.4_1-src.orig/tools/ioemu/vnc.c xen-3.0.4_1-src.new/tools/ioemu/vnc.c
--- xen-3.0.4_1-src.orig/tools/ioemu/vnc.c 2007-03-14 15:12:23.000000000 -0400
+++ xen-3.0.4_1-src.new/tools/ioemu/vnc.c 2007-03-14 15:15:36.000000000 -0400
@@ -113,8 +113,6 @@ struct VncState
int visible_w;
int visible_h;
- int ctl_keys; /* Ctrl+Alt starts calibration */
- int shift_keys; /* Shift / CapsLock keys */
int numlock;
};
@@ -863,119 +861,40 @@ static void press_key(VncState *vs, int
static void do_key_event(VncState *vs, int down, uint32_t sym)
{
+ int keycode;
+ int numlock;
+
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);
- }
- }
+ keycode = keysym2scancode(vs->kbd_layout, sym);
+ numlock = keysym2numlock(vs->kbd_layout, sym);
- if (keycode & 0x80)
- kbd_put_keycode(0xe0);
- if (down)
- kbd_put_keycode(keycode & 0x7f);
- else
- kbd_put_keycode(keycode | 0x80);
- } else if (down) {
- int qemu_keysym = 0;
-
- if (sym <= 128) { /* normal ascii */
- int shifted = vs->shift_keys == 1 || vs->shift_keys == 2;
- qemu_keysym = sym;
- if (sym >= 'a' && sym <= 'z' && shifted)
- qemu_keysym -= 'a' - 'A';
- } else {
- switch (sym) {
- case XK_Up: qemu_keysym = QEMU_KEY_UP; break;
- case XK_Down: qemu_keysym = QEMU_KEY_DOWN; break;
- case XK_Left: qemu_keysym = QEMU_KEY_LEFT; break;
- case XK_Right: qemu_keysym = QEMU_KEY_RIGHT; break;
- case XK_Home: qemu_keysym = QEMU_KEY_HOME; break;
- case XK_End: qemu_keysym = QEMU_KEY_END; break;
- case XK_Page_Up: qemu_keysym = QEMU_KEY_PAGEUP; break;
- case XK_Page_Down: qemu_keysym = QEMU_KEY_PAGEDOWN; break;
- case XK_BackSpace: qemu_keysym = QEMU_KEY_BACKSPACE; break;
- case XK_Delete: qemu_keysym = QEMU_KEY_DELETE; break;
- case XK_Return:
- case XK_Linefeed: qemu_keysym = sym; break;
- default: break;
- }
+ /* 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);
}
- if (qemu_keysym != 0)
- kbd_put_keysym(qemu_keysym);
}
-
- if (down) {
- switch (sym) {
- case XK_Control_L:
- vs->ctl_keys |= 1;
- break;
-
- case XK_Alt_L:
- vs->ctl_keys |= 2;
- break;
-
- case XK_Shift_L:
- vs->shift_keys |= 1;
- break;
-
- default:
- break;
+ else if (numlock == -1) {
+ if (vs->numlock) {
+ vs->numlock = 0;
+ press_key(vs, XK_Num_Lock);
}
- } else {
- switch (sym) {
- case XK_Control_L:
- vs->ctl_keys &= ~1;
- break;
-
- case XK_Alt_L:
- vs->ctl_keys &= ~2;
- break;
-
- case XK_Shift_L:
- vs->shift_keys &= ~1;
- break;
-
- case XK_Caps_Lock:
- vs->shift_keys ^= 2;
- break;
+ }
- case XK_Num_Lock:
- vs->numlock = !vs->numlock;
- break;
+ if (keycode & 0x80)
+ kbd_put_keycode(0xe0);
+ if (down)
+ kbd_put_keycode(keycode & 0x7f);
+ else
+ kbd_put_keycode(keycode | 0x80);
- case XK_1 ... XK_9:
- if ((vs->ctl_keys & 3) != 3)
- break;
-
- console_select(sym - XK_1);
- if (is_graphic_console()) {
- /* tell the vga console to redisplay itself */
- vga_hw_invalidate();
- vnc_dpy_update(vs->ds, 0, 0, vs->ds->width, vs->ds->height);
- }
- break;
- }
- }
+ if (!down && sym == XK_Num_Lock)
+ vs->numlock = !vs->numlock;
}
static void key_event(VncState *vs, int down, uint32_t sym)
Only in xen-3.0.4_1-src.new/tools/ioemu: vnc.c~