From: Manuel Nickschas Date: Mon, 5 May 2014 21:38:27 +0000 (+0200) Subject: Fix tab completion on exotic platforms X-Git-Tag: 0.10.1~24 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=5c72b02ea4197ab6ddac2841b25b41bf31d3160f Fix tab completion on exotic platforms Turns out that using the tab key as an action shortcut in an input widget does not work reliably on all platforms, at least on OS/2 - sometimes, the event filter would be called instead of triggering the action. To make this more robust, we disable the action (just using it as a container for the custom shortcut) and always catch and handle the key in the event filter which we need anyway. Thanks to TeLLie for bisecting this issue and finding the culprit on OS/2. --- diff --git a/src/uisupport/tabcompleter.cpp b/src/uisupport/tabcompleter.cpp index 40a49294..f2d2a16d 100644 --- a/src/uisupport/tabcompleter.cpp +++ b/src/uisupport/tabcompleter.cpp @@ -45,18 +45,19 @@ TabCompleter::TabCompleter(MultiLineEdit *_lineEdit) _enabled(false), _nickSuffix(": ") { - // use both an Action and generic eventFilter, to make the shortcut configurable - // yet still be able to reset() when required + // This Action just serves as a container for the custom shortcut and isn't actually handled; + // apparently, using tab as an Action shortcut in an input widget is unreliable on some platforms (e.g. OS/2) _lineEdit->installEventFilter(this); ActionCollection *coll = GraphicalUi::actionCollection("General"); - coll->addAction("TabCompletionKey", new Action(tr("Tab completion"), coll, + Action *a = coll->addAction("TabCompletionKey", new Action(tr("Tab completion"), coll, this, SLOT(onTabCompletionKey()), QKeySequence(Qt::Key_Tab))); + a->setEnabled(false); // avoid catching the shortcut } void TabCompleter::onTabCompletionKey() { - complete(); + // do nothing; we use the event filter instead } @@ -179,9 +180,11 @@ bool TabCompleter::eventFilter(QObject *obj, QEvent *event) QKeyEvent *keyEvent = static_cast(event); - if (keyEvent->key() != GraphicalUi::actionCollection("General")->action("TabCompletionKey")->shortcut()) { + if (keyEvent->key() == GraphicalUi::actionCollection("General")->action("TabCompletionKey")->shortcut()[0]) + complete(); + else reset(); - } + return false; }