summaryrefslogtreecommitdiffstats
path: root/examples/widgets
diff options
context:
space:
mode:
authorAndreas Hartmetz <ahartmetz@gmail.com>2016-01-19 14:30:18 +0100
committerJani Heikkinen <jani.heikkinen@theqtcompany.com>2016-02-15 16:10:20 +0000
commite7bf0edfd49de9a4d8285fbe8d878f8fda910e6d (patch)
treefa51fbe7c13dc48ea0e79fd7646dbbda5b8c5e68 /examples/widgets
parent8c2b4266002736da499d169a0da187e5cdc5381a (diff)
Add option to disable "session management by closing windows".
That feature is a poor man's session management for applications that do not implement any specific session management features. It badly interferes with proper session management support, so applications must be able to disable it. This enables fixing applications with QGuiApplication::quitOnLastWindowClosed() true - the default - dying too early, before they are enumerated for the list of applications to restart on session restore, thus preventing them from being restored. See https://bugs.kde.org/show_bug.cgi?id=354724 [ChangeLog][QtGui] Qt asking to close windows on session exit as a fallback session management mechanism has been made optional. Disabling it fixes session management for applications that implement full session management. See QGuiApplication::isFallbackSessionManagementEnabled(). Task-number: QTBUG-49667 Change-Id: Ib22e58c9c64351dea8b7e2a74db91d26dd7ab7aa Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> Reviewed-by: David Faure <david.faure@kdab.com>
Diffstat (limited to 'examples/widgets')
-rw-r--r--examples/widgets/mainwindows/application/mainwindow.cpp16
-rw-r--r--examples/widgets/mainwindows/application/mainwindow.h2
2 files changed, 18 insertions, 0 deletions
diff --git a/examples/widgets/mainwindows/application/mainwindow.cpp b/examples/widgets/mainwindows/application/mainwindow.cpp
index 86dfae166f..861b908189 100644
--- a/examples/widgets/mainwindows/application/mainwindow.cpp
+++ b/examples/widgets/mainwindows/application/mainwindow.cpp
@@ -59,6 +59,10 @@ MainWindow::MainWindow()
connect(textEdit->document(), &QTextDocument::contentsChanged,
this, &MainWindow::documentWasModified);
+ QGuiApplication::setFallbackSessionManagementEnabled(false);
+ connect(qApp, &QGuiApplication::commitDataRequest,
+ this, &MainWindow::commitData);
+
setCurrentFile(QString());
setUnifiedTitleAndToolBarOnMac(true);
}
@@ -383,3 +387,15 @@ QString MainWindow::strippedName(const QString &fullFileName)
return QFileInfo(fullFileName).fileName();
}
//! [49]
+
+void MainWindow::commitData(QSessionManager &manager)
+{
+ if (manager.allowsInteraction()) {
+ if (!maybeSave())
+ manager.cancel();
+ } else {
+ // Non-interactive: save without asking
+ if (textEdit->document()->isModified())
+ save();
+ }
+}
diff --git a/examples/widgets/mainwindows/application/mainwindow.h b/examples/widgets/mainwindows/application/mainwindow.h
index 08b4aa17f5..9712604125 100644
--- a/examples/widgets/mainwindows/application/mainwindow.h
+++ b/examples/widgets/mainwindows/application/mainwindow.h
@@ -47,6 +47,7 @@ QT_BEGIN_NAMESPACE
class QAction;
class QMenu;
class QPlainTextEdit;
+class QSessionManager;
QT_END_NAMESPACE
//! [0]
@@ -69,6 +70,7 @@ private slots:
bool saveAs();
void about();
void documentWasModified();
+ void commitData(QSessionManager &);
private:
void createActions();