diff options
Diffstat (limited to 'Swift/QtUI/QtTabbable.cpp')
-rw-r--r-- | Swift/QtUI/QtTabbable.cpp | 59 |
1 files changed, 29 insertions, 30 deletions
diff --git a/Swift/QtUI/QtTabbable.cpp b/Swift/QtUI/QtTabbable.cpp index 84a5100..124d1b4 100644 --- a/Swift/QtUI/QtTabbable.cpp +++ b/Swift/QtUI/QtTabbable.cpp @@ -5,13 +5,28 @@ */ -#include "QtTabbable.h" +#include <Swift/QtUI/QtTabbable.h> #include <QApplication> +#include <QKeyEvent> -#include "QtChatTabs.h" +#include <Swiften/Base/foreach.h> +#include <Swiften/Base/Platform.h> + +#include <Swift/QtUI/QtChatTabs.h> +#include <Swift/QtUI/QtUtilities.h> namespace Swift { +QtTabbable::QtTabbable() : QWidget() { + shortcuts << new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), window(), SLOT(close())); + shortcuts << new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_PageUp), window(), SIGNAL(requestPreviousTab())); + shortcuts << new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_PageDown), window(), SIGNAL(requestNextTab())); + shortcuts << new QShortcut(QKeySequence(Qt::ALT + Qt::Key_A), window(), SIGNAL(requestActiveTab())); +} + QtTabbable::~QtTabbable() { + foreach (QShortcut* shortcut, shortcuts) { + delete shortcut; + } emit windowClosing(); } @@ -26,34 +41,18 @@ bool QtTabbable::isWidgetSelected() { } -void QtTabbable::keyPressEvent(QKeyEvent *event) { - handleKeyPressEvent(event); -} - -void QtTabbable::handleKeyPressEvent(QKeyEvent *event) { - event->ignore(); - int key = event->key(); - Qt::KeyboardModifiers modifiers = event->modifiers(); - if (key == Qt::Key_W && modifiers == Qt::ControlModifier) { - close(); - event->accept(); - } else if ( - (key == Qt::Key_PageUp && modifiers == Qt::ControlModifier) -// || (key == Qt::Key_Left && modifiers == (Qt::ControlModifier & Qt::ShiftModifier)) - ) { - emit requestPreviousTab(); - event->accept(); - } else if ( - (key == Qt::Key_PageDown && modifiers == Qt::ControlModifier) -// || (key == Qt::Key_Right && modifiers == (Qt::ControlModifier & Qt::ShiftModifier) - || (key == Qt::Key_Tab && modifiers == Qt::ControlModifier) - ) { +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(). +#ifdef SWIFTEN_PLATFORM_LINUX + if (keyEvent->modifiers() == QtUtilities::ctrlHardwareKeyModifier && keyEvent->key() == Qt::Key_Tab && event->type() != QEvent::KeyRelease) { +#else + if (keyEvent->modifiers() == QtUtilities::ctrlHardwareKeyModifier && keyEvent->key() == Qt::Key_Tab) { +#endif emit requestNextTab(); - event->accept(); - } else if ( - (key == Qt::Key_A && modifiers == Qt::AltModifier) - ) { - emit requestActiveTab(); - event->accept(); + return true; + } } + return QWidget::event(event); } |