Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

x11 - Unable to move window after XGrabKeyboard

After calling XGrabKeyboard(), my application captures and displays all key presses / releases, including those for the GUI and PrintScreen keys. However, the user is no longer able to move the application's window. So far, this occurs on Fedora 17 and Ubuntu 12.04.

How can I allow the user to move the application while being under the effect of XGrabKeyboard()?

Below 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 the grab statement out of the event handler does not solve the issue. Here is a sample project which illustrates the problem: TestGrab.zip

like image 317
Daniel Avatar asked Jan 27 '13 09:01

Daniel


1 Answers

I have tried this on KDE, FVWM and GNOME (just using Xlib), and only the GNOME window manager has this problem.

I thought it might be possible to fix it by picking up the ConfigureNotify event, but it is not generated when you try to move the window.

like image 119
parkydr Avatar answered Oct 27 '22 23:10

parkydr