From 060b862b614285aae88540895736a57eb8563102 Mon Sep 17 00:00:00 2001 From: Teo Mrnjavac Date: Wed, 11 Sep 2013 17:22:45 +0200 Subject: Bring back Qt4 X11 session management functionality. Added QXcbSessionManager to the Xcb plugin. QXcbSessionManager inherits from QPlatformSessionManager, it's a port of QSessionManager as it is in Qt 4.8. Minor changes also in QPlatformSessionManager and QGuiApplication to hook it up. Task-number: QTBUG-28228 Task-number: QTBUG-30011 Task-number: QTBUG-33033 Change-Id: I50b33d05a1e32c5278dea339f693713acc870a70 Reviewed-by: Friedemann Kleint Reviewed-by: David Faure --- src/gui/kernel/qguiapplication.cpp | 2 +- src/gui/kernel/qguiapplication.h | 3 +++ src/gui/kernel/qplatformsessionmanager.cpp | 23 +++++++++++++++++++++++ src/gui/kernel/qplatformsessionmanager.h | 15 +++++++++++++-- src/gui/kernel/qsessionmanager.cpp | 3 ++- 5 files changed, 42 insertions(+), 4 deletions(-) (limited to 'src/gui/kernel') diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp index 882eefb60e..7f258331d3 100644 --- a/src/gui/kernel/qguiapplication.cpp +++ b/src/gui/kernel/qguiapplication.cpp @@ -1162,9 +1162,9 @@ void QGuiApplicationPrivate::init() init_plugins(pluginList); QWindowSystemInterface::flushWindowSystemEvents(); +#ifndef QT_NO_SESSIONMANAGER Q_Q(QGuiApplication); -#ifndef QT_NO_SESSIONMANAGER // connect to the session manager session_manager = new QSessionManager(q, session_id, session_key); #endif diff --git a/src/gui/kernel/qguiapplication.h b/src/gui/kernel/qguiapplication.h index a0aef83eed..bd42f18418 100644 --- a/src/gui/kernel/qguiapplication.h +++ b/src/gui/kernel/qguiapplication.h @@ -184,6 +184,9 @@ private: #endif friend class QFontDatabasePrivate; friend class QPlatformIntegration; +#ifndef QT_NO_SESSIONMANAGER + friend class QPlatformSessionManager; +#endif }; QT_END_NAMESPACE diff --git a/src/gui/kernel/qplatformsessionmanager.cpp b/src/gui/kernel/qplatformsessionmanager.cpp index 6eb88a9450..97c40d863c 100644 --- a/src/gui/kernel/qplatformsessionmanager.cpp +++ b/src/gui/kernel/qplatformsessionmanager.cpp @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2013 Samuel Gaist +** Copyright (C) 2013 Teo Mrnjavac ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** @@ -42,6 +43,10 @@ #include "qplatformsessionmanager.h" +#include "qguiapplication_p.h" + +#ifndef QT_NO_SESSIONMANAGER + QT_BEGIN_NAMESPACE QPlatformSessionManager::QPlatformSessionManager(const QString &id, const QString &key) @@ -113,6 +118,12 @@ QStringList QPlatformSessionManager::discardCommand() const return m_discardCommand; } +void QPlatformSessionManager::setManagerProperty(const QString &name, const QString &value) +{ + Q_UNUSED(name) + Q_UNUSED(value) +} + void QPlatformSessionManager::setManagerProperty(const QString &name, const QStringList &value) { Q_UNUSED(name) @@ -128,4 +139,16 @@ void QPlatformSessionManager::requestPhase2() { } +void QPlatformSessionManager::appCommitData() +{ + qGuiApp->d_func()->commitData(); +} + +void QPlatformSessionManager::appSaveState() +{ + qGuiApp->d_func()->saveState(); +} + QT_END_NAMESPACE + +#endif // QT_NO_SESSIONMANAGER diff --git a/src/gui/kernel/qplatformsessionmanager.h b/src/gui/kernel/qplatformsessionmanager.h index 0389a7b076..23b7a62436 100644 --- a/src/gui/kernel/qplatformsessionmanager.h +++ b/src/gui/kernel/qplatformsessionmanager.h @@ -1,6 +1,7 @@ /**************************************************************************** ** ** Copyright (C) 2013 Samuel Gaist +** Copyright (C) 2013 Teo Mrnjavac ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies). ** Contact: http://www.qt-project.org/legal ** @@ -57,6 +58,8 @@ #include +#ifndef QT_NO_SESSIONMANAGER + QT_BEGIN_NAMESPACE class Q_GUI_EXPORT QPlatformSessionManager @@ -82,16 +85,22 @@ public: virtual void setDiscardCommand(const QStringList &command); virtual QStringList discardCommand() const; + virtual void setManagerProperty(const QString &name, const QString &value); virtual void setManagerProperty(const QString &name, const QStringList &value); virtual bool isPhase2() const; virtual void requestPhase2(); +protected: + virtual void appCommitData(); + virtual void appSaveState(); + + QString m_sessionId; + QString m_sessionKey; + private: QStringList m_restartCommand; QStringList m_discardCommand; - const QString m_sessionId; - const QString m_sessionKey; QSessionManager::RestartHint m_restartHint; Q_DISABLE_COPY(QPlatformSessionManager) @@ -99,4 +108,6 @@ private: QT_END_NAMESPACE +#endif // QT_NO_SESSIONMANAGER + #endif // QPLATFORMSESSIONMANAGER_H diff --git a/src/gui/kernel/qsessionmanager.cpp b/src/gui/kernel/qsessionmanager.cpp index 8ac3c24a8f..8cc8d3d961 100644 --- a/src/gui/kernel/qsessionmanager.cpp +++ b/src/gui/kernel/qsessionmanager.cpp @@ -365,7 +365,8 @@ QStringList QSessionManager::discardCommand() const void QSessionManager::setManagerProperty(const QString &name, const QString &value) { - setManagerProperty(name, QStringList(value)); + Q_D(QSessionManager); + d->platformSessionManager->setManagerProperty(name, value); } /*! -- cgit v1.2.3