From: Frank Reininghaus Date: Thu, 12 Mar 2009 22:40:32 +0000 (+0000) Subject: Ask for confirmation when closing a Dolphin window with more than one tab. This can... X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/b9b9df729649b17290fc574cf617f53722583f03 Ask for confirmation when closing a Dolphin window with more than one tab. This can be disabled by checking the "Do not ask again" checkbox in the confirmation dialog or in Dolphin's settings dialog. FEATURE: 168417 svn path=/trunk/KDE/kdebase/apps/; revision=938767 --- diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 0151d48b1..fe1066025 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -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(); diff --git a/src/settings/behaviorsettingspage.cpp b/src/settings/behaviorsettingspage.cpp index 440c73680..8f156933b 100644 --- a/src/settings/behaviorsettingspage.cpp +++ b/src/settings/behaviorsettingspage.cpp @@ -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()); diff --git a/src/settings/behaviorsettingspage.h b/src/settings/behaviorsettingspage.h index 401f2240a..fecbe08a3 100644 --- a/src/settings/behaviorsettingspage.h +++ b/src/settings/behaviorsettingspage.h @@ -55,6 +55,7 @@ private: QCheckBox* m_confirmMoveToTrash; QCheckBox* m_confirmDelete; + QCheckBox* m_confirmClosingMultipleTabs; QCheckBox* m_renameInline; QCheckBox* m_showToolTips; diff --git a/src/settings/dolphin_generalsettings.kcfg b/src/settings/dolphin_generalsettings.kcfg index 0f3c67700..0222fa89c 100644 --- a/src/settings/dolphin_generalsettings.kcfg +++ b/src/settings/dolphin_generalsettings.kcfg @@ -41,6 +41,10 @@ false + + + true + false