Fix behavior for autorepeat keys This reverts 58e09b719077605efadac9b712acb8f5e752f732 after having regressions and bug reports in regards to autorepeated key events are not working anymore. So, the problem with the lost keypress after the workspace change is still open but at least the behavior for other folks is as it was. Since 58e09b7190 seems to be corelated to "auto repeat" keys it might indicate the problem which 58e09b7190 "fixed". We will see. Fixes #1115.
Mathias Gumz akira@fluxbox.org
2 files changed,
13 insertions(+),
2 deletions(-)
M
src/Keys.cc
→
src/Keys.cc
@@ -575,6 +575,12 @@ }
return false; } + // if focus changes, windows will get NotifyWhileGrabbed, + // which they tend to ignore + if (type == KeyPress) { + XUngrabKeyboard(Fluxbox::instance()->display(), CurrentTime); + } + WinClient *old = WindowCmd<void>::client(); WindowCmd<void>::setClient(current); temp_key->m_command->execute();
M
src/Screen.cc
→
src/Screen.cc
@@ -680,8 +680,13 @@ m_bg_change_sig.emit(*this);
} void BScreen::keyPressEvent(XKeyEvent &ke) { - Fluxbox::instance()->keys()->doAction(ke.type, ke.state, ke.keycode, - Keys::GLOBAL|Keys::ON_DESKTOP); + if (Fluxbox::instance()->keys()->doAction(ke.type, ke.state, ke.keycode, + Keys::GLOBAL|Keys::ON_DESKTOP)) { + + // re-grab keyboard, so we don't pass KeyRelease to clients + // also for catching invalid keys in the middle of keychains + FbTk::EventManager::instance()->grabKeyboard(rootWindow().window()); + } } void BScreen::keyReleaseEvent(XKeyEvent &ke) {