diff options
Diffstat (limited to 'src/Overlay.cpp')
-rw-r--r-- | src/Overlay.cpp | 31 |
1 files changed, 19 insertions, 12 deletions
diff --git a/src/Overlay.cpp b/src/Overlay.cpp index 2a0d8f2..92eb19a 100644 --- a/src/Overlay.cpp +++ b/src/Overlay.cpp @@ -601,6 +601,8 @@ namespace gsr { if(!window) return false; + grab_mouse_and_keyboard(); + //force_window_on_top(); window->clear(bg_color); @@ -636,6 +638,21 @@ namespace gsr { return true; } + void Overlay::grab_mouse_and_keyboard() { + // TODO: Remove these grabs when debugging with a debugger, or your X11 session will appear frozen. + // There should be a debug mode to not use these + mgl_context *context = mgl_get_context(); + Display *display = (Display*)context->connection; + XGrabPointer(display, window->get_system_handle(), True, + ButtonPressMask | ButtonReleaseMask | PointerMotionMask | + Button1MotionMask | Button2MotionMask | Button3MotionMask | Button4MotionMask | Button5MotionMask | + ButtonMotionMask, + GrabModeAsync, GrabModeAsync, None, default_cursor, CurrentTime); + // TODO: This breaks global hotkeys (when using x11 global hotkeys) + XGrabKeyboard(display, window->get_system_handle(), True, GrabModeAsync, GrabModeAsync, CurrentTime); + XFlush(display); + } + void Overlay::xi_setup_fake_cursor() { if(!xi_display) return; @@ -898,20 +915,10 @@ namespace gsr { default_cursor = 0; } default_cursor = XCreateFontCursor(display, XC_arrow); - - // TODO: Remove these grabs when debugging with a debugger, or your X11 session will appear frozen. - // There should be a debug mode to not use these - - XGrabPointer(display, window->get_system_handle(), True, - ButtonPressMask | ButtonReleaseMask | PointerMotionMask | - Button1MotionMask | Button2MotionMask | Button3MotionMask | Button4MotionMask | Button5MotionMask | - ButtonMotionMask, - GrabModeAsync, GrabModeAsync, None, default_cursor, CurrentTime); - // TODO: This breaks global hotkeys (when using x11 global hotkeys) - XGrabKeyboard(display, window->get_system_handle(), True, GrabModeAsync, GrabModeAsync, CurrentTime); - XFlush(display); + grab_mouse_and_keyboard(); + // The real cursor doesn't move when all devices are grabbed, so we create our own cursor and diplay that while grabbed xi_setup_fake_cursor(); |