File Close-windows-when-saving-session-data.patch of Package kxmlgui
From 18ca6e9cefbdb3679f27f097d271e4245f2390f8 Mon Sep 17 00:00:00 2001
From: Allan Sandfeld Jensen <allan.jensen@qt.io>
Date: Mon, 10 Aug 2020 09:54:14 +0200
Subject: [PATCH] Handle double close in main window
After a bug fix in Qt 5.14 we now get real close events for unclosed windows
when the application closes, so we would be getting two close events breaking
our logic when when to suppress on-close dialogs.
Suppress the real close event after we have handled our own simulated one. Also
works if there is no real close event.
BUG: 416728
---
src/kmainwindow.cpp | 8 ++++++++
src/kmainwindow_p.h | 1 +
2 files changed, 9 insertions(+)
diff --git a/src/kmainwindow.cpp b/src/kmainwindow.cpp
index 2ca6b1d0..e7e51e85 100644
--- a/src/kmainwindow.cpp
+++ b/src/kmainwindow.cpp
@@ -280,6 +280,7 @@ void KMainWindowPrivate::init(KMainWindow *_q)
letDirtySettings = true;
sizeApplied = false;
+ suppressCloseEvent = false;
}
static bool endsWithHashNumber(const QString &s)
@@ -530,6 +531,10 @@ void KMainWindow::appHelpActivated()
void KMainWindow::closeEvent(QCloseEvent *e)
{
K_D(KMainWindow);
+ if (d->suppressCloseEvent) {
+ e->accept();
+ return;
+ }
// Save settings if auto-save is enabled, and settings have changed
if (d->settingsTimer && d->settingsTimer->isActive()) {
@@ -550,6 +555,9 @@ void KMainWindow::closeEvent(QCloseEvent *e)
} else {
e->ignore(); //if the window should not be closed, don't close it
}
+ // If saving session, we are processing a fake close event, and might get the real one later.
+ if (e->isAccepted() && qApp->isSavingSession())
+ d->suppressCloseEvent = true;
}
bool KMainWindow::queryClose()
diff --git a/src/kmainwindow_p.h b/src/kmainwindow_p.h
index 910680de..58d3bdc0 100644
--- a/src/kmainwindow_p.h
+++ b/src/kmainwindow_p.h
@@ -47,6 +47,7 @@ public:
bool settingsDirty: 1;
bool autoSaveWindowSize: 1;
bool sizeApplied: 1;
+ bool suppressCloseEvent: 1;
KConfigGroup autoSaveGroup;
QTimer *settingsTimer;
QTimer *sizeTimer;
--
GitLab