After calling XGrabKeyboard() my application captures and displays all keystrokes / releases, including GUI and PrintScreen keys. However, the user can no longer move the application window. So far this is happening on Fedora 17 and Ubuntu 12.04.
How can I let the user move the application while under the influence of XGrabKeyboard() ?
The following is sample code for my Qt application:
bool KeyboardStatus::x11Event(XEvent *event) { switch (event->type) { case FocusIn: XGrabKeyboard(x11Info().display(), winId(), false, GrabModeAsync, GrabModeAsync, CurrentTime); break; case FocusOut: XUngrabKeyboard(x11Info().display(), CurrentTime); break; case KeyPress: // Display which key was pressed to user return true; case KeyRelease: // Display which key was released to user return true; } return false; }
Taking a grab expression from an event handler does not solve the problem. Here is an example project that illustrates the problem: TestGrab.zip
source share