Move the removal of the Quit event to QWindow.

Change-Id: If524127ba9dab9ef065aaf4079294295eef8e49b
Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
This commit is contained in:
Stephen Kelly 2012-02-11 01:10:07 +01:00 committed by Qt by Nokia
parent c455674555
commit 394315d902
4 changed files with 83 additions and 3 deletions

View File

@ -178,6 +178,9 @@ void QWindow::setVisible(bool visible)
create();
if (visible) {
// remove posted quit events when showing a new window
QCoreApplication::removePostedEvents(qApp, QEvent::Quit);
QShowEvent showEvent;
QGuiApplication::sendEvent(this, &showEvent);
}

View File

@ -7245,9 +7245,6 @@ void QWidget::setVisible(bool visible)
setAttribute(Qt::WA_KeyboardFocusChange, false);
if (isWindow() || parentWidget()->isVisible()) {
// remove posted quit events when showing a new window
QCoreApplication::removePostedEvents(qApp, QEvent::Quit);
d->show_helper();
qApp->d_func()->sendSyntheticEnterLeave(this);

View File

@ -53,6 +53,7 @@ private slots:
void focusObject();
void allWindows();
void topLevelWindows();
void abortQuitOnShow();
};
class DummyWindow : public QWindow
@ -152,5 +153,44 @@ void tst_QGuiApplication::topLevelWindows()
QCOMPARE(app.topLevelWindows().count(), 0);
}
class ShowCloseShowWindow : public QWindow
{
Q_OBJECT
public:
ShowCloseShowWindow(bool showAgain, QWindow *parent = 0)
: QWindow(parent), showAgain(showAgain)
{
QTimer::singleShot(0, this, SLOT(doClose()));
QTimer::singleShot(500, this, SLOT(exitApp()));
}
private slots:
void doClose() {
close();
if (showAgain)
show();
}
void exitApp() {
qApp->exit(1);
}
private:
bool showAgain;
};
void tst_QGuiApplication::abortQuitOnShow()
{
int argc = 0;
QGuiApplication app(argc, 0);
QWindow *window1 = new ShowCloseShowWindow(false);
window1->show();
QCOMPARE(app.exec(), 0);
QWindow *window2 = new ShowCloseShowWindow(true);
window2->show();
QCOMPARE(app.exec(), 1);
}
QTEST_APPLESS_MAIN(tst_QGuiApplication)
#include "tst_qguiapplication.moc"

View File

@ -149,6 +149,8 @@ private slots:
void testQuitLock8();
void globalStaticObjectDestruction(); // run this last
void abortQuitOnShow();
};
class EventSpy : public QObject
@ -2560,6 +2562,44 @@ void tst_QApplication::testQuitLock8()
// No hang = pass
}
class ShowCloseShowWidget : public QWidget
{
Q_OBJECT
public:
ShowCloseShowWidget(bool showAgain, QWidget *parent = 0)
: QWidget(parent), showAgain(showAgain)
{
QTimer::singleShot(0, this, SLOT(doClose()));
QTimer::singleShot(500, this, SLOT(exitApp()));
}
private slots:
void doClose() {
close();
if (showAgain)
show();
}
void exitApp() {
qApp->exit(1);
}
private:
bool showAgain;
};
void tst_QApplication::abortQuitOnShow()
{
int argc = 0;
QApplication app(argc, 0);
QWidget *window1 = new ShowCloseShowWidget(false);
window1->show();
QCOMPARE(app.exec(), 0);
QWidget *window2 = new ShowCloseShowWidget(true);
window2->show();
QCOMPARE(app.exec(), 1);
}
/*
This test is meant to ensure that certain objects (public & commonly used)