X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fbindings.cc;h=cafc85016736eefd1e68ebdf0c6f0aa5cb73478e;hb=7d94983b2e0c55e9d6fa9bc39c102c5b8b8dd468;hp=783b6479c2b2d03cdea56828dc80f423346c2405;hpb=c2c21e9588c00944dfed4cfc7e48d14570444534;p=chaz%2Fopenbox diff --git a/src/bindings.cc b/src/bindings.cc index 783b6479..cafc8501 100644 --- a/src/bindings.cc +++ b/src/bindings.cc @@ -241,7 +241,6 @@ bool Bindings::addKey(const StringVect &keylist, PyObject *callback) if (t) { // already bound to something - // XXX: look if callback is already bound to this key? t->callbacks.push_back(callback); destroytree(tree); } else { @@ -261,7 +260,7 @@ bool Bindings::addKey(const StringVect &keylist, PyObject *callback) return true; } - +/* bool Bindings::removeKey(const StringVect &keylist, PyObject *callback) { assert(false); // XXX: function not implemented yet @@ -295,7 +294,7 @@ bool Bindings::removeKey(const StringVect &keylist, PyObject *callback) } return false; } - +*/ void Bindings::setResetKey(const std::string &key) { @@ -385,9 +384,6 @@ bool Bindings::grabKeyboard(int screen, PyObject *callback) if (XGrabKeyboard(**otk::display, root, false, GrabModeAsync, GrabModeAsync, CurrentTime)) return false; - // the pointer grab causes pointer events during the keyboard grab to go away - XGrabPointer(**otk::display, root, false, 0, GrabModeAsync, - GrabModeAsync, None, None, CurrentTime); _keybgrab_callback = callback; return true; } @@ -403,6 +399,24 @@ void Bindings::ungrabKeyboard() } +bool Bindings::grabPointer(int screen) +{ + if (!openbox->screen(screen)) + return false; // the screen is not managed + + Window root = otk::display->screenInfo(screen)->rootWindow(); + XGrabPointer(**otk::display, root, false, 0, GrabModeAsync, + GrabModeAsync, None, None, CurrentTime); + return true; +} + + +void Bindings::ungrabPointer() +{ + XUngrabPointer(**otk::display, CurrentTime); +} + + void Bindings::fireKey(int screen, unsigned int modifiers, unsigned int key, Time time, KeyAction::KA action) { @@ -427,7 +441,7 @@ void Bindings::fireKey(int screen, unsigned int modifiers, unsigned int key, _timer = new otk::Timer(5000, // 5 second timeout (otk::Timer::TimeoutHandler)resetChains, this); - // grab the server here to make sure no key pressed go missed + // grab the server here to make sure no key presses get missed otk::display->grab(); grabKeys(false); _curpos = p; @@ -467,6 +481,7 @@ bool Bindings::addButton(const std::string &but, MouseContext::MC context, MouseAction::MA action, PyObject *callback) { assert(context >= 0 && context < MouseContext::NUM_MOUSE_CONTEXT); + assert(action >= 0 && action < MouseAction::NUM_MOUSE_ACTION); Binding b(0,0); if (!translate(but, b, false))