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:
parent
c455674555
commit
394315d902
@ -178,6 +178,9 @@ void QWindow::setVisible(bool visible)
|
|||||||
create();
|
create();
|
||||||
|
|
||||||
if (visible) {
|
if (visible) {
|
||||||
|
// remove posted quit events when showing a new window
|
||||||
|
QCoreApplication::removePostedEvents(qApp, QEvent::Quit);
|
||||||
|
|
||||||
QShowEvent showEvent;
|
QShowEvent showEvent;
|
||||||
QGuiApplication::sendEvent(this, &showEvent);
|
QGuiApplication::sendEvent(this, &showEvent);
|
||||||
}
|
}
|
||||||
|
@ -7245,9 +7245,6 @@ void QWidget::setVisible(bool visible)
|
|||||||
setAttribute(Qt::WA_KeyboardFocusChange, false);
|
setAttribute(Qt::WA_KeyboardFocusChange, false);
|
||||||
|
|
||||||
if (isWindow() || parentWidget()->isVisible()) {
|
if (isWindow() || parentWidget()->isVisible()) {
|
||||||
// remove posted quit events when showing a new window
|
|
||||||
QCoreApplication::removePostedEvents(qApp, QEvent::Quit);
|
|
||||||
|
|
||||||
d->show_helper();
|
d->show_helper();
|
||||||
|
|
||||||
qApp->d_func()->sendSyntheticEnterLeave(this);
|
qApp->d_func()->sendSyntheticEnterLeave(this);
|
||||||
|
@ -53,6 +53,7 @@ private slots:
|
|||||||
void focusObject();
|
void focusObject();
|
||||||
void allWindows();
|
void allWindows();
|
||||||
void topLevelWindows();
|
void topLevelWindows();
|
||||||
|
void abortQuitOnShow();
|
||||||
};
|
};
|
||||||
|
|
||||||
class DummyWindow : public QWindow
|
class DummyWindow : public QWindow
|
||||||
@ -152,5 +153,44 @@ void tst_QGuiApplication::topLevelWindows()
|
|||||||
QCOMPARE(app.topLevelWindows().count(), 0);
|
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)
|
QTEST_APPLESS_MAIN(tst_QGuiApplication)
|
||||||
#include "tst_qguiapplication.moc"
|
#include "tst_qguiapplication.moc"
|
||||||
|
@ -149,6 +149,8 @@ private slots:
|
|||||||
void testQuitLock8();
|
void testQuitLock8();
|
||||||
|
|
||||||
void globalStaticObjectDestruction(); // run this last
|
void globalStaticObjectDestruction(); // run this last
|
||||||
|
|
||||||
|
void abortQuitOnShow();
|
||||||
};
|
};
|
||||||
|
|
||||||
class EventSpy : public QObject
|
class EventSpy : public QObject
|
||||||
@ -2560,6 +2562,44 @@ void tst_QApplication::testQuitLock8()
|
|||||||
// No hang = pass
|
// 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)
|
This test is meant to ensure that certain objects (public & commonly used)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user