Magellan Linux

Contents of /trunk/vnc/patches/vnc-server-mieq.patch

Parent Directory Parent Directory | Revision Log Revision Log


Revision 639 - (show annotations) (download)
Tue Jun 3 20:56:41 2008 UTC (15 years, 11 months ago) by niro
File size: 19659 byte(s)
-renamed patch

1 diff -up vnc-4_1_2-unixsrc/unix/xorg-x11-server-source/hw/vnc/XserverDesktop.cc.mieq vnc-4_1_2-unixsrc/unix/xorg-x11-server-source/hw/vnc/XserverDesktop.cc
2 --- vnc-4_1_2-unixsrc/unix/xorg-x11-server-source/hw/vnc/XserverDesktop.cc.mieq 2006-05-15 18:56:20.000000000 +0200
3 +++ vnc-4_1_2-unixsrc/unix/xorg-x11-server-source/hw/vnc/XserverDesktop.cc 2008-03-05 12:25:06.000000000 +0100
4 @@ -50,12 +50,20 @@ extern char *display;
5 #include "resource.h"
6 #include "cursorstr.h"
7 #include "windowstr.h"
8 +#include "mi/mi.h"
9 #define XK_CYRILLIC
10 #include "keysym.h"
11 #undef public
12 #undef class
13 }
14
15 +static xEvent *eventq = NULL;
16 +static DeviceIntPtr vncKeyboard = NULL;
17 +static DeviceIntPtr vncMouse = NULL;
18 +
19 +static int vfbKeybdProc (DeviceIntPtr pDev, int onoff);
20 +static int vfbMouseProc (DeviceIntPtr pDev, int onoff);
21 +
22 using namespace rfb;
23 using namespace network;
24
25 @@ -202,6 +210,21 @@ XserverDesktop::XserverDesktop(ScreenPtr
26
27 if (httpListener)
28 httpServer = new FileHTTPServer(this);
29 +
30 +// XXX Memory leak here, eventq is not free()-d because it has to exist till server exits
31 + if (!eventq)
32 + eventq = (xEvent *) xcalloc(sizeof(xEvent), GetMaximumEventsNum());
33 + if (!eventq)
34 + FatalError("couldn't allocate room for events\n");
35 +
36 + if (vncMouse == NULL) {
37 + vncMouse = AddInputDevice(vfbMouseProc, TRUE);
38 + RegisterPointerDevice (vncMouse);
39 + }
40 + if (vncKeyboard == NULL) {
41 + vncKeyboard = AddInputDevice(vfbKeybdProc, TRUE);
42 + RegisterKeyboardDevice (vncKeyboard);
43 + }
44 }
45
46 XserverDesktop::~XserverDesktop()
47 @@ -495,7 +518,7 @@ void XserverDesktop::positionCursor()
48 {
49 if (!cursorPos.equals(oldCursorPos)) {
50 oldCursorPos = cursorPos;
51 - (*pScreen->SetCursorPosition) (pScreen, cursorPos.x, cursorPos.y, FALSE);
52 +// (*pScreen->SetCursorPosition) (pScreen, cursorPos.x, cursorPos.y, FALSE);
53 server->setCursorPos(cursorPos);
54 server->tryUpdate();
55 }
56 @@ -660,8 +683,8 @@ void XserverDesktop::approveConnection(v
57
58 void XserverDesktop::pointerEvent(const Point& pos, int buttonMask)
59 {
60 - xEvent ev;
61 - DevicePtr dev = LookupPointerDevice();
62 + BYTE detail;
63 + int i, j, n, valuators[2];
64
65 // SetCursorPosition seems to be very expensive (at least on XFree86 3.3.6
66 // for S3), so we delay calling it until positionCursor() is called at the
67 @@ -670,14 +693,14 @@ void XserverDesktop::pointerEvent(const
68
69 NewCurrentScreen(pScreen, pos.x, pos.y);
70
71 - ev.u.u.type = MotionNotify;
72 - ev.u.u.detail = 0;
73 - ev.u.keyButtonPointer.rootX = pos.x;
74 - ev.u.keyButtonPointer.rootY = pos.y;
75 - ev.u.keyButtonPointer.time = GetTimeInMillis();
76 -
77 - if (!pos.equals(cursorPos))
78 - (*dev->processInputProc)(&ev, (DeviceIntPtr)dev, 1);
79 + if (!pos.equals(cursorPos)) {
80 + valuators[0] = pos.x;
81 + valuators[1] = pos.y;
82 + n = GetPointerEvents (eventq, vncMouse, MotionNotify, 0,
83 + POINTER_ABSOLUTE, 0, 2, valuators);
84 + for (i = 0; i < n; i++)
85 + mieqEnqueue (vncMouse, eventq + i);
86 + }
87
88 for (int i = 0; i < 5; i++) {
89 if ((buttonMask ^ oldButtonMask) & (1<<i)) {
90 @@ -685,12 +708,15 @@ void XserverDesktop::pointerEvent(const
91 // God knows why but some idiot decided to conditionally move the pointer
92 // mapping out of DIX, so we guess here that if XINPUT is defined we have
93 // to do it ourselves...
94 - ev.u.u.detail = ((DeviceIntPtr)dev)->button->map[i + 1];
95 + detail = vncMouse->button->map[i + 1];
96 #else
97 - ev.u.u.detail = i + 1;
98 + detail = i + 1;
99 #endif
100 - ev.u.u.type = (buttonMask & (1<<i)) ? ButtonPress : ButtonRelease;
101 - (*dev->processInputProc)(&ev, (DeviceIntPtr)dev, 1);
102 + n = GetPointerEvents (eventq, vncMouse, (buttonMask & (1<<i)) ?
103 + ButtonPress : ButtonRelease,
104 + detail, POINTER_RELATIVE, 0, 0, NULL);
105 + for (j = 0; j < n; j++)
106 + mieqEnqueue (vncMouse, eventq + j);
107 }
108 }
109
110 @@ -771,8 +797,8 @@ void XserverDesktop::lookup(int index, i
111
112 class ModifierState {
113 public:
114 - ModifierState(DeviceIntPtr dev_, int modIndex_)
115 - : dev(dev_), modIndex(modIndex_), nKeys(0), keys(0), pressed(false)
116 + ModifierState(int modIndex_)
117 + : modIndex(modIndex_), nKeys(0), keys(0), pressed(false)
118 {
119 }
120 ~ModifierState() {
121 @@ -781,7 +807,7 @@ public:
122 delete [] keys;
123 }
124 void press() {
125 - KeyClassPtr keyc = dev->key;
126 + KeyClassPtr keyc = vncKeyboard->key;
127 if (!(keyc->state & (1<<modIndex))) {
128 tempKeyEvent(keyc->modifierKeyMap[modIndex * keyc->maxKeysPerModifier],
129 true);
130 @@ -789,7 +815,7 @@ public:
131 }
132 }
133 void release() {
134 - KeyClassPtr keyc = dev->key;
135 + KeyClassPtr keyc = vncKeyboard->key;
136 if (keyc->state & (1<<modIndex)) {
137 for (int k = 0; k < keyc->maxKeysPerModifier; k++) {
138 int keycode
139 @@ -802,20 +828,19 @@ public:
140 private:
141 void tempKeyEvent(int keycode, bool down) {
142 if (keycode) {
143 - if (!keys) keys = new int[dev->key->maxKeysPerModifier];
144 + if (!keys) keys = new int[vncKeyboard->key->maxKeysPerModifier];
145 keys[nKeys++] = keycode;
146 generateXKeyEvent(keycode, down);
147 }
148 }
149 void generateXKeyEvent(int keycode, bool down) {
150 - xEvent ev;
151 - ev.u.u.type = down ? KeyPress : KeyRelease;
152 - ev.u.u.detail = keycode;
153 - ev.u.keyButtonPointer.time = GetTimeInMillis();
154 - (*dev->c_public.processInputProc)(&ev, dev, 1);
155 + int i, n;
156 + n = GetKeyboardEvents (eventq, vncKeyboard,
157 + down ? KeyPress : KeyRelease, keycode);
158 + for (i = 0; i < n; i++)
159 + mieqEnqueue (vncKeyboard, eventq + i);
160 vlog.debug("fake keycode %d %s", keycode, down ? "down" : "up");
161 }
162 - DeviceIntPtr dev;
163 int modIndex;
164 int nKeys;
165 int* keys;
166 @@ -888,16 +913,16 @@ void XserverDesktop::keyEvent(rdr::U32 k
167 vlog.debug("Ignoring caps lock");
168 return;
169 }
170 - DeviceIntPtr dev = (DeviceIntPtr)LookupKeyboardDevice();
171 - KeyClassPtr keyc = dev->key;
172 + KeyClassPtr keyc = vncKeyboard->key;
173 KeySymsPtr keymap = &keyc->curKeySyms;
174 + int i, j, k, n;
175
176 // find which modifier Mode_switch is on.
177 int modeSwitchMapIndex = 0;
178 - for (int i = 3; i < 8; i++) {
179 - for (int k = 0; k < keyc->maxKeysPerModifier; k++) {
180 + for (i = 3; i < 8; i++) {
181 + for (k = 0; k < keyc->maxKeysPerModifier; k++) {
182 int keycode = keyc->modifierKeyMap[i * keyc->maxKeysPerModifier + k];
183 - for (int j = 0; j < keymap->mapWidth; j++) {
184 + for (j = 0; j < keymap->mapWidth; j++) {
185 if (keycode != 0 &&
186 keymap->map[(keycode - keymap->minKeyCode)
187 * keymap->mapWidth + j] == XK_Mode_switch)
188 @@ -926,7 +951,7 @@ void XserverDesktop::keyEvent(rdr::U32 k
189 if (kc == 0) {
190 // Not a direct match in the local keyboard mapping. Check for alternative
191 // keysyms with the same meaning.
192 - for (int i = 0; i < sizeof(altKeysym) / sizeof(altKeysym_t); i++) {
193 + for (i = 0; i < sizeof(altKeysym) / sizeof(altKeysym_t); i++) {
194 if (keysym == altKeysym[i].a)
195 kc = KeysymToKeycode(keymap, altKeysym[i].b, &col);
196 else if (keysym == altKeysym[i].b)
197 @@ -954,16 +979,16 @@ void XserverDesktop::keyEvent(rdr::U32 k
198
199 // See if it's a modifier key. If so, then don't do any auto-repeat, because
200 // the X server will translate each press into a release followed by a press.
201 - for (int i = 0; i < 8; i++) {
202 - for (int k = 0; k < keyc->maxKeysPerModifier; k++) {
203 + for (i = 0; i < 8; i++) {
204 + for (k = 0; k < keyc->maxKeysPerModifier; k++) {
205 if (kc == keyc->modifierKeyMap[i * keyc->maxKeysPerModifier + k] &&
206 IS_PRESSED(keyc,kc) && down)
207 return;
208 }
209 }
210
211 - ModifierState shift(dev, ShiftMapIndex);
212 - ModifierState modeSwitch(dev, modeSwitchMapIndex);
213 + ModifierState shift(ShiftMapIndex);
214 + ModifierState modeSwitch(modeSwitchMapIndex);
215 if (down) {
216 if (col & 1)
217 shift.press();
218 @@ -977,11 +1002,10 @@ void XserverDesktop::keyEvent(rdr::U32 k
219 }
220 }
221 vlog.debug("keycode %d %s", kc, down ? "down" : "up");
222 - xEvent ev;
223 - ev.u.u.type = down ? KeyPress : KeyRelease;
224 - ev.u.u.detail = kc;
225 - ev.u.keyButtonPointer.time = GetTimeInMillis();
226 - (*dev->c_public.processInputProc)(&ev, dev, 1);
227 + n = GetKeyboardEvents (eventq, vncKeyboard, down ? KeyPress : KeyRelease,
228 + kc);
229 + for (i = 0; i < n; i++)
230 + mieqEnqueue (vncKeyboard, eventq + i);
231 }
232
233
234 @@ -1150,3 +1174,208 @@ static KeyCode KeysymToKeycode(KeySymsPt
235 }
236 return 0;
237 }
238 +
239 +void vncRingBell(int percent, int pitch, int duration)
240 +{
241 + if (percent > 0)
242 + vncBell();
243 +}
244 +
245 +/* Fairly standard US PC Keyboard */
246 +
247 +#define VFB_MIN_KEY 8
248 +#define VFB_MAX_KEY 255
249 +#define VFB_MAP_LEN (VFB_MAX_KEY - VFB_MIN_KEY + 1)
250 +#define KEYSYMS_PER_KEY 2
251 +KeySym keyboardMap[VFB_MAP_LEN * KEYSYMS_PER_KEY] = {
252 + NoSymbol, NoSymbol,
253 + XK_Escape, NoSymbol,
254 + XK_1, XK_exclam,
255 + XK_2, XK_at,
256 + XK_3, XK_numbersign,
257 + XK_4, XK_dollar,
258 + XK_5, XK_percent,
259 + XK_6, XK_asciicircum,
260 + XK_7, XK_ampersand,
261 + XK_8, XK_asterisk,
262 + XK_9, XK_parenleft,
263 + XK_0, XK_parenright,
264 + XK_minus, XK_underscore,
265 + XK_equal, XK_plus,
266 + XK_BackSpace, NoSymbol,
267 + XK_Tab, NoSymbol,
268 + XK_q, XK_Q,
269 + XK_w, XK_W,
270 + XK_e, XK_E,
271 + XK_r, XK_R,
272 + XK_t, XK_T,
273 + XK_y, XK_Y,
274 + XK_u, XK_U,
275 + XK_i, XK_I,
276 + XK_o, XK_O,
277 + XK_p, XK_P,
278 + XK_bracketleft, XK_braceleft,
279 + XK_bracketright, XK_braceright,
280 + XK_Return, NoSymbol,
281 + XK_Control_L, NoSymbol,
282 + XK_a, XK_A,
283 + XK_s, XK_S,
284 + XK_d, XK_D,
285 + XK_f, XK_F,
286 + XK_g, XK_G,
287 + XK_h, XK_H,
288 + XK_j, XK_J,
289 + XK_k, XK_K,
290 + XK_l, XK_L,
291 + XK_semicolon, XK_colon,
292 + XK_apostrophe, XK_quotedbl,
293 + XK_grave, XK_asciitilde,
294 + XK_Shift_L, NoSymbol,
295 + XK_backslash, XK_bar,
296 + XK_z, XK_Z,
297 + XK_x, XK_X,
298 + XK_c, XK_C,
299 + XK_v, XK_V,
300 + XK_b, XK_B,
301 + XK_n, XK_N,
302 + XK_m, XK_M,
303 + XK_comma, XK_less,
304 + XK_period, XK_greater,
305 + XK_slash, XK_question,
306 + XK_Shift_R, NoSymbol,
307 + XK_KP_Multiply, NoSymbol,
308 + XK_Alt_L, XK_Meta_L,
309 + XK_space, NoSymbol,
310 + /*XK_Caps_Lock*/ NoSymbol, NoSymbol,
311 + XK_F1, NoSymbol,
312 + XK_F2, NoSymbol,
313 + XK_F3, NoSymbol,
314 + XK_F4, NoSymbol,
315 + XK_F5, NoSymbol,
316 + XK_F6, NoSymbol,
317 + XK_F7, NoSymbol,
318 + XK_F8, NoSymbol,
319 + XK_F9, NoSymbol,
320 + XK_F10, NoSymbol,
321 + XK_Num_Lock, XK_Pointer_EnableKeys,
322 + XK_Scroll_Lock, NoSymbol,
323 + XK_KP_Home, XK_KP_7,
324 + XK_KP_Up, XK_KP_8,
325 + XK_KP_Prior, XK_KP_9,
326 + XK_KP_Subtract, NoSymbol,
327 + XK_KP_Left, XK_KP_4,
328 + XK_KP_Begin, XK_KP_5,
329 + XK_KP_Right, XK_KP_6,
330 + XK_KP_Add, NoSymbol,
331 + XK_KP_End, XK_KP_1,
332 + XK_KP_Down, XK_KP_2,
333 + XK_KP_Next, XK_KP_3,
334 + XK_KP_Insert, XK_KP_0,
335 + XK_KP_Delete, XK_KP_Decimal,
336 + NoSymbol, NoSymbol,
337 + NoSymbol, NoSymbol,
338 + NoSymbol, NoSymbol,
339 + XK_F11, NoSymbol,
340 + XK_F12, NoSymbol,
341 + XK_Home, NoSymbol,
342 + XK_Up, NoSymbol,
343 + XK_Prior, NoSymbol,
344 + XK_Left, NoSymbol,
345 + NoSymbol, NoSymbol,
346 + XK_Right, NoSymbol,
347 + XK_End, NoSymbol,
348 + XK_Down, NoSymbol,
349 + XK_Next, NoSymbol,
350 + XK_Insert, NoSymbol,
351 + XK_Delete, NoSymbol,
352 + XK_KP_Enter, NoSymbol,
353 + XK_Control_R, NoSymbol,
354 + XK_Pause, XK_Break,
355 + XK_Print, XK_Execute,
356 + XK_KP_Divide, NoSymbol,
357 + XK_Alt_R, XK_Meta_R,
358 +};
359 +
360 +static Bool GetMappings(KeySymsPtr pKeySyms, CARD8 *pModMap)
361 +{
362 + int i;
363 +
364 + for (i = 0; i < MAP_LENGTH; i++)
365 + pModMap[i] = NoSymbol;
366 +
367 + for (i = 0; i < VFB_MAP_LEN; i++) {
368 + if (keyboardMap[i * KEYSYMS_PER_KEY] == XK_Caps_Lock)
369 + pModMap[i + VFB_MIN_KEY] = LockMask;
370 + else if (keyboardMap[i * KEYSYMS_PER_KEY] == XK_Shift_L ||
371 + keyboardMap[i * KEYSYMS_PER_KEY] == XK_Shift_R)
372 + pModMap[i + VFB_MIN_KEY] = ShiftMask;
373 + else if (keyboardMap[i * KEYSYMS_PER_KEY] == XK_Control_L ||
374 + keyboardMap[i * KEYSYMS_PER_KEY] == XK_Control_R) {
375 + pModMap[i + VFB_MIN_KEY] = ControlMask;
376 + }
377 + else if (keyboardMap[i * KEYSYMS_PER_KEY] == XK_Alt_L ||
378 + keyboardMap[i * KEYSYMS_PER_KEY] == XK_Alt_R)
379 + pModMap[i + VFB_MIN_KEY] = Mod1Mask;
380 + }
381 +
382 + pKeySyms->minKeyCode = VFB_MIN_KEY;
383 + pKeySyms->maxKeyCode = VFB_MAX_KEY;
384 + pKeySyms->mapWidth = KEYSYMS_PER_KEY;
385 + pKeySyms->map = keyboardMap;
386 +
387 + return TRUE;
388 +}
389 +
390 +static int vfbKeybdProc(DeviceIntPtr pDev, int onoff)
391 +{
392 + KeySymsRec keySyms;
393 + CARD8 modMap[MAP_LENGTH];
394 +
395 + switch (onoff)
396 + {
397 + case DEVICE_INIT:
398 + GetMappings(&keySyms, modMap);
399 + InitKeyboardDeviceStruct(&pDev->c_public, &keySyms, modMap,
400 + (BellProcPtr)vncRingBell, (KbdCtrlProcPtr)NoopDDA);
401 + break;
402 + case DEVICE_ON:
403 + pDev->c_public.on = TRUE;
404 + break;
405 + case DEVICE_OFF:
406 + pDev->c_public.on = FALSE;
407 + break;
408 + case DEVICE_CLOSE:
409 + break;
410 + }
411 + return Success;
412 +}
413 +
414 +static int vfbMouseProc(DeviceIntPtr pDev, int onoff)
415 +{
416 + BYTE map[6];
417 +
418 + switch (onoff)
419 + {
420 + case DEVICE_INIT:
421 + map[1] = 1;
422 + map[2] = 2;
423 + map[3] = 3;
424 + map[4] = 4;
425 + map[5] = 5;
426 + InitPointerDeviceStruct(&pDev->c_public, map, 5, GetMotionHistory,
427 + (PtrCtrlProcPtr)NoopDDA, GetMotionHistorySize(), 2);
428 + break;
429 +
430 + case DEVICE_ON:
431 + pDev->c_public.on = TRUE;
432 + break;
433 +
434 + case DEVICE_OFF:
435 + pDev->c_public.on = FALSE;
436 + break;
437 +
438 + case DEVICE_CLOSE:
439 + break;
440 + }
441 + return Success;
442 +}
443 diff -up vnc-4_1_2-unixsrc/unix/xorg-x11-server-source/hw/vnc/xvnc.cc.mieq vnc-4_1_2-unixsrc/unix/xorg-x11-server-source/hw/vnc/xvnc.cc
444 --- vnc-4_1_2-unixsrc/unix/xorg-x11-server-source/hw/vnc/xvnc.cc.mieq 2008-03-04 12:08:05.000000000 +0100
445 +++ vnc-4_1_2-unixsrc/unix/xorg-x11-server-source/hw/vnc/xvnc.cc 2008-03-05 11:52:34.000000000 +0100
446 @@ -125,6 +125,8 @@ static bool displaySpecified = false;
447 static bool wellKnownSocketsCreated = false;
448 static char displayNumStr[16];
449
450 +extern void vncRingBell (int percent, int pitch, int duration);
451 +
452 #define swapcopy16(_dst, _src) \
453 if (needswap) { CARD16 _s = _src; cpswaps(_s, _dst); } \
454 else _dst = _src;
455 @@ -925,7 +927,7 @@ void InitOutput(ScreenInfo *screenInfo,
456 int SelectWaitTime = 10000; /* usec */
457 #endif
458
459 -Bool LegalModifier(unsigned int key, DevicePtr pDev)
460 +Bool LegalModifier(unsigned int key, DeviceIntPtr pDev)
461 {
462 return TRUE;
463 }
464 @@ -936,223 +938,14 @@ void ProcessInputEvents()
465 miPointerUpdate();
466 }
467
468 -/* Fairly standard US PC Keyboard */
469 -
470 -#define VFB_MIN_KEY 8
471 -#define VFB_MAX_KEY 255
472 -#define VFB_MAP_LEN (VFB_MAX_KEY - VFB_MIN_KEY + 1)
473 -#define KEYSYMS_PER_KEY 2
474 -KeySym keyboardMap[VFB_MAP_LEN * KEYSYMS_PER_KEY] = {
475 - NoSymbol, NoSymbol,
476 - XK_Escape, NoSymbol,
477 - XK_1, XK_exclam,
478 - XK_2, XK_at,
479 - XK_3, XK_numbersign,
480 - XK_4, XK_dollar,
481 - XK_5, XK_percent,
482 - XK_6, XK_asciicircum,
483 - XK_7, XK_ampersand,
484 - XK_8, XK_asterisk,
485 - XK_9, XK_parenleft,
486 - XK_0, XK_parenright,
487 - XK_minus, XK_underscore,
488 - XK_equal, XK_plus,
489 - XK_BackSpace, NoSymbol,
490 - XK_Tab, NoSymbol,
491 - XK_q, XK_Q,
492 - XK_w, XK_W,
493 - XK_e, XK_E,
494 - XK_r, XK_R,
495 - XK_t, XK_T,
496 - XK_y, XK_Y,
497 - XK_u, XK_U,
498 - XK_i, XK_I,
499 - XK_o, XK_O,
500 - XK_p, XK_P,
501 - XK_bracketleft, XK_braceleft,
502 - XK_bracketright, XK_braceright,
503 - XK_Return, NoSymbol,
504 - XK_Control_L, NoSymbol,
505 - XK_a, XK_A,
506 - XK_s, XK_S,
507 - XK_d, XK_D,
508 - XK_f, XK_F,
509 - XK_g, XK_G,
510 - XK_h, XK_H,
511 - XK_j, XK_J,
512 - XK_k, XK_K,
513 - XK_l, XK_L,
514 - XK_semicolon, XK_colon,
515 - XK_apostrophe, XK_quotedbl,
516 - XK_grave, XK_asciitilde,
517 - XK_Shift_L, NoSymbol,
518 - XK_backslash, XK_bar,
519 - XK_z, XK_Z,
520 - XK_x, XK_X,
521 - XK_c, XK_C,
522 - XK_v, XK_V,
523 - XK_b, XK_B,
524 - XK_n, XK_N,
525 - XK_m, XK_M,
526 - XK_comma, XK_less,
527 - XK_period, XK_greater,
528 - XK_slash, XK_question,
529 - XK_Shift_R, NoSymbol,
530 - XK_KP_Multiply, NoSymbol,
531 - XK_Alt_L, XK_Meta_L,
532 - XK_space, NoSymbol,
533 - /*XK_Caps_Lock*/ NoSymbol, NoSymbol,
534 - XK_F1, NoSymbol,
535 - XK_F2, NoSymbol,
536 - XK_F3, NoSymbol,
537 - XK_F4, NoSymbol,
538 - XK_F5, NoSymbol,
539 - XK_F6, NoSymbol,
540 - XK_F7, NoSymbol,
541 - XK_F8, NoSymbol,
542 - XK_F9, NoSymbol,
543 - XK_F10, NoSymbol,
544 - XK_Num_Lock, XK_Pointer_EnableKeys,
545 - XK_Scroll_Lock, NoSymbol,
546 - XK_KP_Home, XK_KP_7,
547 - XK_KP_Up, XK_KP_8,
548 - XK_KP_Prior, XK_KP_9,
549 - XK_KP_Subtract, NoSymbol,
550 - XK_KP_Left, XK_KP_4,
551 - XK_KP_Begin, XK_KP_5,
552 - XK_KP_Right, XK_KP_6,
553 - XK_KP_Add, NoSymbol,
554 - XK_KP_End, XK_KP_1,
555 - XK_KP_Down, XK_KP_2,
556 - XK_KP_Next, XK_KP_3,
557 - XK_KP_Insert, XK_KP_0,
558 - XK_KP_Delete, XK_KP_Decimal,
559 - NoSymbol, NoSymbol,
560 - NoSymbol, NoSymbol,
561 - NoSymbol, NoSymbol,
562 - XK_F11, NoSymbol,
563 - XK_F12, NoSymbol,
564 - XK_Home, NoSymbol,
565 - XK_Up, NoSymbol,
566 - XK_Prior, NoSymbol,
567 - XK_Left, NoSymbol,
568 - NoSymbol, NoSymbol,
569 - XK_Right, NoSymbol,
570 - XK_End, NoSymbol,
571 - XK_Down, NoSymbol,
572 - XK_Next, NoSymbol,
573 - XK_Insert, NoSymbol,
574 - XK_Delete, NoSymbol,
575 - XK_KP_Enter, NoSymbol,
576 - XK_Control_R, NoSymbol,
577 - XK_Pause, XK_Break,
578 - XK_Print, XK_Execute,
579 - XK_KP_Divide, NoSymbol,
580 - XK_Alt_R, XK_Meta_R,
581 -};
582 -
583 -static Bool GetMappings(KeySymsPtr pKeySyms, CARD8 *pModMap)
584 -{
585 - int i;
586 -
587 - for (i = 0; i < MAP_LENGTH; i++)
588 - pModMap[i] = NoSymbol;
589 -
590 - for (i = 0; i < VFB_MAP_LEN; i++) {
591 - if (keyboardMap[i * KEYSYMS_PER_KEY] == XK_Caps_Lock)
592 - pModMap[i + VFB_MIN_KEY] = LockMask;
593 - else if (keyboardMap[i * KEYSYMS_PER_KEY] == XK_Shift_L ||
594 - keyboardMap[i * KEYSYMS_PER_KEY] == XK_Shift_R)
595 - pModMap[i + VFB_MIN_KEY] = ShiftMask;
596 - else if (keyboardMap[i * KEYSYMS_PER_KEY] == XK_Control_L ||
597 - keyboardMap[i * KEYSYMS_PER_KEY] == XK_Control_R) {
598 - pModMap[i + VFB_MIN_KEY] = ControlMask;
599 - }
600 - else if (keyboardMap[i * KEYSYMS_PER_KEY] == XK_Alt_L ||
601 - keyboardMap[i * KEYSYMS_PER_KEY] == XK_Alt_R)
602 - pModMap[i + VFB_MIN_KEY] = Mod1Mask;
603 - }
604 -
605 - pKeySyms->minKeyCode = VFB_MIN_KEY;
606 - pKeySyms->maxKeyCode = VFB_MAX_KEY;
607 - pKeySyms->mapWidth = KEYSYMS_PER_KEY;
608 - pKeySyms->map = keyboardMap;
609 -
610 - return TRUE;
611 -}
612 -
613 -static void vfbBell(int percent, DeviceIntPtr device, pointer ctrl, int class_)
614 -{
615 - if (percent > 0)
616 - vncBell();
617 -}
618 -
619 -static int vfbKeybdProc(DeviceIntPtr pDevice, int onoff)
620 -{
621 - KeySymsRec keySyms;
622 - CARD8 modMap[MAP_LENGTH];
623 - DevicePtr pDev = (DevicePtr)pDevice;
624 -
625 - switch (onoff)
626 - {
627 - case DEVICE_INIT:
628 - GetMappings(&keySyms, modMap);
629 - InitKeyboardDeviceStruct(pDev, &keySyms, modMap,
630 - (BellProcPtr)vfbBell, (KbdCtrlProcPtr)NoopDDA);
631 - break;
632 - case DEVICE_ON:
633 - pDev->on = TRUE;
634 - break;
635 - case DEVICE_OFF:
636 - pDev->on = FALSE;
637 - break;
638 - case DEVICE_CLOSE:
639 - break;
640 - }
641 - return Success;
642 -}
643 -
644 -static int vfbMouseProc(DeviceIntPtr pDevice, int onoff)
645 +void DDXRingBell(int percent, int pitch, int duration)
646 {
647 - BYTE map[6];
648 - DevicePtr pDev = (DevicePtr)pDevice;
649 -
650 - switch (onoff)
651 - {
652 - case DEVICE_INIT:
653 - map[1] = 1;
654 - map[2] = 2;
655 - map[3] = 3;
656 - map[4] = 4;
657 - map[5] = 5;
658 - InitPointerDeviceStruct(pDev, map, 5, miPointerGetMotionEvents,
659 - (PtrCtrlProcPtr)NoopDDA, miPointerGetMotionBufferSize());
660 - break;
661 -
662 - case DEVICE_ON:
663 - pDev->on = TRUE;
664 - break;
665 -
666 - case DEVICE_OFF:
667 - pDev->on = FALSE;
668 - break;
669 -
670 - case DEVICE_CLOSE:
671 - break;
672 - }
673 - return Success;
674 + vncRingBell (percent, pitch, duration);
675 }
676 -
677 // InitInput is called after InitExtensions, so we're guaranteed that
678 // vncExtensionInit() has already been called.
679
680 void InitInput(int argc, char *argv[])
681 {
682 - DeviceIntPtr p, k;
683 - p = AddInputDevice(vfbMouseProc, TRUE);
684 - k = AddInputDevice(vfbKeybdProc, TRUE);
685 - RegisterPointerDevice(p);
686 - RegisterKeyboardDevice(k);
687 - miRegisterPointerDevice(screenInfo.screens[0], p);
688 - (void)mieqInit ((DevicePtr)k, (DevicePtr)p);
689 + mieqInit ();
690 }