diff options
author | Thierry Bastian <thierry.bastian@nokia.com> | 2010-06-30 10:15:49 (GMT) |
---|---|---|
committer | Samuli Piippo <samuli.piippo@digia.com> | 2011-06-09 10:06:25 (GMT) |
commit | 1e6e8e3cf34d766f9076e04e5ca20c829a92df90 (patch) | |
tree | 6f0cb1496c0d372f91692369cc0cdc84abd8cdd1 | |
parent | c779d8e7a227d8c9253ca43987a69d6d74c58abd (diff) | |
download | Qt-1e6e8e3cf34d766f9076e04e5ca20c829a92df90.zip Qt-1e6e8e3cf34d766f9076e04e5ca20c829a92df90.tar.gz Qt-1e6e8e3cf34d766f9076e04e5ca20c829a92df90.tar.bz2 |
Fixed a crash in menubar with invisible actions
That would happen because the loop to find the next action when
navigating with the keyboard was not good enough.
Task-number: QTBUG-11823
(cherry picked from commit 8ea60a39a8c4661db505a6dc1342e524ec2e460c)
-rw-r--r-- | src/gui/widgets/qmenubar.cpp | 2 | ||||
-rw-r--r-- | tests/auto/qmenubar/tst_qmenubar.cpp | 29 |
2 files changed, 30 insertions, 1 deletions
diff --git a/src/gui/widgets/qmenubar.cpp b/src/gui/widgets/qmenubar.cpp index 5776565..82848b3 100644 --- a/src/gui/widgets/qmenubar.cpp +++ b/src/gui/widgets/qmenubar.cpp @@ -768,7 +768,7 @@ QAction *QMenuBarPrivate::getNextAction(const int _start, const int increment) c const int start = (_start == -1 && increment == -1) ? actions.count() : _start; const int end = increment == -1 ? 0 : actions.count() - 1; - for (int i = start; start != end;) { + for (int i = start; i != end;) { i += increment; QAction *current = actions.at(i); if (!actionRects.at(i).isNull() && (allowActiveAndDisabled || current->isEnabled())) diff --git a/tests/auto/qmenubar/tst_qmenubar.cpp b/tests/auto/qmenubar/tst_qmenubar.cpp index 2033bfa..35dc770 100644 --- a/tests/auto/qmenubar/tst_qmenubar.cpp +++ b/tests/auto/qmenubar/tst_qmenubar.cpp @@ -168,6 +168,7 @@ private slots: void task256322_highlight(); void menubarSizeHint(); void taskQTBUG4965_escapeEaten(); + void taskQTBUG11823_crashwithInvisibleActions(); #if defined(QT3_SUPPORT) void indexBasedInsertion_data(); @@ -1690,6 +1691,34 @@ void tst_QMenuBar::taskQTBUG4965_escapeEaten() QTRY_VERIFY(!menubar.isVisible()); } +void tst_QMenuBar::taskQTBUG11823_crashwithInvisibleActions() +{ + QMenuBar menubar; + menubar.setNativeMenuBar(false); //we can't check the geometry of native menubars + + QAction * m = menubar.addAction( "&m" ); + QAction * a = menubar.addAction( "&a" ); + + menubar.show(); + QApplication::setActiveWindow(&menubar); + QTest::qWaitForWindowShown(&menubar); + menubar.setActiveAction(m); + QCOMPARE(menubar.activeAction(), m); + QTest::keyClick(0, Qt::Key_Right); + QCOMPARE(menubar.activeAction(), a); + QTest::keyClick(0, Qt::Key_Right); + QCOMPARE(menubar.activeAction(), m); + a->setVisible(false); + + menubar.setActiveAction(m); + QCOMPARE(menubar.activeAction(), m); //the active action shouldn't have changed + + //it used to crash here because the action is invisible + QTest::keyClick(0, Qt::Key_Right); + QCOMPARE(menubar.activeAction(), m); //the active action shouldn't have changed +} + + #if defined(QT3_SUPPORT) void tst_QMenuBar::indexBasedInsertion_data() { |