summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@digia.com>2012-12-11 12:47:26 (GMT)
committerThe Qt Project <gerrit-noreply@qt-project.org>2012-12-19 13:33:17 (GMT)
commit0a24cec5a11678ebefe08b331812adbb9b3368aa (patch)
tree15c0161167424190cb42d89ebdc899733f159835 /tests
parent99288633373ecc8ba808cf0ecf18f4a81d62ac84 (diff)
downloadQt-0a24cec5a11678ebefe08b331812adbb9b3368aa.zip
Qt-0a24cec5a11678ebefe08b331812adbb9b3368aa.tar.gz
Qt-0a24cec5a11678ebefe08b331812adbb9b3368aa.tar.bz2
QMenu: Do not set snapToMouse if a caused-widget exists.
When clicking at the bottom-right corner of a menu in a menu bar, it appears at the wrong position. Add test and stabilize RTL-tests by making sure the layout direction is cleared should they fail. Task-number: QTBUG-28031 Task-number: QTBUG-2596 Change-Id: Ibc5ae916388753908e9f3ee98e8859faaa0c8723 Reviewed-by: Olivier Goffart <ogoffart@woboq.com> (cherry picked from qtbase/bf178c77dda1db56ae698c1d31a6e3f685f4830f)
Diffstat (limited to 'tests')
-rw-r--r--tests/auto/qmenubar/tst_qmenubar.cpp40
1 files changed, 36 insertions, 4 deletions
diff --git a/tests/auto/qmenubar/tst_qmenubar.cpp b/tests/auto/qmenubar/tst_qmenubar.cpp
index e197ae2..0d00953 100644
--- a/tests/auto/qmenubar/tst_qmenubar.cpp
+++ b/tests/auto/qmenubar/tst_qmenubar.cpp
@@ -1454,6 +1454,25 @@ void tst_QMenuBar::check_shortcutPress()
#endif
}
+class LayoutDirectionSaver
+{
+ Q_DISABLE_COPY(LayoutDirectionSaver)
+public:
+ explicit LayoutDirectionSaver(Qt::LayoutDirection direction)
+ : m_oldDirection(qApp->layoutDirection())
+ {
+ qApp->setLayoutDirection(direction);
+ }
+
+ ~LayoutDirectionSaver()
+ {
+ qApp->setLayoutDirection(m_oldDirection);
+ }
+
+private:
+ const Qt::LayoutDirection m_oldDirection;
+};
+
void tst_QMenuBar::check_menuPosition()
{
#ifdef Q_WS_MAC
@@ -1516,10 +1535,9 @@ void tst_QMenuBar::check_menuPosition()
menu.close();
}
- //in RTL, the menu should be stuck at the right of the action geometry
+ // QTBUG-2596: in RTL, the menu should be stuck at the right of the action geometry
{
- Qt::LayoutDirection dir = qApp->layoutDirection();
- qApp->setLayoutDirection(Qt::RightToLeft);
+ LayoutDirectionSaver directionSaver(Qt::RightToLeft);
menu.clear();
QObject::connect(&menu, SIGNAL(aboutToShow()), &menu, SLOT(addActions()));
QRect mbItemRect = mw->menuBar()->actionGeometry(menu_action);
@@ -1528,9 +1546,23 @@ void tst_QMenuBar::check_menuPosition()
QVERIFY(menu.isActiveWindow());
QCOMPARE(menu.geometry().right(), mbItemRect.right());
menu.close();
- qApp->setLayoutDirection(dir);
}
+#ifndef QT_NO_CURSOR
+ // QTBUG-28031: Click at bottom-right corner.
+ {
+ mw->move(400, 200);
+ LayoutDirectionSaver directionSaver(Qt::RightToLeft);
+ QMenuBar *mb = mw->menuBar();
+ const QPoint localPos = mb->actionGeometry(menu.menuAction()).bottomRight() - QPoint(1, 1);
+ const QPoint globalPos = mb->mapToGlobal(localPos);
+ QCursor::setPos(globalPos);
+ QTest::mouseClick(mb, Qt::LeftButton, 0, localPos);
+ QTRY_VERIFY(menu.isActiveWindow());
+ QCOMPARE(menu.geometry().right() - 1, globalPos.x());
+ menu.close();
+ }
+# endif // QT_NO_CURSOR
}
void tst_QMenuBar::task223138_triggered()