Stabilize test qmenu::pushButtonPopulateOnAboutToShow().

Do not leave an allocated menu in member lastMenu behind that
interferes with the consecutive QTBUG7907_submenus_autoselect().

Change-Id: I80fc9de9ca63367264f642023a244c1d7d8ada7f
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@digia.com>
This commit is contained in:
Friedemann Kleint 2012-10-08 11:19:24 +02:00 committed by The Qt Project
parent 38a6d7e7a1
commit 27e901de92

View File

@ -108,7 +108,6 @@ protected slots:
void onStatusMessageChanged(const QString &); void onStatusMessageChanged(const QString &);
void onStatusTipTimer(); void onStatusTipTimer();
void deleteAction(QAction *a) { delete a; } void deleteAction(QAction *a) { delete a; }
void populateMenu();
private: private:
void createActions(); void createActions();
QMenu *menus[2], *lastMenu; QMenu *menus[2], *lastMenu;
@ -242,15 +241,6 @@ void tst_QMenu::onStatusMessageChanged(const QString &s)
statustip=s; statustip=s;
} }
void tst_QMenu::populateMenu()
{
//just adds 3 dummy actions and a separator.
lastMenu->addAction("Foo");
lastMenu->addAction("Bar");
lastMenu->addAction("FooBar");
lastMenu->addSeparator();
}
void tst_QMenu::addActionsAndClear() void tst_QMenu::addActionsAndClear()
{ {
#ifdef QT_SOFTKEYS_ENABLED #ifdef QT_SOFTKEYS_ENABLED
@ -823,14 +813,37 @@ void tst_QMenu::deleteActionInTriggered()
QVERIFY(!a); QVERIFY(!a);
} }
class PopulateOnAboutToShowTestMenu : public QMenu {
Q_OBJECT
public:
explicit PopulateOnAboutToShowTestMenu(QWidget *parent = 0);
public slots:
void populateMenu();
};
PopulateOnAboutToShowTestMenu::PopulateOnAboutToShowTestMenu(QWidget *parent) : QMenu(parent)
{
connect(this, SIGNAL(aboutToShow()), this, SLOT(populateMenu()));
}
void PopulateOnAboutToShowTestMenu::populateMenu()
{
// just adds 3 dummy actions and a separator.
addAction("Foo");
addAction("Bar");
addAction("FooBar");
addSeparator();
}
void tst_QMenu::pushButtonPopulateOnAboutToShow() void tst_QMenu::pushButtonPopulateOnAboutToShow()
{ {
QPushButton b("Test PushButton"); QPushButton b("Test PushButton");
b.setWindowFlags(Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint); b.setWindowFlags(Qt::FramelessWindowHint | Qt::X11BypassWindowManagerHint);
lastMenu = new QMenu;
b.setMenu(lastMenu); QMenu *buttonMenu= new PopulateOnAboutToShowTestMenu(&b);
b.setMenu(buttonMenu);
const int scrNumber = QApplication::desktop()->screenNumber(&b); const int scrNumber = QApplication::desktop()->screenNumber(&b);
connect(lastMenu, SIGNAL(aboutToShow()), this, SLOT(populateMenu()));
b.show(); b.show();
const QRect screen = QApplication::desktop()->screenGeometry(scrNumber); const QRect screen = QApplication::desktop()->screenGeometry(scrNumber);
@ -850,17 +863,17 @@ void tst_QMenu::pushButtonPopulateOnAboutToShow()
QSKIP("Your window manager won't allow a window against the bottom of the screen"); QSKIP("Your window manager won't allow a window against the bottom of the screen");
} }
QTimer::singleShot(300,lastMenu, SLOT(hide())); QTimer::singleShot(300, buttonMenu, SLOT(hide()));
QTest::mouseClick(&b, Qt::LeftButton, Qt::NoModifier, b.rect().center()); QTest::mouseClick(&b, Qt::LeftButton, Qt::NoModifier, b.rect().center());
QVERIFY(!lastMenu->geometry().intersects(b.geometry())); QVERIFY(!buttonMenu->geometry().intersects(b.geometry()));
// note: we're assuming that, if we previously got the desired geometry, we'll get it here too // note: we're assuming that, if we previously got the desired geometry, we'll get it here too
b.move(10, screen.bottom()-lastMenu->height()-5); b.move(10, screen.bottom()-buttonMenu->height()-5);
QTimer::singleShot(300,lastMenu, SLOT(hide())); QTimer::singleShot(300, buttonMenu, SLOT(hide()));
QTest::mouseClick(&b, Qt::LeftButton, Qt::NoModifier, b.rect().center()); QTest::mouseClick(&b, Qt::LeftButton, Qt::NoModifier, b.rect().center());
QVERIFY(!lastMenu->geometry().intersects(b.geometry())); QVERIFY(!buttonMenu->geometry().intersects(b.geometry()));
} }
void tst_QMenu::QTBUG7907_submenus_autoselect() void tst_QMenu::QTBUG7907_submenus_autoselect()
{ {
QMenu menu("Test Menu"); QMenu menu("Test Menu");