if Dolphin is closed by the session manager, i.e., if the user logs
out. The fix is inspired by the way this issue is handled in
Konqueror.
BUG: 201803
svn path=/trunk/KDE/kdebase/apps/; revision=
1011002
#include <QtDBus/QDBusConnection>
DolphinApplication::DolphinApplication() :
- m_lastId(0)
+ m_lastId(0), m_closedBySessionManager(false)
{
new ApplicationAdaptor(this);
QDBusConnection::sessionBus().registerObject("/dolphin/Application", this);
return 0;
}
+bool DolphinApplication::closedBySessionManager() const
+{
+ return m_closedBySessionManager;
+}
+
+void DolphinApplication::commitData(QSessionManager& sessionManager) {
+ m_closedBySessionManager = true;
+ KUniqueApplication::commitData(sessionManager);
+ m_closedBySessionManager = false;
+}
+
int DolphinApplication::openWindow(const KUrl& url)
{
DolphinMainWindow* win = createMainWindow();
/** @see KUniqueApplication::newInstance(). */
virtual int newInstance();
+ /**
+ * Find out if Dolphin is closed directly by the user or
+ * by the session manager because the session is closed
+ */
+ bool closedBySessionManager() const;
+
+ /**
+ * This virtual function is called by the session manager when
+ * it closes Dolphin. It is reimplemented to make the information
+ * if Dolphin is closed by the session manager or not accessible in
+ * DolphinMainWindow (via the function closedBySessionManager()).
+ */
+ virtual void commitData(QSessionManager& sessionManager);
+
public slots:
int openWindow(const KUrl& url);
int openSplitWindow(const KUrl& leftUrl,const KUrl& rightUrl);
private:
QList<DolphinMainWindow*> m_mainWindows;
int m_lastId;
+
+ /** Is true if Dolphin is closed by the session manager **/
+ bool m_closedBySessionManager;
};
#endif
DolphinSettings& settings = DolphinSettings::instance();
GeneralSettings* generalSettings = settings.generalSettings();
- if ((m_viewTab.count() > 1) && generalSettings->confirmClosingMultipleTabs()) {
+ // Find out if Dolphin is closed directly by the user or
+ // by the session manager because the session is closed
+ bool closedByUser = true;
+ DolphinApplication *application = qobject_cast<DolphinApplication*>(qApp);
+ if (application && application->closedBySessionManager()) {
+ closedByUser = false;
+ }
+
+ if ((m_viewTab.count() > 1) && generalSettings->confirmClosingMultipleTabs() && closedByUser) {
// Ask the user if he really wants to quit and close all tabs.
// Open a confirmation dialog with 3 buttons:
// KDialog::Yes -> Quit