Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/X11/xf_event.c b/X11/xf_event.c
- index 8cb0141..7b333aa 100644
- --- a/X11/xf_event.c
- +++ b/X11/xf_event.c
- @@ -1,4 +1,3 @@
- -
- #include <X11/Xlib.h>
- #include <X11/Xutil.h>
- #include <stdio.h>
- @@ -9,6 +8,8 @@
- #include "xf_event.h"
- #include "xf_keyboard.h"
- +extern RD_BOOL obey_key_remappings;
- +
- static int
- xf_handle_event_Expose(xfInfo * xfi, XEvent * xevent)
- {
- @@ -147,14 +148,29 @@ xf_handle_event_KeyPress(xfInfo * xfi, XEvent * xevent)
- {
- KeySym keysym;
- char str[256];
- + unsigned int cooked_keycode;
- XLookupString((XKeyEvent *) xevent, str, sizeof(str), &keysym, NULL);
- -
- - xf_kb_set_keypress(xevent->xkey.keycode, keysym);
- + if (obey_key_remappings == True)
- + {
- + cooked_keycode = XKeysymToKeycode(((XKeyEvent *) xevent)->display, keysym);
- + xf_kb_set_keypress(cooked_keycode, keysym);
- + }
- + else
- + {
- + xf_kb_set_keypress(xevent->xkey.keycode, keysym);
- + }
- if (xfi->fs_toggle && xf_kb_handle_special_keys(xfi, keysym))
- return 0;
- - xf_kb_send_key(xfi, RDP_KEYPRESS, xevent->xkey.keycode);
- + if (obey_key_remappings == True)
- + {
- + xf_kb_send_key(xfi, RDP_KEYPRESS, cooked_keycode);
- + }
- + else
- + {
- + xf_kb_send_key(xfi, RDP_KEYPRESS, xevent->xkey.keycode);
- + }
- return 0;
- }
- @@ -162,6 +178,10 @@ static RD_BOOL
- xf_skip_key_release(xfInfo * xfi, XEvent * xevent)
- {
- XEvent next_event;
- + unsigned int cooked_keycode;
- + unsigned int next_cooked_keycode;
- + KeySym keysym;
- + char str[256];
- if (XPending(xfi->display))
- {
- @@ -169,7 +189,18 @@ xf_skip_key_release(xfInfo * xfi, XEvent * xevent)
- XPeekEvent(xfi->display, &next_event);
- if (next_event.type == KeyPress)
- {
- - if (next_event.xkey.keycode == xevent->xkey.keycode)
- + if (obey_key_remappings == True)
- + {
- + XLookupString((XKeyEvent *) xevent, str, sizeof(str), &keysym, NULL);
- + cooked_keycode = XKeysymToKeycode(((XKeyEvent *) xevent)->display, keysym);
- + XLookupString((XKeyEvent *) &next_event, str, sizeof(str), &keysym, NULL);
- + next_cooked_keycode = XKeysymToKeycode(next_event.xkey.display, keysym);
- + if (next_cooked_keycode == cooked_keycode)
- + {
- + return True;
- + }
- + }
- + else if (next_event.xkey.keycode == xevent->xkey.keycode)
- {
- return True;
- }
- @@ -181,12 +212,26 @@ xf_skip_key_release(xfInfo * xfi, XEvent * xevent)
- static int
- xf_handle_event_KeyRelease(xfInfo * xfi, XEvent * xevent)
- {
- + unsigned int cooked_keycode;
- + KeySym keysym;
- + char str[256];
- +
- if (xf_skip_key_release(xfi, xevent))
- {
- return 0;
- }
- - xf_kb_unset_keypress(xevent->xkey.keycode);
- - xf_kb_send_key(xfi, RDP_KEYRELEASE, xevent->xkey.keycode);
- + if (obey_key_remappings == True)
- + {
- + XLookupString((XKeyEvent *) xevent, str, sizeof(str), &keysym, NULL);
- + cooked_keycode = XKeysymToKeycode(((XKeyEvent *) xevent)->display, keysym);
- + xf_kb_unset_keypress(cooked_keycode);
- + xf_kb_send_key(xfi, RDP_KEYRELEASE, cooked_keycode);
- + }
- + else
- + {
- + xf_kb_unset_keypress(xevent->xkey.keycode);
- + xf_kb_send_key(xfi, RDP_KEYRELEASE, xevent->xkey.keycode);
- + }
- return 0;
- }
- diff --git a/X11/xfreerdp.c b/X11/xfreerdp.c
- index 2638833..27e77ad 100644
- --- a/X11/xfreerdp.c
- +++ b/X11/xfreerdp.c
- @@ -43,6 +43,8 @@
- static volatile int g_thread_count = 0;
- static sem_t g_sem;
- +RD_BOOL obey_key_remappings = False;
- +
- static int
- set_default_params(xfInfo * xfi)
- {
- @@ -99,6 +101,7 @@ out_args(void)
- "\t-f: fullscreen mode\n"
- "\t-z: enable bulk compression\n"
- "\t-x: performance flags (m, b or l for modem, broadband or lan)\n"
- + "\t-m: obey X key remappings\n"
- #ifndef DISABLE_TLS
- "\t--no-tls: disable TLS encryption\n"
- #endif
- @@ -297,6 +300,10 @@ process_params(xfInfo * xfi, int argc, char ** argv, int * pindex)
- {
- settings->console_session = 1;
- }
- + else if (strcmp("-m", argv[*pindex]) == 0)
- + {
- + obey_key_remappings = True;
- + }
- else if (strcmp("-z", argv[*pindex]) == 0)
- {
- settings->bulk_compression = 1;
Add Comment
Please, Sign In to add comment