diff options
Diffstat (limited to 'src/PointerDevice.cpp')
-rw-r--r-- | src/PointerDevice.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/src/PointerDevice.cpp b/src/PointerDevice.cpp index c819877..6b9a1d5 100644 --- a/src/PointerDevice.cpp +++ b/src/PointerDevice.cpp @@ -141,9 +141,11 @@ bool PointerDevice::resizeOn(WMWindow* win, Window button, int x, int y) resizeOffset[1] = y; resizeButton = button; - // in case we get out of the window we still need to catch the release - XEventClass classes[2] = {evclasses[XI_MotionNotify], evclasses[XI_ButtonRelease]}; - XSelectExtensionEvent(x11->dpy, x11->root, classes, 2); + XEventClass classes[3] = {evclasses[XI_MotionNotify], + evclasses[XI_ButtonPress], + evclasses[XI_ButtonRelease]}; + XGrabDevice(x11->dpy, this->dev, win->getWindowBar(), + True, 3, classes, GrabModeAsync, GrabModeAsync, CurrentTime); return true; } @@ -162,8 +164,7 @@ void PointerDevice::resizeOff() resizeWindow = NULL; resizeOffset[0] = resizeOffset[1] = 0; - XEventClass motion = evclasses[XI_MotionNotify]; - XSelectExtensionEvent(x11->dpy, x11->root, &motion, 1); + XUngrabDevice(x11->dpy, this->dev, CurrentTime); } bool PointerDevice::isResizing() @@ -198,7 +199,7 @@ void PointerDevice::setWMEvents(WMWindow* window) XSelectExtensionEvent(x11->dpy, window->getWindowBar(), &classes[0], 3); //XSelectExtensionEvent(x11->dpy, window->getResizeBar(), &classes[0], 3); - XSelectExtensionEvent(x11->dpy, window->getButtonClose(), &classes[2], 1); + XSelectExtensionEvent(x11->dpy, window->getButtonClose(), &classes[1], 2); XSelectExtensionEvent(x11->dpy, window->getButtonFloor(), &classes[1], 1); XSelectExtensionEvent(x11->dpy, window->getButtonOverlay(), &classes[1], 1); XSelectExtensionEvent(x11->dpy, window->getButtonMinimize(), &classes[1], 1); |