kdeui: close only QMainWindow and derived classes from the KApplication quit handler

any widget should be parented to the main window (i.e. be a child of the
main window)

Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
Ivailo Monev 2022-12-23 17:49:33 +02:00
parent d5e9d695df
commit 8ab4b4bd40

View file

@ -104,19 +104,18 @@ static void quit_handler(int sig)
if (qApp->type() == KAPPLICATION_GUI_TYPE) {
const QWidgetList toplevelwidgets = QApplication::topLevelWidgets();
if (!toplevelwidgets.isEmpty()) {
kDebug(240) << "closing top-level widgets";
kDebug(240) << "closing top-level main windows";
foreach (QWidget* topwidget, toplevelwidgets) {
if (!topwidget) {
if (!topwidget || !topwidget->isWindow() || !topwidget->inherits("QMainWindow")) {
continue;
}
QCloseEvent closeevent;
QApplication::sendEvent(topwidget, &closeevent);
if (!closeevent.isAccepted()) {
kDebug(240) << "not quiting because a top-level widget did not close";
kDebug(240) << "sending close event to" << topwidget;
if (!topwidget->close()) {
kDebug(240) << "not quiting because a top-level window did not close";
return;
}
}
kDebug(240) << "all top-level widgets closed";
kDebug(240) << "all top-level main windows closed";
}
}
KDE_signal(sig, SIG_DFL);