all repos — openbox @ 2a40cebfdc5b0f282b04855f6b5f7ecce07ba4d3

openbox fork - make it a bit more like ryudo

grab the server around key ungrab/grabs to prevent losing keys
Dana Jansens danakj@orodu.net
commit

2a40cebfdc5b0f282b04855f6b5f7ecce07ba4d3

parent

9bfc9778271734e56e381afca74e7e50f6334f04

1 files changed, 16 insertions(+), 0 deletions(-)

jump to
M src/bindings.ccsrc/bindings.cc

@@ -243,12 +243,15 @@ // XXX: look if callback is already bound to this key?

t->callbacks.push_back(callback); destroytree(tree); } else { + // grab the server here to make sure no key pressed go missed + otk::OBDisplay::grab(); grabKeys(false); // assimilate this built tree into the main tree assimilate(tree); // assimilation destroys/uses the tree grabKeys(true); + otk::OBDisplay::ungrab(); } Py_INCREF(callback);

@@ -273,6 +276,8 @@ CallbackList::iterator it = std::find(t->callbacks.begin(),

t->callbacks.end(), callback); if (it != t->callbacks.end()) { + // grab the server here to make sure no key pressed go missed + otk::OBDisplay::grab(); grabKeys(false); _curpos = &_keytree;

@@ -281,6 +286,8 @@ // XXX do shit here ...

Py_XDECREF(*it); grabKeys(true); + otk::OBDisplay::ungrab(); + return true; } }

@@ -292,10 +299,13 @@ void OBBindings::setResetKey(const std::string &key)

{ Binding b(0, 0); if (translate(key, b)) { + // grab the server here to make sure no key pressed go missed + otk::OBDisplay::grab(); grabKeys(false); _resetkey.key = b.key; _resetkey.modifiers = b.modifiers; grabKeys(true); + otk::OBDisplay::ungrab(); } }

@@ -370,9 +380,12 @@ while (p) {

if (p->binding.key == key && p->binding.modifiers == modifiers) { if (p->chain) { _timer.start(); // start/restart the timer + // grab the server here to make sure no key pressed go missed + otk::OBDisplay::grab(); grabKeys(false); _curpos = p; grabKeys(true); + otk::OBDisplay::ungrab(); } else { Window win = None; OBClient *c = Openbox::instance->focusedClient();

@@ -394,9 +407,12 @@

void OBBindings::resetChains(OBBindings *self) { self->_timer.stop(); + // grab the server here to make sure no key pressed go missed + otk::OBDisplay::grab(); self->grabKeys(false); self->_curpos = &self->_keytree; self->grabKeys(true); + otk::OBDisplay::ungrab(); }