]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Do not warn the user about closing Dolphin windows with multiple tabs
authorFrank Reininghaus <frank78ac@googlemail.com>
Thu, 13 Aug 2009 18:54:16 +0000 (18:54 +0000)
committerFrank Reininghaus <frank78ac@googlemail.com>
Thu, 13 Aug 2009 18:54:16 +0000 (18:54 +0000)
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

src/dolphinapplication.cpp
src/dolphinapplication.h
src/dolphinmainwindow.cpp

index f61bf795a1a5ebcde2609f3bb62478072ac0b43c..988019de1bf9d7e16b01b9519d82e28ef5f833ec 100644 (file)
@@ -28,7 +28,7 @@
 #include <QtDBus/QDBusConnection>
 
 DolphinApplication::DolphinApplication() :
-    m_lastId(0)
+    m_lastId(0), m_closedBySessionManager(false)
 {
     new ApplicationAdaptor(this);
     QDBusConnection::sessionBus().registerObject("/dolphin/Application", this);
@@ -100,6 +100,17 @@ int DolphinApplication::newInstance()
     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();
index af2006e7dc4a59c52874b0f2a3a0e4d2fb8922ed..4c65443612b777643ee7e7b85c507f34cc76da09 100644 (file)
@@ -56,6 +56,20 @@ public:
     /** @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);
@@ -67,6 +81,9 @@ protected:
 private:
     QList<DolphinMainWindow*> m_mainWindows;
     int m_lastId;
+
+    /** Is true if Dolphin is closed by the session manager **/
+    bool m_closedBySessionManager;
 };
 
 #endif
index bf39db15d83ca14749f61470ca1aa1d2c7a7c52f..6443494ef3c6fd0364e95a9927fbbd3479b998df 100644 (file)
@@ -426,7 +426,15 @@ void DolphinMainWindow::closeEvent(QCloseEvent* event)
     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