From 07077e2d3da12e94718c05d7d9a5ce5632b8dde5 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Marc-Andr=C3=A9=20Moreau?= Date: Tue, 4 Oct 2011 18:46:49 -0400 Subject: [PATCH] xfreerdp: apply patch from zstegi (would grab window manager key combinations) --- client/X11/xf_window.c | 6 ++++-- client/X11/xfreerdp.c | 1 + client/X11/xfreerdp.h | 1 + include/freerdp/settings.h | 1 + libfreerdp-core/settings.c | 1 + libfreerdp-utils/args.c | 5 +++++ 6 files changed, 13 insertions(+), 2 deletions(-) diff --git a/client/X11/xf_window.c b/client/X11/xf_window.c index 06e0b43..607f506 100644 --- a/client/X11/xf_window.c +++ b/client/X11/xf_window.c @@ -229,8 +229,10 @@ xfWindow* xf_CreateDesktopWindow(xfInfo* xfi, char* name, int width, int height) input_mask = KeyPressMask | KeyReleaseMask | ButtonPressMask | ButtonReleaseMask | VisibilityChangeMask | FocusChangeMask | StructureNotifyMask | - PointerMotionMask | ExposureMask | EnterWindowMask | LeaveWindowMask | - PropertyChangeMask; + PointerMotionMask | ExposureMask | PropertyChangeMask; + + if (xfi->grab_keyboard) + input_mask |= EnterWindowMask | LeaveWindowMask; XSelectInput(xfi->display, window->handle, input_mask); XMapWindow(xfi->display, window->handle); diff --git a/client/X11/xfreerdp.c b/client/X11/xfreerdp.c index d91951c..c2c2764 100644 --- a/client/X11/xfreerdp.c +++ b/client/X11/xfreerdp.c @@ -535,6 +535,7 @@ boolean xf_pre_connect(freerdp* instance) xfi->decoration = settings->decorations; xfi->remote_app = settings->remote_app; xfi->fullscreen = settings->fullscreen; + xfi->grab_keyboard = settings->grab_keyboard; xfi->fullscreen_toggle = xfi->fullscreen; xfi->sw_gdi = settings->sw_gdi; diff --git a/client/X11/xfreerdp.h b/client/X11/xfreerdp.h index 38aa395..f6af995 100644 --- a/client/X11/xfreerdp.h +++ b/client/X11/xfreerdp.h @@ -73,6 +73,7 @@ struct xf_info int scanline_pad; boolean big_endian; boolean fullscreen; + boolean grab_keyboard; boolean unobscured; boolean decoration; freerdp* instance; diff --git a/include/freerdp/settings.h b/include/freerdp/settings.h index 3914482..d068fa1 100644 --- a/include/freerdp/settings.h +++ b/include/freerdp/settings.h @@ -189,6 +189,7 @@ struct rdp_settings boolean sw_gdi; boolean workarea; boolean fullscreen; + boolean grab_keyboard; boolean decorations; uint32 rdp_version; uint16 color_depth; diff --git a/libfreerdp-core/settings.c b/libfreerdp-core/settings.c index 2635f65..42a2873 100644 --- a/libfreerdp-core/settings.c +++ b/libfreerdp-core/settings.c @@ -43,6 +43,7 @@ rdpSettings* settings_new(void* instance) settings->height = 768; settings->workarea = False; settings->fullscreen = False; + settings->grab_keyboard = True; settings->decorations = True; settings->rdp_version = 7; settings->color_depth = 16; diff --git a/libfreerdp-utils/args.c b/libfreerdp-utils/args.c index 33f6530..cfa1866 100644 --- a/libfreerdp-utils/args.c +++ b/libfreerdp-utils/args.c @@ -67,6 +67,7 @@ int freerdp_parse_args(rdpSettings* settings, int argc, char** argv, " -g: set geometry, using format WxH or X%% or 'workarea', default is 1024x768\n" " -h: print this help\n" " -k: set keyboard layout ID\n" + " -K: do not interfere with window manager bindings\n" " -m: don't send mouse motion events\n" " -n: hostname\n" " -o: console audio\n" @@ -216,6 +217,10 @@ int freerdp_parse_args(rdpSettings* settings, int argc, char** argv, } sscanf(argv[index], "%X", &(settings->kbd_layout)); } + else if (strcmp("-K", argv[index]) == 0) + { + settings->grab_keyboard = False; + } else if (strcmp("-n", argv[index]) == 0) { index++; -- 2.7.4