]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinpart.cpp
Separate Delete/Move To Trash menu items in context menu
[dolphin.git] / src / dolphinpart.cpp
index 12c361011dffd14330e62bae4ebf42c06997544a..75784b522dbc4a2fb45884b80276cd527f849c17 100644 (file)
@@ -1,20 +1,7 @@
 /* This file is part of the KDE project
-   Copyright (c) 2007 David Faure <faure@kde.org>
-
-   This library is free software; you can redistribute it and/or
-   modify it under the terms of the GNU Library General Public
-   License as published by the Free Software Foundation; either
-   version 2 of the License, or (at your option) any later version.
-
-   This library is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-   Library General Public License for more details.
-
-   You should have received a copy of the GNU Library General Public License
-   along with this library; see the file COPYING.LIB.  If not, write to
-   the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.
+   SPDX-FileCopyrightText: 2007 David Faure <faure@kde.org>
+
+   SPDX-License-Identifier: LGPL-2.0-or-later
 */
 
 #include "dolphinpart.h"
@@ -247,7 +234,7 @@ void DolphinPart::createGoAction(const char* name, const char* iconName,
 void DolphinPart::slotGoTriggered(QAction* action)
 {
     const QString url = action->data().toString();
-    emit m_extension->openUrlRequest(QUrl(url));
+    Q_EMIT m_extension->openUrlRequest(QUrl(url));
 }
 
 void DolphinPart::slotSelectionChanged(const KFileItemList& selection)
@@ -264,8 +251,8 @@ void DolphinPart::slotSelectionChanged(const KFileItemList& selection)
     if (!hasSelection) {
         stateChanged(QStringLiteral("has_no_selection"));
 
-        emit m_extension->enableAction("cut", false);
-        emit m_extension->enableAction("copy", false);
+        Q_EMIT m_extension->enableAction("cut", false);
+        Q_EMIT m_extension->enableAction("copy", false);
         deleteWithTrashShortcut->setEnabled(false);
         editMimeTypeAction->setEnabled(false);
     } else {
@@ -282,16 +269,16 @@ void DolphinPart::slotSelectionChanged(const KFileItemList& selection)
         deleteWithTrashShortcut->setEnabled(capabilities.supportsDeleting() && !enableMoveToTrash);
         editMimeTypeAction->setEnabled(true);
         propertiesAction->setEnabled(true);
-        emit m_extension->enableAction("cut", capabilities.supportsMoving());
-        emit m_extension->enableAction("copy", true);
+        Q_EMIT m_extension->enableAction("cut", capabilities.supportsMoving());
+        Q_EMIT m_extension->enableAction("copy", true);
     }
 }
 
 void DolphinPart::updatePasteAction()
 {
     QPair<bool, QString> pasteInfo = m_view->pasteInfo();
-    emit m_extension->enableAction( "paste", pasteInfo.first );
-    emit m_extension->setActionText( "paste", pasteInfo.second );
+    Q_EMIT m_extension->enableAction( "paste", pasteInfo.first );
+    Q_EMIT m_extension->setActionText( "paste", pasteInfo.second );
 }
 
 KAboutData* DolphinPart::createAboutData()
@@ -315,13 +302,13 @@ bool DolphinPart::openUrl(const QUrl &url)
         visibleUrl.setPath(visibleUrl.path() + '/' + m_nameFilter);
     }
     QString prettyUrl = visibleUrl.toDisplayString(QUrl::PreferLocalFile);
-    emit setWindowCaption(prettyUrl);
-    emit m_extension->setLocationBarUrl(prettyUrl);
-    emit started(nullptr); // get the wheel to spin
+    Q_EMIT setWindowCaption(prettyUrl);
+    Q_EMIT m_extension->setLocationBarUrl(prettyUrl);
+    Q_EMIT started(nullptr); // get the wheel to spin
     m_view->setNameFilter(m_nameFilter);
     m_view->setUrl(url);
     updatePasteAction();
-    emit aboutToOpenURL();
+    Q_EMIT aboutToOpenURL();
     if (reload)
         m_view->reload();
     // Disable "Find File" and "Open Terminal" actions for non-file URLs,
@@ -336,24 +323,24 @@ bool DolphinPart::openUrl(const QUrl &url)
 
 void DolphinPart::slotMessage(const QString& msg)
 {
-    emit setStatusBarText(msg);
+    Q_EMIT setStatusBarText(msg);
 }
 
 void DolphinPart::slotErrorMessage(const QString& msg)
 {
     qCDebug(DolphinDebug) << msg;
-    emit canceled(msg);
+    Q_EMIT canceled(msg);
     //KMessageBox::error(m_view, msg);
 }
 
 void DolphinPart::slotRequestItemInfo(const KFileItem& item)
 {
-    emit m_extension->mouseOverInfo(item);
+    Q_EMIT m_extension->mouseOverInfo(item);
     if (item.isNull()) {
         updateStatusBar();
     } else {
         const QString escapedText = Qt::convertFromPlainText(item.getStatusBarInfo());
-        emit ReadOnlyPart::setStatusBarText(QStringLiteral("<qt>%1</qt>").arg(escapedText));
+        Q_EMIT ReadOnlyPart::setStatusBarText(QStringLiteral("<qt>%1</qt>").arg(escapedText));
     }
 }
 
