source: trunk/packages/xen-common/xen-common/tools/ioemu/patches/vnc-access-monitor-vt @ 34

Last change on this file since 34 was 34, checked in by hartmans, 17 years ago

Add xen and xen-common

File size: 2.7 KB
Line 
1Index: ioemu/vnc.c
2===================================================================
3--- ioemu.orig/vnc.c    2006-12-06 23:46:11.000000000 +0000
4+++ ioemu/vnc.c 2006-12-06 23:46:11.000000000 +0000
5@@ -33,6 +33,10 @@
6 #include "vnc_keysym.h"
7 #include "keymaps.c"
8 
9+#define XK_MISCELLANY
10+#define XK_LATIN1
11+#include <X11/keysymdef.h>
12+
13 typedef struct Buffer
14 {
15     size_t capacity;
16@@ -96,6 +100,8 @@
17     int visible_h;
18 
19     int slow_client;
20+
21+    int ctl_keys;               /* Ctrl+Alt starts calibration */
22 };
23 
24 #define DIRTY_PIXEL_BITS 64
25@@ -796,16 +802,80 @@
26 
27 static void do_key_event(VncState *vs, int down, uint32_t sym)
28 {
29-    int keycode;
30+    sym &= 0xFFFF;
31 
32-    keycode = keysym2scancode(vs->kbd_layout, sym & 0xFFFF);
33+    if (is_graphic_console()) {
34+       int keycode;
35 
36-    if (keycode & 0x80)
37-       kbd_put_keycode(0xe0);
38-    if (down)
39-       kbd_put_keycode(keycode & 0x7f);
40-    else
41-       kbd_put_keycode(keycode | 0x80);
42+       keycode = keysym2scancode(vs->kbd_layout, sym);
43+       if (keycode & 0x80)
44+           kbd_put_keycode(0xe0);
45+       if (down)
46+           kbd_put_keycode(keycode & 0x7f);
47+       else
48+           kbd_put_keycode(keycode | 0x80);
49+    } else if (down) {
50+       int qemu_keysym = 0;
51+
52+       if (sym <= 128) /* normal ascii */
53+           qemu_keysym = sym;
54+       else {
55+           switch (sym) {
56+           case XK_Up: qemu_keysym = QEMU_KEY_UP; break;
57+           case XK_Down: qemu_keysym = QEMU_KEY_DOWN; break;
58+           case XK_Left: qemu_keysym = QEMU_KEY_LEFT; break;
59+           case XK_Right: qemu_keysym = QEMU_KEY_RIGHT; break;
60+           case XK_Home: qemu_keysym = QEMU_KEY_HOME; break;
61+           case XK_End: qemu_keysym = QEMU_KEY_END; break;
62+           case XK_Page_Up: qemu_keysym = QEMU_KEY_PAGEUP; break;
63+           case XK_Page_Down: qemu_keysym = QEMU_KEY_PAGEDOWN; break;
64+           case XK_BackSpace: qemu_keysym = QEMU_KEY_BACKSPACE; break;
65+           case XK_Delete: qemu_keysym = QEMU_KEY_DELETE; break;
66+           case XK_Return:
67+           case XK_Linefeed: qemu_keysym = sym; break;
68+           default: break;
69+           }
70+       }
71+       if (qemu_keysym != 0)
72+           kbd_put_keysym(qemu_keysym);
73+    }
74+
75+    if (down) {
76+       switch (sym) {
77+       case XK_Control_L:
78+           vs->ctl_keys |= 1;
79+           break;
80+
81+       case XK_Alt_L:
82+           vs->ctl_keys |= 2;
83+           break;
84+
85+       default:
86+           break;
87+       }
88+    } else {
89+       switch (sym) {
90+       case XK_Control_L:
91+           vs->ctl_keys &= ~1;
92+           break;
93+
94+       case XK_Alt_L:
95+           vs->ctl_keys &= ~2;
96+           break;
97+
98+       case XK_1 ... XK_9:
99+           if ((vs->ctl_keys & 3) != 3)
100+               break;
101+
102+           console_select(sym - XK_1);
103+           if (is_graphic_console()) {
104+               /* tell the vga console to redisplay itself */
105+               vga_hw_invalidate();
106+               vnc_dpy_update(vs->ds, 0, 0, vs->ds->width, vs->ds->height);
107+           }
108+           break;
109+       }
110+    }
111 }
112 
113 static void key_event(VncState *vs, int down, uint32_t sym)
Note: See TracBrowser for help on using the repository browser.