Skip to content

Instantly share code, notes, and snippets.

Created October 4, 2011 16:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/1262109 to your computer and use it in GitHub Desktop.
Save anonymous/1262109 to your computer and use it in GitHub Desktop.
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 6c63dcc..6fecc55 100644
--- a/client/X11/xfreerdp.c
+++ b/client/X11/xfreerdp.c
@@ -495,6 +495,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 6728c24..6729f24 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 530086f..2d73738 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 4a65f67..2799180 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"
@@ -215,6 +216,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++;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment