summaryrefslogtreecommitdiffstats
path: root/tests/auto/widgets
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/widgets')
-rw-r--r--tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp4
-rw-r--r--tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.cpp4
-rw-r--r--tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp41
-rw-r--r--tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp30
-rw-r--r--tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp18
-rw-r--r--tests/auto/widgets/styles/qstyle/tst_qstyle.cpp36
-rw-r--r--tests/auto/widgets/widgets/qabstractscrollarea/tst_qabstractscrollarea.cpp16
-rw-r--r--tests/auto/widgets/widgets/qmdiarea/qmdiarea.pro2
-rw-r--r--tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp9
-rw-r--r--tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp41
10 files changed, 160 insertions, 41 deletions
diff --git a/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp b/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp
index 8ce0742854..952f5eaeea 100644
--- a/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp
+++ b/tests/auto/widgets/dialogs/qfiledialog/tst_qfiledialog.cpp
@@ -166,7 +166,7 @@ tst_QFiledialog::~tst_QFiledialog()
void tst_QFiledialog::init()
{
// Save the developers settings so they don't get mad when their sidebar folders are gone.
- QSettings settings(QSettings::UserScope, QLatin1String("Trolltech"));
+ QSettings settings(QSettings::UserScope, QLatin1String("QtProject"));
settings.beginGroup(QLatin1String("Qt"));
userSettings = settings.value(QLatin1String("filedialog")).toByteArray();
settings.remove(QLatin1String("filedialog"));
@@ -180,7 +180,7 @@ void tst_QFiledialog::init()
void tst_QFiledialog::cleanup()
{
- QSettings settings(QSettings::UserScope, QLatin1String("Trolltech"));
+ QSettings settings(QSettings::UserScope, QLatin1String("QtProject"));
settings.beginGroup(QLatin1String("Qt"));
settings.setValue(QLatin1String("filedialog"), userSettings);
}
diff --git a/tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.cpp b/tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.cpp
index 6b0888f68a..b0c48a6558 100644
--- a/tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.cpp
+++ b/tests/auto/widgets/dialogs/qfiledialog2/tst_qfiledialog2.cpp
@@ -165,7 +165,7 @@ void tst_QFileDialog2::init()
QVERIFY(tempDir.isValid());
// Save the developers settings so they don't get mad when their sidebar folders are gone.
- QSettings settings(QSettings::UserScope, QLatin1String("Trolltech"));
+ QSettings settings(QSettings::UserScope, QLatin1String("QtProject"));
settings.beginGroup(QLatin1String("Qt"));
userSettings = settings.value(QLatin1String("filedialog")).toByteArray();
settings.remove(QLatin1String("filedialog"));
@@ -179,7 +179,7 @@ void tst_QFileDialog2::init()
void tst_QFileDialog2::cleanup()
{
- QSettings settings(QSettings::UserScope, QLatin1String("Trolltech"));
+ QSettings settings(QSettings::UserScope, QLatin1String("QtProject"));
settings.beginGroup(QLatin1String("Qt"));
settings.setValue(QLatin1String("filedialog"), userSettings);
}
diff --git a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
index cd246ac25d..a0bd7f72a4 100644
--- a/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
+++ b/tests/auto/widgets/graphicsview/qgraphicsitem/tst_qgraphicsitem.cpp
@@ -8486,7 +8486,9 @@ void tst_QGraphicsItem::focusProxyDeletion()
rect2 = new QGraphicsRectItem;
rect->setFocusProxy(rect2);
+ QGraphicsItem **danglingFocusProxyRef = &rect->d_ptr->focusProxy;
delete rect; // don't crash
+ QVERIFY(!rect2->d_ptr->focusProxyRefs.contains(danglingFocusProxyRef));
rect = new QGraphicsRectItem;
rect->setFocusProxy(rect2);
@@ -9263,6 +9265,45 @@ void tst_QGraphicsItem::focusScope()
scope3->setFocus();
QVERIFY(scope3->hasFocus());
+ // clearFocus() on a focus scope will remove focus from its children.
+ scope1->clearFocus();
+ QVERIFY(!scope1->hasFocus());
+ QVERIFY(!scope2->hasFocus());
+ QVERIFY(!scope3->hasFocus());
+
+ scope1->setFocus();
+ QVERIFY(!scope1->hasFocus());
+ QVERIFY(!scope2->hasFocus());
+ QVERIFY(scope3->hasFocus());
+
+ scope2->clearFocus();
+ QVERIFY(scope1->hasFocus());
+ QVERIFY(!scope2->hasFocus());
+ QVERIFY(!scope3->hasFocus());
+
+ scope2->setFocus();
+ QVERIFY(!scope1->hasFocus());
+ QVERIFY(!scope2->hasFocus());
+ QVERIFY(scope3->hasFocus());
+
+ // Focus cleared while a parent doesn't have focus remains cleared
+ // when the parent regains focus.
+ scope1->clearFocus();
+ scope3->clearFocus();
+ QVERIFY(!scope1->hasFocus());
+ QVERIFY(!scope2->hasFocus());
+ QVERIFY(!scope3->hasFocus());
+
+ scope1->setFocus();
+ QVERIFY(!scope1->hasFocus());
+ QVERIFY(scope2->hasFocus());
+ QVERIFY(!scope3->hasFocus());
+
+ scope3->setFocus();
+ QVERIFY(!scope1->hasFocus());
+ QVERIFY(!scope2->hasFocus());
+ QVERIFY(scope3->hasFocus());
+
QGraphicsRectItem *rect4 = new QGraphicsRectItem;
rect4->setData(0, "rect4");
rect4->setParentItem(scope3);
diff --git a/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp b/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp
index e52ff3fa8b..dc7318ca64 100644
--- a/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp
+++ b/tests/auto/widgets/kernel/qgridlayout/tst_qgridlayout.cpp
@@ -54,6 +54,16 @@
#include <QStyleFactory>
#include <QSharedPointer>
+// Make a widget frameless to prevent size constraints of title bars
+// from interfering (Windows).
+static inline void setFrameless(QWidget *w)
+{
+ Qt::WindowFlags flags = w->windowFlags();
+ flags |= Qt::FramelessWindowHint;
+ flags &= ~(Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint);
+ w->setWindowFlags(flags);
+}
+
class tst_QGridLayout : public QObject
{
Q_OBJECT
@@ -256,6 +266,7 @@ void tst_QGridLayout::badDistributionBug()
void tst_QGridLayout::setMinAndMaxSize()
{
QWidget widget;
+ setFrameless(&widget);
QGridLayout layout(&widget);
layout.setMargin(0);
layout.setSpacing(0);
@@ -412,6 +423,7 @@ private:
void tst_QGridLayout::spacingAndSpacers()
{
QWidget widget;
+ setFrameless(&widget);
QGridLayout layout(&widget);
layout.setMargin(0);
layout.setSpacing(0);
@@ -667,6 +679,8 @@ void tst_QGridLayout::spacingsAndMargins()
QApplication::setStyle(new Qt42Style);
QWidget toplevel;
+ setFrameless(&toplevel);
+
QVBoxLayout vbox(&toplevel);
QGridLayout grid1;
vbox.addLayout(&grid1);
@@ -853,8 +867,10 @@ void tst_QGridLayout::minMaxSize()
QApplication::setStyle(style);
if (!m_grid)
m_grid = new QGridLayout();
- if (!m_toplevel)
+ if (!m_toplevel) {
m_toplevel = new QWidget();
+ setFrameless(m_toplevel);
+ }
if (fixedSize.isValid()) {
m_toplevel->setFixedSize(fixedSize);
} else {
@@ -1061,6 +1077,7 @@ void tst_QGridLayout::styleDependentSpacingsAndMargins()
QApplication::setStyle(new CustomLayoutStyle());
QWidget widget;
+ setFrameless(&widget);
QGridLayout layout(&widget);
QList<QPointer<SizeHinterFrame> > sizehinters;
for (int i = 0; i < rows; ++i) {
@@ -1101,6 +1118,7 @@ void tst_QGridLayout::layoutSpacing_data()
style->reimplementSubelementRect = false;
QApplication::setStyle(style);
QWidget *w = new QWidget();
+ setFrameless(w);
QVBoxLayout *layout = new QVBoxLayout();
QRadioButton *rb1 = new QRadioButton(QLatin1String("Radio 1"), w);
QRadioButton *rb2 = new QRadioButton(QLatin1String("Radio 2"), w);
@@ -1137,6 +1155,7 @@ void tst_QGridLayout::layoutSpacing_data()
style->reimplementSubelementRect = false;
QApplication::setStyle(style);
QWidget *w = new QWidget();
+ setFrameless(w);
QHBoxLayout *layout = new QHBoxLayout();
QLineEdit *le1 = new QLineEdit(w);
QLineEdit *le2 = new QLineEdit(w);
@@ -1174,6 +1193,7 @@ void tst_QGridLayout::layoutSpacing_data()
style->reimplementSubelementRect = true;
QApplication::setStyle(style);
QWidget *w = new QWidget();
+ setFrameless(w);
QVBoxLayout *layout = new QVBoxLayout();
QPushButton *pb1 = new QPushButton(QLatin1String("Push 1"), w);
@@ -1210,6 +1230,7 @@ void tst_QGridLayout::layoutSpacing_data()
style->reimplementSubelementRect = true;
QApplication::setStyle(style);
QWidget *w = new QWidget();
+ setFrameless(w);
QGridLayout *layout = new QGridLayout();
QPushButton *pb1 = new QPushButton(QLatin1String("Push 1"), w);
QPushButton *pb2 = new QPushButton(QLatin1String("Push 2"), w);
@@ -1277,6 +1298,7 @@ void tst_QGridLayout::layoutSpacing_data()
style->reimplementSubelementRect = true;
QApplication::setStyle(style);
QWidget *w = new QWidget();
+ setFrameless(w);
QVBoxLayout *layout = new QVBoxLayout();
QPushButton *pb1 = new QPushButton(QLatin1String("Push 1"), w);
@@ -1316,6 +1338,7 @@ void tst_QGridLayout::layoutSpacing_data()
style->reimplementSubelementRect = true;
QApplication::setStyle(style);
QWidget *w = new QWidget();
+ setFrameless(w);
QVBoxLayout *layout = new QVBoxLayout();
QPushButton *pb1 = new QPushButton(QLatin1String("Push 1"), w);
@@ -1364,6 +1387,7 @@ void tst_QGridLayout::layoutSpacing_data()
style->reimplementSubelementRect = false;
QApplication::setStyle(style);
QWidget *w = new QWidget();
+ setFrameless(w);
QGridLayout *layout = new QGridLayout();
QPushButton *left = new QPushButton(w);
QPushButton *up = new QPushButton(w);
@@ -1405,6 +1429,7 @@ void tst_QGridLayout::layoutSpacing_data()
style->reimplementSubelementRect = false;
QApplication::setStyle(style);
QWidget *w = new QWidget();
+ setFrameless(w);
QGridLayout *layout = new QGridLayout();
QPushButton *left = new QPushButton(w);
QPushButton *up = new QPushButton(w);
@@ -1442,6 +1467,7 @@ void tst_QGridLayout::layoutSpacing()
QFETCH(bool, customSubElementRect);
QWidget toplevel;
+ setFrameless(&toplevel);
CustomLayoutStyle *style = new CustomLayoutStyle();
style->hspacing = hSpacing;
@@ -1466,6 +1492,7 @@ void tst_QGridLayout::layoutSpacing()
void tst_QGridLayout::spacing()
{
QWidget w;
+ setFrameless(&w);
CustomLayoutStyle *style = new CustomLayoutStyle();
style->hspacing = 5;
style->vspacing = 10;
@@ -1569,6 +1596,7 @@ void tst_QGridLayout::spacerWithSpacing()
void tst_QGridLayout::contentsRect()
{
QWidget w;
+ setFrameless(&w);
QGridLayout grid;
w.setLayout(&grid);
grid.addWidget(new QPushButton(&w));
diff --git a/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp b/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp
index 230fcebfcb..058831af2e 100644
--- a/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp
+++ b/tests/auto/widgets/kernel/qwidget_window/tst_qwidget_window.cpp
@@ -230,28 +230,16 @@ void tst_QWidget_window::tst_windowFilePathAndwindowTitle_data()
QString validPath = QApplication::applicationFilePath();
QString fileNameOnly = QFileInfo(validPath).fileName() + QLatin1String("[*]");
- QString fileAndSep = fileNameOnly + QLatin1String(" ") + QChar(0x2014) + QLatin1String(" ");
QString windowTitle = QLatin1String("Here is a Window Title");
-
- QString defaultPlatString =
-#if 0 // was ifdef Q_OS_MAC, but that code is disabled in qwidget.cpp and caption handling should move to QPA anyway
- fileNameOnly;
-#else
- fileAndSep + "tst_qwidget_window"; // default app name in Qt5
-#endif
+ QString defaultPlatString = fileNameOnly;
QTest::newRow("never Set Title nor AppName") << false << false << validPath << QString() << windowTitle << defaultPlatString << defaultPlatString;
QTest::newRow("set title after only, but no AppName") << false << true << validPath << QString() << windowTitle << defaultPlatString << windowTitle;
QTest::newRow("set title before only, not AppName") << true << false << validPath << QString() << windowTitle << windowTitle << windowTitle;
QTest::newRow("always set title, not appName") << true << true << validPath << QString() << windowTitle << windowTitle << windowTitle;
- QString appName = QLatin1String("Killer App");
- QString platString =
-#if 0 // was ifdef Q_OS_MAC, but that code is disabled in qwidget.cpp and caption handling should move to QPA anyway
- fileNameOnly;
-#else
- fileAndSep + appName;
-#endif
+ QString appName = QLatin1String("Killer App"); // Qt4 used to make it part of windowTitle(), Qt5 doesn't anymore, the QPA plugin takes care of it.
+ QString platString = fileNameOnly;
QTest::newRow("never Set Title, yes AppName") << false << false << validPath << appName << windowTitle << platString << platString;
QTest::newRow("set title after only, yes AppName") << false << true << validPath << appName << windowTitle << platString << windowTitle;
diff --git a/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp b/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp
index d266692096..9dee368768 100644
--- a/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp
+++ b/tests/auto/widgets/styles/qstyle/tst_qstyle.cpp
@@ -85,6 +85,16 @@ static bool qt_wince_is_smartphone() {
#include <qwidget.h>
+// Make a widget frameless to prevent size constraints of title bars
+// from interfering (Windows).
+static inline void setFrameless(QWidget *w)
+{
+ Qt::WindowFlags flags = w->windowFlags();
+ flags |= Qt::FramelessWindowHint;
+ flags &= ~(Qt::WindowTitleHint | Qt::WindowSystemMenuHint | Qt::WindowMinMaxButtonsHint | Qt::WindowCloseButtonHint);
+ w->setWindowFlags(flags);
+}
+
class tst_QStyle : public QObject
{
Q_OBJECT
@@ -337,6 +347,7 @@ bool tst_QStyle::testScrollBarSubControls(QStyle* style)
#endif
QScrollBar scrollBar;
+ setFrameless(&scrollBar);
scrollBar.show();
const QStyleOptionSlider opt = qt_qscrollbarStyleOption(&scrollBar);
foreach (int subControl, QList<int>() << 1 << 2 << 4 << 8) {
@@ -586,8 +597,8 @@ public:
};
-int Qt42Style::pixelMetric(PixelMetric metric, const QStyleOption * option /*= 0*/,
- const QWidget * widget /*= 0*/ ) const
+int Qt42Style::pixelMetric(PixelMetric metric, const QStyleOption * /* option = 0*/,
+ const QWidget * /* widget = 0*/ ) const
{
switch (metric) {
case QStyle::PM_DefaultTopLevelMargin:
@@ -660,6 +671,7 @@ void tst_QStyle::progressBarChangeStyle()
void tst_QStyle::lineUpLayoutTest(QStyle *style)
{
QWidget widget;
+ setFrameless(&widget);
QHBoxLayout layout;
QFont font;
font.setPointSize(9); //Plastique is lined up for odd numbers...
@@ -677,10 +689,21 @@ void tst_QStyle::lineUpLayoutTest(QStyle *style)
foreach (QWidget *w, qFindChildren<QWidget *>(&widget))
w->setStyle(style);
widget.show();
- QTest::qWait( 500 );
+ QVERIFY(QTest::qWaitForWindowExposed(&widget));
- QVERIFY(qAbs(spinbox.height() - lineedit.height()) <= 1);
- QVERIFY(qAbs(spinbox.height() - combo.height()) <= 1);
+#ifdef Q_OS_WIN
+ const int limit = 2; // Aero style has larger margins
+#else
+ const int limit = 1;
+#endif
+ const int slDiff = qAbs(spinbox.height() - lineedit.height());
+ const int scDiff = qAbs(spinbox.height() - combo.height());
+ QVERIFY2(slDiff <= limit,
+ qPrintable(QString::fromLatin1("%1 exceeds %2 for %3")
+ .arg(slDiff).arg(limit).arg(style->objectName())));
+ QVERIFY2(scDiff <= limit,
+ qPrintable(QString::fromLatin1("%1 exceeds %2 for %3")
+ .arg(scDiff).arg(limit).arg(style->objectName())));
}
void tst_QStyle::defaultFont()
@@ -690,6 +713,7 @@ void tst_QStyle::defaultFont()
pointFont.setPixelSize(9);
qApp->setFont(pointFont);
QPushButton button;
+ setFrameless(&button);
button.show();
qApp->processEvents();
qApp->setFont(defaultFont);
@@ -716,6 +740,7 @@ void tst_QStyle::testDrawingShortcuts()
{
{
QWidget w;
+ setFrameless(&w);
QToolButton *tb = new QToolButton(&w);
tb->setText("&abc");
DrawTextStyle *dts = new DrawTextStyle;
@@ -730,6 +755,7 @@ void tst_QStyle::testDrawingShortcuts()
}
{
QToolBar w;
+ setFrameless(&w);
QToolButton *tb = new QToolButton(&w);
tb->setText("&abc");
DrawTextStyle *dts = new DrawTextStyle;
diff --git a/tests/auto/widgets/widgets/qabstractscrollarea/tst_qabstractscrollarea.cpp b/tests/auto/widgets/widgets/qabstractscrollarea/tst_qabstractscrollarea.cpp
index 0420ecf1e0..d39b187c8b 100644
--- a/tests/auto/widgets/widgets/qabstractscrollarea/tst_qabstractscrollarea.cpp
+++ b/tests/auto/widgets/widgets/qabstractscrollarea/tst_qabstractscrollarea.cpp
@@ -238,17 +238,17 @@ void tst_QAbstractScrollArea::setScrollBars2()
// Hide the OLD scroll bar and ensure that the NEW one is hidden.
hbar->hide();
- scrollArea.setHorizontalScrollBar(new QScrollBar);
- qApp->processEvents();
- QVERIFY(!scrollArea.horizontalScrollBar()->isVisible());
+ hbar = new QScrollBar(&scrollArea);
+ scrollArea.setHorizontalScrollBar(hbar);
+ QVERIFY(!hbar->isVisibleTo(hbar->parentWidget()));
vbar->hide();
- scrollArea.setVerticalScrollBar(new QScrollBar);
- qApp->processEvents();
- QVERIFY(!scrollArea.verticalScrollBar()->isVisible());
+ vbar = new QScrollBar(&scrollArea);
+ scrollArea.setVerticalScrollBar(vbar);
+ QVERIFY(!vbar->isVisibleTo(vbar->parentWidget()));
- scrollArea.verticalScrollBar()->show();
- scrollArea.horizontalScrollBar()->show();
+ vbar->show();
+ hbar->show();
// Hide the NEW scroll bar and ensure that it's visible
// (because the OLD one is visible).
diff --git a/tests/auto/widgets/widgets/qmdiarea/qmdiarea.pro b/tests/auto/widgets/widgets/qmdiarea/qmdiarea.pro
index 141392b251..cc2bcb3c30 100644
--- a/tests/auto/widgets/widgets/qmdiarea/qmdiarea.pro
+++ b/tests/auto/widgets/widgets/qmdiarea/qmdiarea.pro
@@ -6,7 +6,7 @@ QT += gui-private widgets testlib
INCLUDEPATH += .
SOURCES += tst_qmdiarea.cpp
DEFINES += QT_NO_CAST_TO_ASCII QT_NO_CAST_FROM_ASCII
-contains(QT_CONFIG, opengl):QT += opengl
+qtHaveModule(opengl): QT += opengl
mac {
LIBS += -framework Security
diff --git a/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp b/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp
index 5aa7b19917..ba5c461223 100644
--- a/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp
+++ b/tests/auto/widgets/widgets/qmdiarea/tst_qmdiarea.cpp
@@ -1733,9 +1733,9 @@ void tst_QMdiArea::tileSubWindows()
QTRY_COMPARE(workspace.viewport()->rect().size(), expectedViewportSize);
// Not enough space for all sub-windows to be visible -> provide scroll bars.
- workspace.resize(150, 150);
+ workspace.resize(160, 150);
qApp->processEvents();
- QTRY_COMPARE(workspace.size(), QSize(150, 150));
+ QTRY_COMPARE(workspace.size(), QSize(160, 150));
// Horizontal scroll bar.
QScrollBar *hBar = workspace.horizontalScrollBar();
@@ -2594,7 +2594,10 @@ void tst_QMdiArea::nativeSubWindows()
const QString platformName = QGuiApplication::platformName();
if (platformName != QLatin1String("xcb") && platformName != QLatin1String("windows"))
QSKIP(qPrintable(QString::fromLatin1("nativeSubWindows() does not work on this platform (%1).").arg(platformName)));
-
+#ifdef QT_OPENGL_ES_2_ANGLE
+ if (platformName == QLatin1String("windows"))
+ QSKIP("nativeSubWindows() does not work with ANGLE on Windows, QTBUG-28545.");
+#endif
{ // Add native widgets after show.
QMdiArea mdiArea;
mdiArea.addSubWindow(new QWidget);
diff --git a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
index 2535e23ab8..3aefe26b1c 100644
--- a/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
+++ b/tests/auto/widgets/widgets/qmenubar/tst_qmenubar.cpp
@@ -1016,6 +1016,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;
+};
+
// Qt/Mac,WinCE does not use the native popups/menubar
#if !defined(Q_OS_MAC) && !defined(Q_OS_WINCE)
void tst_QMenuBar::check_menuPosition()
@@ -1070,10 +1089,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);
@@ -1082,8 +1100,23 @@ void tst_QMenuBar::check_menuPosition()
QVERIFY(menu.isActiveWindow());
QCOMPARE(menu.geometry().right(), mbItemRect.right());
menu.close();
- qApp->setLayoutDirection(dir);
}
+
+# ifndef QTEST_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 // QTEST_NO_CURSOR
}
#endif