all repos — fluxbox @ 980ab5e3f5a843e1d89a178a5d8e8c260eac5efc

custom fork of the fluxbox windowmanager

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
commit

980ab5e3f5a843e1d89a178a5d8e8c260eac5efc

parent

8e92ad53e07922dfc9aabe6d7d53e6c6d22975ca

2 files changed, 13 insertions(+), 2 deletions(-)

jump to
M src/Keys.ccsrc/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.ccsrc/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) {