diff options
-rw-r--r-- | Swift/QtUI/QtTabbable.cpp | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/Swift/QtUI/QtTabbable.cpp b/Swift/QtUI/QtTabbable.cpp index feab35e..2a0bbc2 100644 --- a/Swift/QtUI/QtTabbable.cpp +++ b/Swift/QtUI/QtTabbable.cpp @@ -37,23 +37,30 @@ bool QtTabbable::isWidgetSelected() { bool QtTabbable::event(QEvent* event) { QKeyEvent* keyEvent = dynamic_cast<QKeyEvent*>(event); if (keyEvent) { // According to Qt's focus documentation, one can only override CTRL+TAB via reimplementing QWidget::event(). if (keyEvent->modifiers().testFlag(QtUtilities::ctrlHardwareKeyModifier) && keyEvent->key() == Qt::Key_Tab) { - if (keyEvent->type() != QEvent::ShortcutOverride) { + // Only handle KeyRelease event as Linux also generate KeyPress event in case of CTRL+TAB being pressed + // in the roster of a MUC. + if (keyEvent->type() == QEvent::KeyRelease) { emit requestNextTab(); } return true; } #ifdef SWIFTEN_PLATFORM_LINUX else if (keyEvent->modifiers().testFlag(QtUtilities::ctrlHardwareKeyModifier) && keyEvent->key() == Qt::Key_Backtab && keyEvent->type() != QEvent::KeyRelease) { #else else if (keyEvent->modifiers().testFlag(QtUtilities::ctrlHardwareKeyModifier) && keyEvent->key() == Qt::Key_Backtab) { #endif +#ifdef SWIFTEN_PLATFORM_WINDOWS + // Windows emits both the KeyPress and KeyRelease events. + if (keyEvent->type() == QEvent::KeyPress) { +#else if (keyEvent->type() != QEvent::ShortcutOverride) { +#endif emit requestPreviousTab(); } return true; } } return QWidget::event(event); |