@@ -370,12 +357,12 @@ void DolphinPart::slotItemActivated(const KFileItem& item)
     // since the idea was not to need BrowserArguments for non-browser stuff...
     KParts::BrowserArguments browserArgs;
     browserArgs.trustedSource = true;
-    emit m_extension->openUrlRequest(item.targetUrl(), args, browserArgs);
+    Q_EMIT m_extension->openUrlRequest(item.targetUrl(), args, browserArgs);
 }
 
 void DolphinPart::slotItemsActivated(const KFileItemList& items)
 {
-    foreach (const KFileItem& item, items) {
+    for (const KFileItem& item : items) {
         slotItemActivated(item);
     }
 }
@@ -384,7 +371,7 @@ void DolphinPart::createNewWindow(const QUrl& url)
 {
     // TODO: Check issue N176832 for the missing QAIV signal; task 177399 - maybe this code
     // should be moved into DolphinPart::slotItemActivated()
-    emit m_extension->createNewWindow(url);
+    Q_EMIT m_extension->createNewWindow(url);
 }
 
 void DolphinPart::slotOpenContextMenu(const QPoint& pos,
@@ -461,7 +448,7 @@ void DolphinPart::slotOpenContextMenu(const QPoint& pos,
 
     actionGroups.insert(QStringLiteral("editactions"), editActions);
 
-    emit m_extension->popupMenu(pos,
+    Q_EMIT m_extension->popupMenu(pos,
                                 items,
                                 KParts::OpenUrlArguments(),
                                 KParts::BrowserArguments(),
@@ -475,7 +462,7 @@ void DolphinPart::slotDirectoryRedirection(const QUrl &oldUrl, const QUrl &newUr
     if (oldUrl.matches(url(), QUrl::StripTrailingSlash /* #207572 */)) {
         KParts::ReadOnlyPart::setUrl(newUrl);
         const QString prettyUrl = newUrl.toDisplayString(QUrl::PreferLocalFile);
-        emit m_extension->setLocationBarUrl(prettyUrl);
+        Q_EMIT m_extension->setLocationBarUrl(prettyUrl);
     }
 }
 
@@ -504,13 +491,38 @@ void DolphinPart::slotUnselectItemsMatchingPattern()
 
 void DolphinPart::openSelectionDialog(const QString& title, const QString& text, bool selectItems)
 {
-    bool okClicked;
-    const QString pattern = QInputDialog::getText(m_view, title, text, QLineEdit::Normal, QStringLiteral("*"), &okClicked);
+    auto *dialog = new QInputDialog(m_view);
+    dialog->setAttribute(Qt::WA_DeleteOnClose, true);
+    dialog->setInputMode(QInputDialog::TextInput);
+    dialog->setWindowTitle(title);
+    dialog->setLabelText(text);
+
+    const KConfigGroup group = KSharedConfig::openConfig("dolphinpartrc")->group("Select Dialog");
+    dialog->setComboBoxEditable(true);
+    dialog->setComboBoxItems(group.readEntry("History", QStringList()));
+
+    dialog->setTextValue(QStringLiteral("*"));
+
+    connect(dialog, &QDialog::accepted, this, [=]() {
+        const QString pattern = dialog->textValue();
+        if (!pattern.isEmpty()) {
+            QStringList items = dialog->comboBoxItems();
+            items.removeAll(pattern);
+            items.prepend(pattern);
+
+            // Need to evaluate this again here, because the captured value is const
+            // (even if the const were removed from 'const KConfigGroup group =' above).
+            KConfigGroup group = KSharedConfig::openConfig("dolphinpartrc")->group("Select Dialog");
+            // Limit the size of the saved history.
+            group.writeEntry("History", items.mid(0, 10));
+            group.sync();
+
+            const QRegularExpression patternRegExp(QRegularExpression::wildcardToRegularExpression(pattern));
+            m_view->selectItems(patternRegExp, selectItems);
+        }
+    });
 
-    if (okClicked && !pattern.isEmpty()) {
-        const QRegularExpression patternRegExp(QRegularExpression::wildcardToRegularExpression(pattern));
-        m_view->selectItems(patternRegExp, selectItems);
-    }
+    dialog->open();
 }
 
 void DolphinPart::setCurrentViewMode(const QString& viewModeName)
@@ -567,12 +579,12 @@ void DolphinPart::updateNewMenu()
 void DolphinPart::updateStatusBar()
 {
     const QString escapedText = Qt::convertFromPlainText(m_view->statusBarText());
-    emit ReadOnlyPart::setStatusBarText(QStringLiteral("<qt>%1</qt>").arg(escapedText));
+    Q_EMIT ReadOnlyPart::setStatusBarText(QStringLiteral("<qt>%1</qt>").arg(escapedText));
 }
 
 void DolphinPart::updateProgress(int percent)
 {
-    emit m_extension->loadingProgress(percent);
+    Q_EMIT m_extension->loadingProgress(percent);
 }
 
 void DolphinPart::createDirectory()