31 |
extern BOOL sendmotion; |
extern BOOL sendmotion; |
32 |
extern BOOL fullscreen; |
extern BOOL fullscreen; |
33 |
|
|
34 |
static Display *display; |
Display *display; |
35 |
static int x_socket; |
static int x_socket; |
36 |
static Window wnd; |
static Window wnd; |
37 |
static GC gc; |
static GC gc; |
282 |
XFree(sizehints); |
XFree(sizehints); |
283 |
} |
} |
284 |
|
|
285 |
xkeymap_init(display); |
xkeymap_init(); |
286 |
|
|
287 |
input_mask = KeyPressMask | KeyReleaseMask |
input_mask = KeyPressMask | KeyReleaseMask |
288 |
| ButtonPressMask | ButtonReleaseMask |
| ButtonPressMask | ButtonReleaseMask |
322 |
XEvent event; |
XEvent event; |
323 |
KeySym keysym; |
KeySym keysym; |
324 |
uint8 scancode; |
uint8 scancode; |
325 |
uint16 button; |
uint16 button, flags; |
326 |
uint32 ev_time; |
uint32 ev_time; |
327 |
|
|
328 |
if (display == NULL) |
if (display == NULL) |
331 |
while (XCheckMaskEvent(display, ~0, &event)) |
while (XCheckMaskEvent(display, ~0, &event)) |
332 |
{ |
{ |
333 |
ev_time = time(NULL); |
ev_time = time(NULL); |
334 |
|
flags = 0; |
335 |
|
|
336 |
switch (event.type) |
switch (event.type) |
337 |
{ |
{ |
|
case KeyPress: |
|
|
keysym = XKeycodeToKeysym(display, event.xkey.keycode, 0); |
|
|
scancode = xkeymap_translate_key(keysym, event.xkey.keycode); |
|
|
if (scancode == 0) |
|
|
break; |
|
|
|
|
|
rdp_send_input(ev_time, RDP_INPUT_SCANCODE, 0, |
|
|
scancode, 0); |
|
|
break; |
|
|
|
|
338 |
case KeyRelease: |
case KeyRelease: |
339 |
|
flags = KBD_FLAG_DOWN | KBD_FLAG_UP; |
340 |
|
/* fall through */ |
341 |
|
|
342 |
|
case KeyPress: |
343 |
keysym = XKeycodeToKeysym(display, event.xkey.keycode, 0); |
keysym = XKeycodeToKeysym(display, event.xkey.keycode, 0); |
344 |
scancode = xkeymap_translate_key(keysym, event.xkey.keycode); |
scancode = xkeymap_translate_key(keysym, event.xkey.keycode, &flags); |
345 |
if (scancode == 0) |
if (scancode == 0) |
346 |
break; |
break; |
347 |
|
|
348 |
rdp_send_input(ev_time, RDP_INPUT_SCANCODE, |
rdp_send_input(ev_time, RDP_INPUT_SCANCODE, flags, scancode, 0); |
|
KBD_FLAG_DOWN | KBD_FLAG_UP, |
|
|
scancode, 0); |
|
349 |
break; |
break; |
350 |
|
|
351 |
case ButtonPress: |
case ButtonPress: |
352 |
button = xkeymap_translate_button(event.xbutton.button); |
flags = MOUSE_FLAG_DOWN; |
353 |
if (button == 0) |
/* fall through */ |
|
break; |
|
|
|
|
|
rdp_send_input(ev_time, RDP_INPUT_MOUSE, |
|
|
button | MOUSE_FLAG_DOWN, |
|
|
event.xbutton.x, |
|
|
event.xbutton.y); |
|
|
break; |
|
354 |
|
|
355 |
case ButtonRelease: |
case ButtonRelease: |
356 |
button = xkeymap_translate_button(event.xbutton.button); |
button = xkeymap_translate_button(event.xbutton.button); |
358 |
break; |
break; |
359 |
|
|
360 |
rdp_send_input(ev_time, RDP_INPUT_MOUSE, |
rdp_send_input(ev_time, RDP_INPUT_MOUSE, |
361 |
button, |
flags | button, |
362 |
event.xbutton.x, |
event.xbutton.x, |
363 |
event.xbutton.y); |
event.xbutton.y); |
364 |
break; |
break; |