]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Ask for confirmation when closing a Dolphin window with more than one tab. This can...
authorFrank Reininghaus <frank78ac@googlemail.com>
Thu, 12 Mar 2009 22:40:32 +0000 (22:40 +0000)
committerFrank Reininghaus <frank78ac@googlemail.com>
Thu, 12 Mar 2009 22:40:32 +0000 (22:40 +0000)
FEATURE: 168417

svn path=/trunk/KDE/kdebase/apps/; revision=938767

src/dolphinmainwindow.cpp
src/settings/behaviorsettingspage.cpp
src/settings/behaviorsettingspage.h
src/settings/dolphin_generalsettings.kcfg

index 0151d48b17a273468edbb4e3812d1f63f524361b..fe106602567b2cdb08b42e745bfbc2686cb1a4d6 100644 (file)
@@ -425,6 +425,50 @@ void DolphinMainWindow::closeEvent(QCloseEvent* event)
 {
     DolphinSettings& settings = DolphinSettings::instance();
     GeneralSettings* generalSettings = settings.generalSettings();
+
+    if ((m_viewTab.count() > 1) && generalSettings->confirmClosingMultipleTabs()) {
+        // Ask the user if he really wants to quit and close all tabs.
+        // Open a confirmation dialog with 3 buttons:
+        // KDialog::Yes    -> Quit
+        // KDialog::No     -> Close only the current tab
+        // KDialog::Cancel -> do nothing
+        KDialog *dialog = new KDialog(this, Qt::Dialog);
+        dialog->setCaption(i18nc("@title:window", "Confirmation"));
+        dialog->setButtons(KDialog::Yes | KDialog::No | KDialog::Cancel);
+        dialog->setModal(true);
+        dialog->showButtonSeparator(true);
+        dialog->setButtonGuiItem(KDialog::Yes, KStandardGuiItem::quit());
+        dialog->setButtonGuiItem(KDialog::No, KGuiItem(i18n("C&lose Current Tab"), KIcon("tab-close")));
+        dialog->setButtonGuiItem(KDialog::Cancel, KStandardGuiItem::cancel());
+        dialog->setDefaultButton(KDialog::Yes);
+
+        bool doNotAskAgainCheckboxResult = false;
+
+        const int result = KMessageBox::createKMessageBox(dialog, 
+            QMessageBox::Warning,
+            i18n("You have multiple tabs open in this window, are you sure you want to quit?"),
+            QStringList(),
+            i18n("Do not ask again"),
+            &doNotAskAgainCheckboxResult,
+            KMessageBox::Notify);
+
+        if (doNotAskAgainCheckboxResult) {
+            generalSettings->setConfirmClosingMultipleTabs(false);
+        }
+
+        switch (result) {
+            case KDialog::Yes: 
+                // Quit
+                break;
+            case KDialog::No:
+                // Close only the current tab
+             closeTab();
+            default:
+                event->ignore();
+                return;
+        }
+    }
+
     generalSettings->setFirstRun(false);
 
     settings.save();
index 440c73680b2e0dc2f34e7c92446cfa83db6ede63..8f156933b8a6a410d1ce1f6929e56ec8179324e4 100644 (file)
@@ -78,10 +78,14 @@ BehaviorSettingsPage::BehaviorSettingsPage(const KUrl& url, QWidget* parent) :
     m_confirmDelete = new QCheckBox(i18nc("@option:check Ask for Confirmation When",
                                           "Deleting files or folders"), confirmBox);
     connect(m_confirmDelete, SIGNAL(toggled(bool)), this, SIGNAL(changed()));
+    m_confirmClosingMultipleTabs = new QCheckBox(i18nc("@option:check Ask for Confirmation When",
+                                                       "Closing windows with multiple tabs"), confirmBox);
+    connect(m_confirmClosingMultipleTabs, SIGNAL(toggled(bool)), this, SIGNAL(changed()));
 
     QVBoxLayout* confirmBoxLayout = new QVBoxLayout(confirmBox);
     confirmBoxLayout->addWidget(m_confirmMoveToTrash);
     confirmBoxLayout->addWidget(m_confirmDelete);
+    confirmBoxLayout->addWidget(m_confirmClosingMultipleTabs);
 
     m_renameInline = new QCheckBox(i18nc("@option:check", "Rename inline"), vBox);
     connect(m_renameInline, SIGNAL(toggled(bool)), this, SIGNAL(changed()));
@@ -130,6 +134,7 @@ void BehaviorSettingsPage::applySettings()
     confirmationGroup.writeEntry("ConfirmDelete", m_confirmDelete->isChecked());
     confirmationGroup.sync();
 
+    settings->setConfirmClosingMultipleTabs(m_confirmClosingMultipleTabs->isChecked());
     settings->setRenameInline(m_renameInline->isChecked());
     settings->setShowToolTips(m_showToolTips->isChecked());
     settings->setShowSelectionToggle(m_showSelectionToggle->isChecked());
@@ -159,6 +164,7 @@ void BehaviorSettingsPage::loadSettings()
     m_confirmMoveToTrash->setChecked(confirmationGroup.readEntry("ConfirmTrash", CONFIRM_TRASH));
     m_confirmDelete->setChecked(confirmationGroup.readEntry("ConfirmDelete", CONFIRM_DELETE));
 
+    m_confirmClosingMultipleTabs->setChecked(settings->confirmClosingMultipleTabs());
     m_renameInline->setChecked(settings->renameInline());
     m_showToolTips->setChecked(settings->showToolTips());
     m_showSelectionToggle->setChecked(settings->showSelectionToggle());
index 401f2240a9bc5ca72ce2b9c428378888096ee43c..fecbe08a31508ac9f96e3f88ddedd883b5d9fec6 100644 (file)
@@ -55,6 +55,7 @@ private:
 
     QCheckBox* m_confirmMoveToTrash;
     QCheckBox* m_confirmDelete;
+    QCheckBox* m_confirmClosingMultipleTabs;
 
     QCheckBox* m_renameInline;
     QCheckBox* m_showToolTips;
index 0f3c677009ed6a7e4d489744b7b6d7f46ae52bdc..0222fa89c67a4e1bf0a45690363af64ab8862c94 100644 (file)
             <label context="@label">Browse through archives</label>
             <default>false</default>
         </entry>
+        <entry name="ConfirmClosingMultipleTabs" type="Bool">
+            <label context="@label">Ask for confirmation when closing windows with multiple tabs.</label>
+            <default>true</default>
+        </entry>
         <entry name="RenameInline" type="Bool">
             <label context="@label">Rename inline</label>
             <default>false</default>