diff --git a/utils.cpp b/utils.cpp index e9ee51f5bf..790a586bdf 100644 --- a/utils.cpp +++ b/utils.cpp @@ -235,7 +235,7 @@ bool grabbedXServer() static bool keyboard_grabbed = false; -bool grabXKeyboard(Window w) +bool grabXKeyboard(xcb_window_t w) { if (QWidget::keyboardGrabber() != NULL) return false; @@ -243,11 +243,17 @@ bool grabXKeyboard(Window w) return false; if (qApp->activePopupWidget() != NULL) return false; - if (w == None) + if (w == XCB_WINDOW_NONE) w = rootWindow(); - if (XGrabKeyboard(display(), w, False, - GrabModeAsync, GrabModeAsync, xTime()) != GrabSuccess) + const xcb_grab_keyboard_cookie_t c = xcb_grab_keyboard_unchecked(connection(), false, w, xTime(), + XCB_GRAB_MODE_ASYNC, XCB_GRAB_MODE_ASYNC); + ScopedCPointer grab(xcb_grab_keyboard_reply(connection(), c, NULL)); + if (grab.isNull()) { return false; + } + if (grab->status != XCB_GRAB_STATUS_SUCCESS) { + return false; + } keyboard_grabbed = true; return true; } @@ -259,7 +265,7 @@ void ungrabXKeyboard() kDebug(1212) << "ungrabXKeyboard() called but keyboard not grabbed!"; } keyboard_grabbed = false; - XUngrabKeyboard(display(), CurrentTime); + xcb_ungrab_keyboard(connection(), XCB_TIME_CURRENT_TIME); } QPoint cursorPos() diff --git a/utils.h b/utils.h index 2155897c58..91ae5ed9ad 100644 --- a/utils.h +++ b/utils.h @@ -221,7 +221,7 @@ void updateXTime(); void grabXServer(); void ungrabXServer(); bool grabbedXServer(); -bool grabXKeyboard(Window w = rootWindow()); +bool grabXKeyboard(xcb_window_t w = rootWindow()); void ungrabXKeyboard(); /**