diff options
author | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2014-06-12 23:42:59 +0200 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@theqtcompany.com> | 2014-10-30 11:40:18 +0100 |
commit | d7ca800a87a2291c94c6580f0cfe068bb2280caf (patch) | |
tree | 8eb635ee119d6b6e893b98df3c3cc04a90da4ba1 /tests/auto/widgets/kernel/qshortcut | |
parent | f6f797a6c3b794d14c312855bacc8b5b89ea6127 (diff) |
Clean up ShortcutOverride handling
Instead of sending the event from random places, send it from
QWindowSystemInterface. This allows to send override events on OS X to
menus before doing other key processing and reduces the number of
ShortcutOverride events on all platforms to exactly one per key press
event.
Additional test by Friedemann Kleint.
Task-number: QTBUG-38986
Change-Id: I6981bb776aba586ebc7c3daa5fd7a0d84c25bc3e
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
Reviewed-by: Jørgen Lind <jorgen.lind@digia.com>
Diffstat (limited to 'tests/auto/widgets/kernel/qshortcut')
-rw-r--r-- | tests/auto/widgets/kernel/qshortcut/tst_qshortcut.cpp | 34 |
1 files changed, 33 insertions, 1 deletions
diff --git a/tests/auto/widgets/kernel/qshortcut/tst_qshortcut.cpp b/tests/auto/widgets/kernel/qshortcut/tst_qshortcut.cpp index 1d6f577192..0691801553 100644 --- a/tests/auto/widgets/kernel/qshortcut/tst_qshortcut.cpp +++ b/tests/auto/widgets/kernel/qshortcut/tst_qshortcut.cpp @@ -42,6 +42,7 @@ #include <qdebug.h> #include <qstring.h> #include <qshortcut.h> +#include <qscreen.h> class AccelForm; QT_BEGIN_NAMESPACE @@ -119,6 +120,7 @@ private slots: void keypressConsumption(); void unicodeCompare(); void context(); + void duplicatedShortcutOverride(); protected: static Qt::KeyboardModifiers toButtons( int key ); @@ -1082,6 +1084,36 @@ void tst_QShortcut::context() clearAllShortcuts(); } +// QTBUG-38986, do not generate duplicated QEvent::ShortcutOverride in event processing. +class OverrideCountingWidget : public QWidget +{ +public: + OverrideCountingWidget(QWidget *parent = 0) : QWidget(parent), overrideCount(0) {} + + int overrideCount; + + bool event(QEvent *e) Q_DECL_OVERRIDE + { + if (e->type() == QEvent::ShortcutOverride) + overrideCount++; + return QWidget::event(e); + } +}; + +void tst_QShortcut::duplicatedShortcutOverride() +{ + OverrideCountingWidget w; + w.setWindowTitle(Q_FUNC_INFO); + w.resize(200, 200); + w.move(QGuiApplication::primaryScreen()->availableGeometry().center() - QPoint(100, 100)); + w.show(); + QApplication::setActiveWindow(&w); + QVERIFY(QTest::qWaitForWindowActive(&w)); + QTest::keyPress(w.windowHandle(), Qt::Key_A); + QCoreApplication::processEvents(); + QCOMPARE(w.overrideCount, 1); +} + // ------------------------------------------------------------------ // Element Testing helper functions --------------------------------- // ------------------------------------------------------------------ @@ -1226,7 +1258,7 @@ void tst_QShortcut::testElement() setupShortcut(testWidget, txt, k1, k2, k3, k4); } else { sendKeyEvents(k1, c1, k2, c2, k3, c3, k4, c4); - QCOMPARE(currentResult, result); + QCOMPARE((int)currentResult, (int)result); } } |