]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Merge branch 'release/22.04'
authorFelix Ernst <fe.a.ernst@gmail.com>
Sun, 1 May 2022 10:10:02 +0000 (12:10 +0200)
committerFelix Ernst <fe.a.ernst@gmail.com>
Sun, 1 May 2022 10:10:02 +0000 (12:10 +0200)
38 files changed:
.gitlab-ci.yml
.kde-ci.yml
CMakeLists.txt
src/CMakeLists.txt
src/dolphincontextmenu.cpp
src/dolphincontextmenu.h
src/dolphinmainwindow.cpp
src/dolphinmainwindow.h
src/dolphinpart.cpp
src/dolphinpart.h
src/dolphinpart.json.in [new file with mode: 0644]
src/kitemviews/kfileitemlisttostring.cpp [new file with mode: 0644]
src/kitemviews/kfileitemlisttostring.h [new file with mode: 0644]
src/kitemviews/kfileitemmodel.cpp
src/kitemviews/kfileitemmodel.h
src/kitemviews/kfileitemmodelrolesupdater.cpp
src/kitemviews/kitemlistcontroller.cpp
src/kitemviews/kstandarditemlistwidget.cpp
src/kitemviews/private/kbaloorolesprovider.cpp
src/kitemviews/private/ktwofingerswipe.cpp [deleted file]
src/kitemviews/private/ktwofingerswipe.h [deleted file]
src/kitemviews/private/ktwofingertap.cpp [deleted file]
src/kitemviews/private/ktwofingertap.h [deleted file]
src/org.kde.dolphin.appdata.xml
src/org.kde.dolphin.desktop
src/settings/contextmenu/servicemenuinstaller/servicemenuinstaller.cpp
src/settings/kcm/kcmdolphingeneral.desktop [deleted file]
src/settings/kcm/kcmdolphingeneral.json [new file with mode: 0644]
src/settings/kcm/kcmdolphinnavigation.desktop [deleted file]
src/settings/kcm/kcmdolphinnavigation.json [new file with mode: 0644]
src/settings/kcm/kcmdolphinviewmodes.desktop [deleted file]
src/settings/kcm/kcmdolphinviewmodes.json [new file with mode: 0644]
src/trash/dolphintrash.h
src/views/dolphinview.cpp
src/views/dolphinview.h
src/views/dolphinviewactionhandler.cpp
src/views/tooltips/tooltipmanager.cpp
src/views/tooltips/tooltipmanager.h

index 84fe503fa4f1aacf1faf69490a064b6a722776f4..9b09627599143a8cfdf42d6e6961c38842a7ebec 100644 (file)
@@ -1,3 +1,4 @@
 include:
   - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/linux.yml
   - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/freebsd.yml
+  - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/windows.yml
index 3f3b7f8bc423ad2ed63c2106e5205408d4d6704e..18cd5eab93757f97aaab45bd6f03daeaefde7b63 100644 (file)
@@ -23,9 +23,13 @@ Dependencies:
     'frameworks/kwindowsystem': '@stable'
     'frameworks/kactivities': '@stable'
     'frameworks/kdoctools': '@stable'
-    'frameworks/baloo': '@stable'
     'frameworks/kwindowsystem': '@stable'
     'frameworks/kfilemetadata': '@stable'
-    'libraries/baloo-widgets': '@same'
     'libraries/kuserfeedback': '@stable'
     'libraries/phonon': '@stable'
+
+- 'on': ['Linux', 'FreeBSD']
+  'require':
+    'frameworks/baloo': '@stable'
+    'libraries/baloo-widgets': '@same'
+
index 9803e52d2815362270fb3539fd34780394ec5200..ae9507ef6d257cc14ac9df0e78b13b4904f9fbe0 100644 (file)
@@ -2,8 +2,8 @@ cmake_minimum_required(VERSION 3.16)
 
 # KDE Application Version, managed by release script
 set (RELEASE_SERVICE_VERSION_MAJOR "22")
-set (RELEASE_SERVICE_VERSION_MINOR "04")
-set (RELEASE_SERVICE_VERSION_MICRO "0")
+set (RELEASE_SERVICE_VERSION_MINOR "07")
+set (RELEASE_SERVICE_VERSION_MICRO "70")
 set (RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}")
 project(Dolphin VERSION ${RELEASE_SERVICE_VERSION})
 
@@ -67,9 +67,10 @@ find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS
     Notifications
     Crash
     WindowSystem
+    WidgetsAddons
 )
 
-find_package(KUserFeedback 1.0.0)
+find_package(KUserFeedback 1.2.0)
 set_package_properties(KUserFeedback
         PROPERTIES TYPE OPTIONAL
         PURPOSE "Used for submission of telemetry data"
@@ -91,13 +92,13 @@ set_package_properties(KF5Activities PROPERTIES DESCRIPTION "KActivities librari
 
 find_package(Phonon4Qt${QT_MAJOR_VERSION} CONFIG REQUIRED)
 
-find_package(PackageKitQt5)
-set_package_properties(PackageKitQt5
+find_package(PackageKitQt${QT_MAJOR_VERSION})
+set_package_properties(PackageKitQt${QT_MAJOR_VERSION}
         PROPERTIES DESCRIPTION "Software Manager integration"
         TYPE OPTIONAL
         PURPOSE "Used in the service menu installer"
         )
-if(PackageKitQt5_FOUND)
+if(PackageKitQt${QT_MAJOR_VERSION}_FOUND)
     set(HAVE_PACKAGEKIT TRUE)
 endif()
 
index 0c1bcb2b9f2ef764e6bb9e7122ae7abd844d3a6a..e96f3046ec16334d9309c0f76c339e55cf486a35 100644 (file)
@@ -61,6 +61,7 @@ add_library(dolphinprivate SHARED)
 target_sources(dolphinprivate PRIVATE
     kitemviews/kfileitemlistview.cpp
     kitemviews/kfileitemlistwidget.cpp
+    kitemviews/kfileitemlisttostring.cpp
     kitemviews/kfileitemmodel.cpp
     kitemviews/kfileitemmodelrolesupdater.cpp
     kitemviews/kitemlistcontainer.cpp
@@ -91,8 +92,6 @@ target_sources(dolphinprivate PRIVATE
     kitemviews/private/kitemlistviewanimation.cpp
     kitemviews/private/kitemlistviewlayouter.cpp
     kitemviews/private/kpixmapmodifier.cpp
-    kitemviews/private/ktwofingerswipe.cpp
-    kitemviews/private/ktwofingertap.cpp
     settings/applyviewpropsjob.cpp
     settings/viewmodes/viewmodesettings.cpp
     settings/viewpropertiesdialog.cpp
@@ -158,6 +157,7 @@ target_link_libraries(
     KF5::NewStuff
     KF5::Parts
     KF5::WindowSystem
+    KF5::WidgetsAddons
 )
 
 if(HAVE_BALOO)
@@ -178,7 +178,7 @@ install(TARGETS dolphinprivate ${KDE_INSTALL_TARGETS_DEFAULT_ARGS} LIBRARY NAMEL
 install(FILES ${CMAKE_CURRENT_BINARY_DIR}/dolphin_export.h DESTINATION ${KDE_INSTALL_INCLUDEDIR} COMPONENT Devel)
 
 ##########################################
-configure_file(dolphinpart.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/dolphinpart.desktop @ONLY)
+configure_file(dolphinpart.json.in ${CMAKE_CURRENT_BINARY_DIR}/dolphinpart.json @ONLY)
 
 add_library(dolphinpart MODULE)
 
@@ -190,16 +190,12 @@ target_sources(dolphinpart PRIVATE
     dolphinpart.qrc
 )
 
-kcoreaddons_desktop_to_json(dolphinpart ${CMAKE_CURRENT_BINARY_DIR}/dolphinpart.desktop)
-
 target_link_libraries(dolphinpart
     dolphinprivate
 )
 
 install(TARGETS dolphinpart DESTINATION ${KDE_INSTALL_PLUGINDIR}/kf5/parts)
 
-install(FILES ${CMAKE_CURRENT_BINARY_DIR}/dolphinpart.desktop DESTINATION ${KDE_INSTALL_KSERVICESDIR})
-
 ##########################################
 
 add_library(dolphinstatic STATIC)
@@ -307,7 +303,7 @@ target_link_libraries(dolphinstatic
     KF5::KCMUtils
     KF5::DBusAddons
     KF5::Notifications
-    Phonon::phonon4qt5
+    Phonon::phonon4qt${QT_MAJOR_VERSION}
 )
 
 if (HAVE_KACTIVITIES)
@@ -362,12 +358,9 @@ install(TARGETS dolphin ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
 
 if(NOT WIN32)
     # The settings are still accessible from the hamburger menu
-    add_library(kcm_dolphinviewmodes)
-    kcoreaddons_desktop_to_json(kcm_dolphinviewmodes settings/kcm/kcmdolphinviewmodes.desktop)
-    add_library(kcm_dolphinnavigation)
-    kcoreaddons_desktop_to_json(kcm_dolphinnavigation settings/kcm/kcmdolphinnavigation.desktop)
-    add_library(kcm_dolphingeneral)
-    kcoreaddons_desktop_to_json(kcm_dolphingeneral settings/kcm/kcmdolphingeneral.desktop)
+    add_library(kcm_dolphinviewmodes MODULE)
+    add_library(kcm_dolphinnavigation MODULE)
+    add_library(kcm_dolphingeneral MODULE)
 
     target_sources(kcm_dolphinviewmodes PRIVATE
         settings/kcm/kcmdolphinviewmodes.cpp
@@ -411,9 +404,6 @@ if(NOT WIN32)
     target_link_libraries(kcm_dolphingeneral dolphinprivate)
 
     install( FILES org.kde.dolphin.appdata.xml DESTINATION ${KDE_INSTALL_METAINFODIR} )
-    install( FILES settings/kcm/kcmdolphinviewmodes.desktop DESTINATION ${KDE_INSTALL_KSERVICESDIR} )
-    install( FILES settings/kcm/kcmdolphinnavigation.desktop DESTINATION ${KDE_INSTALL_KSERVICESDIR} )
-    install( FILES settings/kcm/kcmdolphingeneral.desktop DESTINATION ${KDE_INSTALL_KSERVICESDIR} )
 
     install(TARGETS kcm_dolphinviewmodes DESTINATION ${KDE_INSTALL_PLUGINDIR}/dolphin/kcms )
     install(TARGETS kcm_dolphinnavigation DESTINATION ${KDE_INSTALL_PLUGINDIR}/dolphin/kcms )
index 340af6bd0223be8e0c68e81725cda0719cd62c4c..65d84106067b2b7123ac80d09d7e23e65297fc27 100644 (file)
@@ -13,6 +13,7 @@
 #include "dolphinplacesmodelsingleton.h"
 #include "dolphinremoveaction.h"
 #include "dolphinviewcontainer.h"
+#include "global.h"
 #include "trash/dolphintrash.h"
 #include "views/dolphinview.h"
 #include "views/viewmodecontroller.h"
 #include <QMimeDatabase>
 
 DolphinContextMenu::DolphinContextMenu(DolphinMainWindow* parent,
-                                       const QPoint& pos,
                                        const KFileItem& fileInfo,
+                                       const KFileItemList &selectedItems,
                                        const QUrl& baseUrl,
                                        KFileItemActions *fileItemActions) :
     QMenu(parent),
-    m_pos(pos),
     m_mainWindow(parent),
     m_fileInfo(fileInfo),
     m_baseUrl(baseUrl),
     m_baseFileItem(nullptr),
-    m_selectedItems(),
+    m_selectedItems(selectedItems),
     m_selectedItemsProperties(nullptr),
     m_context(NoContext),
     m_copyToMenu(parent),
-    m_customActions(),
-    m_command(None),
     m_removeAction(nullptr),
     m_fileItemActions(fileItemActions)
 {
-    // The context menu either accesses the URLs of the selected items
-    // or the items itself. To increase the performance both lists are cached.
-    const DolphinView* view = m_mainWindow->activeViewContainer()->view();
-    m_selectedItems = view->selectedItems();
-
     QApplication::instance()->installEventFilter(this);
 
-    static_cast<KHamburgerMenu *>(m_mainWindow->actionCollection()->
-                action(QStringLiteral("hamburger_menu")))->addToMenu(this);
+    addAllActions();
 }
 
 DolphinContextMenu::~DolphinContextMenu()
@@ -76,13 +68,11 @@ DolphinContextMenu::~DolphinContextMenu()
     m_selectedItemsProperties = nullptr;
 }
 
-void DolphinContextMenu::setCustomActions(const QList<QAction*>& actions)
+void DolphinContextMenu::addAllActions()
 {
-    m_customActions = actions;
-}
+    static_cast<KHamburgerMenu *>(m_mainWindow->actionCollection()->
+                action(QStringLiteral("hamburger_menu")))->addToMenu(this);
 
-DolphinContextMenu::Command DolphinContextMenu::open()
-{
     // get the context information
     const auto scheme = m_baseUrl.scheme();
     if (scheme == QLatin1String("trash")) {
@@ -101,17 +91,15 @@ DolphinContextMenu::Command DolphinContextMenu::open()
     // open the corresponding popup for the context
     if (m_context & TrashContext) {
         if (m_context & ItemContext) {
-            openTrashItemContextMenu();
+            addTrashItemContextMenu();
         } else {
-            openTrashContextMenu();
+            addTrashContextMenu();
         }
     } else if (m_context & ItemContext) {
-        openItemContextMenu();
+        addItemContextMenu();
     } else {
-        openViewportContextMenu();
+        addViewportContextMenu();
     }
-
-    return m_command;
 }
 
 bool DolphinContextMenu::eventFilter(QObject* object, QEvent* event)
@@ -133,39 +121,25 @@ bool DolphinContextMenu::eventFilter(QObject* object, QEvent* event)
     return false;
 }
 
-void DolphinContextMenu::openTrashContextMenu()
+void DolphinContextMenu::addTrashContextMenu()
 {
     Q_ASSERT(m_context & TrashContext);
 
-    QAction* emptyTrashAction = new QAction(QIcon::fromTheme(QStringLiteral("trash-empty")), i18nc("@action:inmenu", "Empty Trash"), this);
+    QAction *emptyTrashAction = addAction(QIcon::fromTheme(QStringLiteral("trash-empty")), i18nc("@action:inmenu", "Empty Trash"), [this](){
+        Trash::empty(m_mainWindow);
+    });
     emptyTrashAction->setEnabled(!Trash::isEmpty());
-    addAction(emptyTrashAction);
-
-    addCustomActions();
 
     QAction* propertiesAction = m_mainWindow->actionCollection()->action(QStringLiteral("properties"));
     addAction(propertiesAction);
-
-    if (exec(m_pos) == emptyTrashAction) {
-        Trash::empty(m_mainWindow);
-    }
 }
 
-void DolphinContextMenu::openTrashItemContextMenu()
+void DolphinContextMenu::addTrashItemContextMenu()
 {
     Q_ASSERT(m_context & TrashContext);
     Q_ASSERT(m_context & ItemContext);
 
-    QAction* restoreAction = new QAction(QIcon::fromTheme("restoration"), i18nc("@action:inmenu", "Restore"), m_mainWindow);
-    addAction(restoreAction);
-
-    QAction* deleteAction = m_mainWindow->actionCollection()->action(KStandardAction::name(KStandardAction::DeleteFile));
-    addAction(deleteAction);
-
-    QAction* propertiesAction = m_mainWindow->actionCollection()->action(QStringLiteral("properties"));
-    addAction(propertiesAction);
-
-    if (exec(m_pos) == restoreAction) {
+    addAction(QIcon::fromTheme("restoration"), i18nc("@action:inmenu", "Restore"), [this](){
         QList<QUrl> selectedUrls;
         selectedUrls.reserve(m_selectedItems.count());
         for (const KFileItem &item : qAsConst(m_selectedItems)) {
@@ -175,7 +149,13 @@ void DolphinContextMenu::openTrashItemContextMenu()
         KIO::RestoreJob *job = KIO::restoreFromTrash(selectedUrls);
         KJobWidgets::setWindow(job, m_mainWindow);
         job->uiDelegate()->setAutoErrorHandlingEnabled(true);
-    }
+    });
+
+    QAction* deleteAction = m_mainWindow->actionCollection()->action(KStandardAction::name(KStandardAction::DeleteFile));
+    addAction(deleteAction);
+
+    QAction* propertiesAction = m_mainWindow->actionCollection()->action(QStringLiteral("properties"));
+    addAction(propertiesAction);
 }
 
 void DolphinContextMenu::addDirectoryItemContextMenu()
@@ -194,7 +174,6 @@ void DolphinContextMenu::addDirectoryItemContextMenu()
 
     // set up 'Create New' menu
     DolphinNewFileMenu* newFileMenu = new DolphinNewFileMenu(m_mainWindow->actionCollection(), m_mainWindow);
-    const DolphinView* view = m_mainWindow->activeViewContainer()->view();
     newFileMenu->checkUpToDate();
     newFileMenu->setPopupFiles(QList<QUrl>() << m_fileInfo.url());
     newFileMenu->setEnabled(selectedItemsProps.supportsWriting());
@@ -209,16 +188,12 @@ void DolphinContextMenu::addDirectoryItemContextMenu()
     addSeparator();
 }
 
-void DolphinContextMenu::openItemContextMenu()
+void DolphinContextMenu::addItemContextMenu()
 {
     Q_ASSERT(!m_fileInfo.isNull());
 
-    QAction* openParentAction = nullptr;
-    QAction* openParentInNewWindowAction = nullptr;
-    QAction* openParentInNewTabAction = nullptr;
     const KFileItemListProperties& selectedItemsProps = selectedItemsProperties();
 
-
     m_fileItemActions->setItemListProperties(selectedItemsProps);
 
     if (m_selectedItems.count() == 1) {
@@ -228,23 +203,28 @@ void DolphinContextMenu::openItemContextMenu()
         } else if (m_context & TimelineContext || m_context & SearchContext) {
             addOpenWithActions();
 
-            openParentAction = new QAction(QIcon::fromTheme(QStringLiteral("document-open-folder")),
+            addAction(QIcon::fromTheme(QStringLiteral("document-open-folder")),
                                            i18nc("@action:inmenu",
                                                  "Open Path"),
-                                           this);
-            addAction(openParentAction);
+                                           [this](){
+                m_mainWindow->changeUrl(KIO::upUrl(m_fileInfo.url()));
+                m_mainWindow->activeViewContainer()->view()->markUrlsAsSelected({m_fileInfo.url()});
+                m_mainWindow->activeViewContainer()->view()->markUrlAsCurrent(m_fileInfo.url());
+            });
 
-            openParentInNewWindowAction = new QAction(QIcon::fromTheme(QStringLiteral("window-new")),
+            addAction(QIcon::fromTheme(QStringLiteral("window-new")),
                                                     i18nc("@action:inmenu",
                                                           "Open Path in New Window"),
-                                                    this);
-            addAction(openParentInNewWindowAction);
+                                                    [this](){
+                Dolphin::openNewWindow({m_fileInfo.url()}, m_mainWindow, Dolphin::OpenNewWindowFlag::Select);
+            });
 
-            openParentInNewTabAction = new QAction(QIcon::fromTheme(QStringLiteral("tab-new")),
+            addAction(QIcon::fromTheme(QStringLiteral("tab-new")),
                                                    i18nc("@action:inmenu",
                                                          "Open Path in New Tab"),
-                                                   this);
-            addAction(openParentInNewTabAction);
+                                                   [this](){
+                m_mainWindow->openNewTab(KIO::upUrl(m_fileInfo.url()));
+            });
 
             addSeparator();
         } else {
@@ -290,23 +270,10 @@ void DolphinContextMenu::openItemContextMenu()
     addSeparator();
     QAction* propertiesAction = m_mainWindow->actionCollection()->action(QStringLiteral("properties"));
     addAction(propertiesAction);
-
-    QAction* activatedAction = exec(m_pos);
-    if (activatedAction) {
-        if (activatedAction == openParentAction) {
-            m_command = OpenParentFolder;
-        } else if (activatedAction == openParentInNewWindowAction) {
-            m_command = OpenParentFolderInNewWindow;
-        } else if (activatedAction == openParentInNewTabAction) {
-            m_command = OpenParentFolderInNewTab;
-        }
-    }
 }
 
-void DolphinContextMenu::openViewportContextMenu()
+void DolphinContextMenu::addViewportContextMenu()
 {
-    const DolphinView* view = m_mainWindow->activeViewContainer()->view();
-
     const KFileItemListProperties baseUrlProperties(KFileItemList() << baseFileItem());
     m_fileItemActions->setItemListProperties(baseUrlProperties);
 
@@ -344,14 +311,11 @@ void DolphinContextMenu::openViewportContextMenu()
     }
 
     addAdditionalActions(baseUrlProperties);
-    addCustomActions();
 
     addSeparator();
 
     QAction* propertiesAction = m_mainWindow->actionCollection()->action(QStringLiteral("properties"));
     addAction(propertiesAction);
-
-    exec(m_pos);
 }
 
 void DolphinContextMenu::insertDefaultItemActions(const KFileItemListProperties& properties)
@@ -476,11 +440,6 @@ void DolphinContextMenu::addOpenWithActions()
     m_fileItemActions->insertOpenWithActionsTo(nullptr, this, QStringList{qApp->desktopFileName()});
 }
 
-void DolphinContextMenu::addCustomActions()
-{
-    addActions(m_customActions);
-}
-
 void DolphinContextMenu::addAdditionalActions(const KFileItemListProperties &props)
 {
     addSeparator();
index e033fca6e1ac41eddfb01d42678d6e41cf0beb61..627a6e3b84838e87011c66742f6a6847010b0cc6 100644 (file)
@@ -37,60 +37,42 @@ class DolphinContextMenu : public QMenu
     Q_OBJECT
 
 public:
-    enum Command
-    {
-        None,
-        OpenParentFolder,
-        OpenParentFolderInNewWindow,
-        OpenParentFolderInNewTab
-    };
-
     /**
      * @parent        Pointer to the main window the context menu
      *                belongs to.
-     * @pos           Position in screen coordinates.
      * @fileInfo      Pointer to the file item the context menu
      *                is applied. If 0 is passed, the context menu
      *                is above the viewport.
+     * @selectedItems The selected items for which the context menu
+     *                is opened. This list generally includes \a fileInfo.
      * @baseUrl       Base URL of the viewport where the context menu
      *                should be opened.
      */
     DolphinContextMenu(DolphinMainWindow* parent,
-                       const QPoint& pos,
                        const KFileItem& fileInfo,
+                       const KFileItemList &selectedItems,
                        const QUrl& baseUrl,
                        KFileItemActions *fileItemActions);
 
     ~DolphinContextMenu() override;
 
-    void setCustomActions(const QList<QAction*>& actions);
-
-    /**
-     * Opens the context menu model and returns the requested
-     * command, that should be triggered by the caller. If
-     * Command::None has been returned, either the context-menu
-     * had been closed without executing an action or an
-     * already available action from the main-window has been
-     * executed.
-     */
-    Command open();
-
 protected:
     bool eventFilter(QObject* object, QEvent* event) override;
 
 private:
-    void openTrashContextMenu();
-    void openTrashItemContextMenu();
-    void openItemContextMenu();
-    void openViewportContextMenu();
-
-    void insertDefaultItemActions(const KFileItemListProperties&);
-
     /**
-     * Adds the "Show menubar" action to the menu if the
-     * menubar is hidden.
+     * Adds all the actions and menus to this menu based on all given information.
+     * This method calls the other helper methods for adding actions
+     * based on the context given in the constructor.
      */
-    void addShowMenuBarAction();
+    void addAllActions();
+
+    void addTrashContextMenu();
+    void addTrashItemContextMenu();
+    void addItemContextMenu();
+    void addViewportContextMenu();
+
+    void insertDefaultItemActions(const KFileItemListProperties&);
 
     bool placeExists(const QUrl& url) const;
 
@@ -108,18 +90,12 @@ private:
      */
     void addOpenWithActions();
 
-    /**
-     * Adds custom actions e.g. like the "[x] Expandable Folders"-action
-     * provided in the details view.
-     */
-    void addCustomActions();
-
-private:
     /**
      * Add services, custom actions, plugins and version control items to the menu
      */
     void addAdditionalActions(const KFileItemListProperties &props);
 
+private:
     struct Entry
     {
         int type;
@@ -139,7 +115,6 @@ private:
         SearchContext = 8,
     };
 
-    QPoint m_pos;
     DolphinMainWindow* m_mainWindow;
 
     KFileItem m_fileInfo;
@@ -152,9 +127,6 @@ private:
 
     int m_context;
     KFileCopyToMenu m_copyToMenu;
-    QList<QAction*> m_customActions;
-
-    Command m_command;
 
     DolphinRemoveAction* m_removeAction; // Action that represents either 'Move To Trash' or 'Delete'
     void addDirectoryItemContextMenu();
index 166091ca7e9ef70cf909952a365d141d02894ab1..589c2c185b5fc1cbc9fb76eacb8bef3e0749619d 100644 (file)
@@ -749,13 +749,45 @@ void DolphinMainWindow::slotToolBarActionMiddleClicked(QAction *action)
     }
 }
 
+QAction *DolphinMainWindow::urlNavigatorHistoryAction(const KUrlNavigator *urlNavigator, int historyIndex, QObject *parent)
+{
+    const QUrl url = urlNavigator->locationUrl(historyIndex);
+
+    QString text = url.toDisplayString(QUrl::PreferLocalFile);
+
+    if (!urlNavigator->showFullPath()) {
+        const KFilePlacesModel *placesModel = DolphinPlacesModelSingleton::instance().placesModel();
+
+        const QModelIndex closestIdx = placesModel->closestItem(url);
+        if (closestIdx.isValid()) {
+            const QUrl placeUrl = placesModel->url(closestIdx);
+
+            text = placesModel->text(closestIdx);
+
+            QString pathInsidePlace = url.path().mid(placeUrl.path().length());
+
+            if (!pathInsidePlace.isEmpty() && !pathInsidePlace.startsWith(QLatin1Char('/'))) {
+                pathInsidePlace.prepend(QLatin1Char('/'));
+            }
+
+            if (pathInsidePlace != QLatin1Char('/')) {
+                text.append(pathInsidePlace);
+            }
+        }
+    }
+
+    QAction *action = new QAction(QIcon::fromTheme(KIO::iconNameForUrl(url)), text, parent);
+    action->setData(historyIndex);
+    return action;
+}
+
 void DolphinMainWindow::slotAboutToShowBackPopupMenu()
 {
     const KUrlNavigator *urlNavigator = m_activeViewContainer->urlNavigatorInternalWithHistory();
     int entries = 0;
     m_backAction->menu()->clear();
     for (int i = urlNavigator->historyIndex() + 1; i < urlNavigator->historySize() && entries < MaxNumberOfNavigationentries; ++i, ++entries) {
-        QAction* action = new QAction(urlNavigator->locationUrl(i).toDisplayString(QUrl::PreferLocalFile), m_backAction->menu());
+        QAction *action = urlNavigatorHistoryAction(urlNavigator, i, m_backAction->menu());
         action->setData(i);
         m_backAction->menu()->addAction(action);
     }
@@ -784,7 +816,7 @@ void DolphinMainWindow::slotAboutToShowForwardPopupMenu()
     int entries = 0;
     m_forwardAction->menu()->clear();
     for (int i = urlNavigator->historyIndex() - 1; i >= 0 && entries < MaxNumberOfNavigationentries; --i, ++entries) {
-        QAction* action = new QAction(urlNavigator->locationUrl(i).toDisplayString(QUrl::PreferLocalFile), m_forwardAction->menu());
+        QAction *action = urlNavigatorHistoryAction(urlNavigator, i, m_forwardAction->menu());
         action->setData(i);
         m_forwardAction->menu()->addAction(action);
     }
@@ -1146,32 +1178,11 @@ void DolphinMainWindow::slotWriteStateChanged(bool isFolderWritable)
 
 void DolphinMainWindow::openContextMenu(const QPoint& pos,
                                         const KFileItem& item,
-                                        const QUrl& url,
-                                        const QList<QAction*>& customActions)
+                                        const KFileItemList &selectedItems,
+                                        const QUrl& url)
 {
-    QPointer<DolphinContextMenu> contextMenu = new DolphinContextMenu(this, pos, item, url, &m_fileItemActions);
-    contextMenu.data()->setCustomActions(customActions);
-    const DolphinContextMenu::Command command = contextMenu.data()->open();
-
-    switch (command) {
-    case DolphinContextMenu::OpenParentFolder:
-        changeUrl(KIO::upUrl(item.url()));
-        m_activeViewContainer->view()->markUrlsAsSelected({item.url()});
-        m_activeViewContainer->view()->markUrlAsCurrent(item.url());
-        break;
-
-    case DolphinContextMenu::OpenParentFolderInNewWindow:
-        Dolphin::openNewWindow({item.url()}, this, Dolphin::OpenNewWindowFlag::Select);
-        break;
-
-    case DolphinContextMenu::OpenParentFolderInNewTab:
-        openNewTab(KIO::upUrl(item.url()));
-        break;
-
-    case DolphinContextMenu::None:
-    default:
-        break;
-    }
+    QPointer<DolphinContextMenu> contextMenu = new DolphinContextMenu(this, item, selectedItems, url, &m_fileItemActions);
+    contextMenu.data()->exec(pos);
 
     // Delete the menu, unless it has been deleted in its own nested event loop already.
     if (contextMenu) {
index 1a3ec4efb7a7e8d3b9e112df506fc48c7b93abef..17327f2de9f3bbafd6027b9b89b99f34eef19e24 100644 (file)
@@ -475,14 +475,11 @@ private Q_SLOTS:
      * @pos           Position in screen coordinates.
      * @item          File item context. If item is null, the context menu
      *                should be applied to \a url.
+     * @selectedItems The selected items for which the context menu
+     *                is opened. This list generally includes \a item.
      * @url           URL which contains \a item.
-     * @customActions Actions that should be added to the context menu,
-     *                if the file item is null.
      */
-    void openContextMenu(const QPoint& pos,
-                         const KFileItem& item,
-                         const QUrl& url,
-                         const QList<QAction*>& customActions);
+    void openContextMenu(const QPoint& pos, const KFileItem& item, const KFileItemList &selectedItems, const QUrl& url);
 
     /**
      * Updates the menu that is by default at the right end of the toolbar.
@@ -653,6 +650,9 @@ private:
      */
     bool addHamburgerMenuToToolbar();
 
+    /** Creates an action representing an item in the URL navigator history */
+    static QAction *urlNavigatorHistoryAction(const KUrlNavigator *urlNavigator, int historyIndex, QObject *parent = nullptr);
+
 private:
     /**
      * Implements a custom error handling for the undo manager. This
index 0595087784a33ea37b75623688eb34c91567008c..0f10a7769fe2513688f4da5b9ca0869d81bf9dfa 100644 (file)
@@ -385,8 +385,8 @@ void DolphinPart::createNewWindow(const QUrl& url)
 
 void DolphinPart::slotOpenContextMenu(const QPoint& pos,
                                       const KFileItem& _item,
-                                      const QUrl &,
-                                      const QList<QAction*>& customActions)
+                                      const KFileItemList &selectedItems,
+                                      const QUrl &)
 {
     KParts::BrowserExtension::PopupFlags popupFlags = KParts::BrowserExtension::DefaultPopupItems
                                                       | KParts::BrowserExtension::ShowProperties
@@ -402,13 +402,11 @@ void DolphinPart::slotOpenContextMenu(const QPoint& pos,
             item.setUrl(url()); // ensure we use the view url, not the canonical path (#213799)
     }
 
-    // TODO: We should change the signature of the slots (and signals) for being able
-    //       to tell for which items we want a popup.
     KFileItemList items;
-    if (m_view->selectedItems().isEmpty()) {
+    if (selectedItems.isEmpty()) {
         items.append(item);
     } else {
-        items = m_view->selectedItems();
+        items = selectedItems;
     }
 
     KFileItemListProperties capabilities(items);
@@ -416,7 +414,6 @@ void DolphinPart::slotOpenContextMenu(const QPoint& pos,
     KParts::BrowserExtension::ActionGroupMap actionGroups;
     QList<QAction *> editActions;
     editActions += m_view->versionControlActions(m_view->selectedItems());
-    editActions += customActions;
 
     if (!_item.isNull()) { // only for context menu on one or more items
         const bool supportsMoving = capabilities.supportsMoving();
index 25d76950c0c1b50f57decdeeb07ec70dd8100671..a49603ca877fc2c5bd27ab27a1609953d3cf9ca1 100644 (file)
@@ -123,14 +123,11 @@ private Q_SLOTS:
      * @pos           Position in screen coordinates.
      * @item          File item context. If item is null, the context menu
      *                should be applied to \a url.
+     * @selectedItems The selected items for which the context menu
+     *                is opened. This list generally includes \a item.
      * @url           URL which contains \a item.
-     * @customActions Actions that should be added to the context menu,
-     *                if the file item is null.
      */
-    void slotOpenContextMenu(const QPoint& pos,
-                             const KFileItem& item,
-                             const QUrl& url,
-                             const QList<QAction*>& customActions);
+    void slotOpenContextMenu(const QPoint &pos, const KFileItem &_item, const KFileItemList &selectedItems, const QUrl &);
 
     /**
      * Informs the host that we are opening \a url (e.g. after a redirection
diff --git a/src/dolphinpart.json.in b/src/dolphinpart.json.in
new file mode 100644 (file)
index 0000000..6da2823
--- /dev/null
@@ -0,0 +1,72 @@
+{
+    "KPlugin": {
+        "Icon": "view-list-icons",
+        "Id": "dolphinpart",
+        "InitialPreference": 7,
+        "License": "LGPL v2+",
+        "MimeTypes": [
+            "inode/directory"
+        ],
+        "Name": "Dolphin View",
+        "Name[ar]": "عرض دولفين",
+        "Name[ast]": "Vista de Dolphin",
+        "Name[az]": "Dolphin görünüşü",
+        "Name[ca@valencia]": "Vista de Dolphin",
+        "Name[ca]": "Vista del Dolphin",
+        "Name[cs]": "Pohled Dolphin",
+        "Name[da]": "Dolphin-visning",
+        "Name[de]": "Dolphin-Ansicht",
+        "Name[el]": "Dolphin View",
+        "Name[en_GB]": "Dolphin View",
+        "Name[es]": "Vista de Dolphin",
+        "Name[et]": "Dolphini vaade",
+        "Name[eu]": "Dolphin ikuspegia",
+        "Name[fi]": "Dolphin-näkymä",
+        "Name[fr]": "Vue de Dolphin",
+        "Name[gl]": "Vista de Dolphin",
+        "Name[hi]": "डॉल्फ़िन दृश्य",
+        "Name[hu]": "Dolphin nézet",
+        "Name[ia]": "Vista de Dolphin",
+        "Name[id]": "Tampilan Dolphin",
+        "Name[is]": "Dolphin-sýn",
+        "Name[it]": "Vista di Dolphin",
+        "Name[ja]": "Dolphin ビュー",
+        "Name[ko]": "Dolphin 보기",
+        "Name[lt]": "Dolphin rodinys",
+        "Name[lv]": "Dolphin skats",
+        "Name[ml]": "ഡോള്‍ഫിന്‍ അവതരണരീതി",
+        "Name[my]": "လင်းပိုင် မြင်ကွင်း",
+        "Name[nb]": "Dolphin visning",
+        "Name[nl]": "Dolphin-weergave",
+        "Name[nn]": "Dolphin-vising",
+        "Name[pa]": "ਡਾਲਫਿਨ ਝਲਕ",
+        "Name[pl]": "Widok Dolphina",
+        "Name[pt]": "Área do Dolphin",
+        "Name[pt_BR]": "Visualização do Dolphin",
+        "Name[ro]": "Dolphin – Vizualizare",
+        "Name[ru]": "Представление Dolphin",
+        "Name[se]": "Dolphinčájeheapmi",
+        "Name[sk]": "Dolphin pohľad",
+        "Name[sl]": "Dolphin - pogled",
+        "Name[sr@ijekavian]": "Делфинов приказ",
+        "Name[sr@ijekavianlatin]": "Dolphinov prikaz",
+        "Name[sr@latin]": "Dolphinov prikaz",
+        "Name[sr]": "Делфинов приказ",
+        "Name[sv]": "Vy i Dolphin",
+        "Name[ta]": "டால்பின் காட்சிமுறை",
+        "Name[tr]": "Dolphin Görünümü",
+        "Name[uk]": "Перегляд Dolphin",
+        "Name[vi]": "Khung xem Dolphin",
+        "Name[x-test]": "xxDolphin Viewxx",
+        "Name[zh_CN]": "Dolphin 视图",
+        "Name[zh_TW]": "Dolphin 檢視",
+        "ServiceTypes": [
+            "KParts/ReadOnlyPart",
+            "Browser/View"
+        ],
+        "Version": "@DOLPHIN_VERSION@"
+    },
+    "MimeType": "inode/directory;",
+    "X-KDE-BrowserView-Built-Into": "konqueror",
+    "X-KDE-BrowserView-HideFromMenus": true
+}
diff --git a/src/kitemviews/kfileitemlisttostring.cpp b/src/kitemviews/kfileitemlisttostring.cpp
new file mode 100644 (file)
index 0000000..8e8f880
--- /dev/null
@@ -0,0 +1,82 @@
+/*
+    This file is part of the KDE project
+    SPDX-FileCopyrightText: 2022 Felix Ernst <felixernst@zohomail.eu>
+
+    SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
+*/
+
+#include "kfileitemlisttostring.h"
+
+#include <KFileItem>
+#include <KFileItemListProperties>
+#include <KLocalizedString>
+
+#include <QFontMetrics>
+#include <QString>
+
+QString fileItemListToString(KFileItemList items, int maximumTextWidth, QFontMetrics fontMetrics, ItemsState itemsState)
+{
+    QString text;
+    switch (items.count()) {
+    case 1:
+        text = i18nc("Textual representation of a file. %1 is the name of the file/folder.",
+                "\"%1\"", items.first().name());
+        break;
+    case 2:
+        text = i18nc("Textual representation of two files. %1 and %2 are names of files/folders.",
+                "\"%1\" and \"%2\"", items.first().name(), items.last().name());
+        break;
+    case 3:
+        text = i18nc("Textual representation of three files. %1, %2 and %3 are names of files/folders.",
+                "\"%1\", \"%2\" and \"%3\"",
+                items.first().name(), items.at(1).name(), items.last().name());
+        break;
+    case 4:
+        text = i18nc("Textual representation of four files. %1, %2, %3 and %4 are names of files/folders.",
+                "\"%1\", \"%2\", \"%3\" and \"%4\"",
+                items.first().name(), items.at(1).name(), items.at(2).name(), items.last().name());
+        break;
+    case 5:
+        text = i18nc("Textual representation of five files. %1, %2, %3, %4 and %5 are names of files/folders.",
+                "\"%1\", \"%2\", \"%3\", \"%4\" and \"%5\"",
+                items.first().name(), items.at(1).name(), items.at(2).name(), items.at(3).name(), items.last().name());
+        break;
+    default:
+        text = QString();
+        break;
+    }
+
+    // At some point the added clarity from the text starts being less important than the text width.
+    if (!text.isEmpty() && fontMetrics.horizontalAdvance(text) <= maximumTextWidth) {
+        return text;
+    }
+
+    const KFileItemListProperties properties(items);
+    if (itemsState == Selected) {
+        if (properties.isFile()) {
+            text = i18ncp("Textual representation of selected files. %1 is the number of files.",
+                    "One Selected File", "%1 Selected Files", items.count());
+        } else if (properties.isDirectory()) {
+            text = i18ncp("Textual representation of selected folders. %1 is the number of folders.",
+                    "One Selected Folder", "%1 Selected Folders", items.count());
+        } else {
+            text = i18ncp("Textual representation of selected fileitems. %1 is the number of files/folders.",
+                    "One Selected Item", "%1 Selected Items", items.count());
+        }
+
+        if (fontMetrics.horizontalAdvance(text) <= maximumTextWidth) {
+            return text;
+        }
+    }
+
+    if (properties.isFile()) {
+        return i18ncp("Textual representation of files. %1 is the number of files.",
+                "One File", "%1 Files", items.count());
+    } else if (properties.isDirectory()) {
+        return i18ncp("Textual representation of folders. %1 is the number of folders.",
+                "One Folder", "%1 Folders", items.count());
+    } else {
+        return i18ncp("Textual representation of fileitems. %1 is the number of files/folders.",
+                "One Item", "%1 Items", items.count());
+    }
+}
diff --git a/src/kitemviews/kfileitemlisttostring.h b/src/kitemviews/kfileitemlisttostring.h
new file mode 100644 (file)
index 0000000..7eee0ae
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+    This file is part of the KDE project
+    SPDX-FileCopyrightText: 2022 Felix Ernst <felixernst@zohomail.eu>
+
+    SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
+*/
+
+#ifndef KFILEITEMLISTTOSTRING_H
+#define KFILEITEMLISTTOSTRING_H
+
+class KFileItemList;
+class QFontMetrics;
+class QString;
+
+enum ItemsState {
+    None,
+    Selected
+};
+
+/**
+ * @brief Generates a textual representation of the given list of KFileItems.
+ *
+ * This method is especially useful to be very explicit about which items will be affected by an action.
+ * For example can a label for a delete button be enriched to say "Permanantly Delete `picture1` and `picture2`"
+ * but also "Permanently Delete 7 Selected Folders" without requiring a huge amount of new translations for this.
+ *
+ * Unfortunately this doesn't always work.
+ *
+ * For some texts and some languages this wide range of words cannot be inserted into a text while staying
+ * grammatically correct. Because of this you will probably need to write a fallback for these languages.
+ * Something like this:
+ * \code
+ * // i18n: @action:inmenu menu with actions like copy, paste, rename.
+ * // %2 is a textual representation of the currently selected files or folders. This can be the name of
+ * // the file/files like "file1" or "file1, file2 and file3" or an aggregate like "8 Selected Folders".
+ * // If this sort of word puzzle can not be correctly translated in your language, translate it as "NULL" (without the quotes)
+ * // and a fallback will be used.
+ * auto buttonText = i18ncp("@action A more elaborate and clearly worded version of the Delete action", "Permanently Delete %2", "Permanently Delete %2", items.count(), fileItemListToString(items, fontMetrics.averageCharWidth() * 20, fontMetrics));
+ * if (buttonText == QStringLiteral("NULL")) {
+ *      buttonText = i18ncp("@action Delete button label. %1 is the number of items to be deleted.",
+ *              "Permanently Delete %1 Item", "Permanently Delete %1 Items", items.count())
+ * }
+ * \endcode
+ * (The i18n call should be completely in the line following the i18n: comment without any line breaks within the i18n call or the comment might not be correctly extracted. See: https://commits.kde.org/kxmlgui/a31135046e1b3335b5d7bbbe6aa9a883ce3284c1 )
+ *
+ * @param items The KFileItemList for which a QString should be generated.
+ * @param maximumTextWidth The maximum width/horizontalAdvance the QString should have. Keep scaling in mind.
+ * @param fontMetrics the fontMetrics for the font that is used to calculate the maximumTextWidth.
+ * @param itemsState A state of the @p items that should be spelled out in the returned QString.
+ * @returns the names of the @p items separated by commas if that is below the @p maximumCharacterWidth.
+ *          Otherwise returns something like "5 Files", "8 Selected Folders" or "60 Items"
+ *          while being as specific as possible.
+ */
+QString fileItemListToString(KFileItemList items, int maximumTextWidth, QFontMetrics fontMetrics, ItemsState itemsState = ItemsState::None);
+
+#endif // KFILEITEMLISTTOSTRING_H
index 6391d7d3facd1f2154e303e5867ac2235f15032d..64109167452ea759ac949fb475f1ae0c800196be 100644 (file)
@@ -15,7 +15,7 @@
 
 #include <KDirLister>
 #include <KIO/Job>
-#include <KIO/kio_version.h>
+#include <kio_version.h>
 #include <KLocalizedString>
 #include <KLazyLocalizedString>
 #include <KUrlMimeData>
@@ -1580,6 +1580,7 @@ QList<KFileItemModel::ItemData*> KFileItemModel::createItemDataList(const QUrl&
 void KFileItemModel::prepareItemsForSorting(QList<ItemData*>& itemDataList)
 {
     switch (m_sortRole) {
+    case ExtensionRole:
     case PermissionsRole:
     case OwnerRole:
     case GroupRole:
@@ -1801,6 +1802,10 @@ QHash<QByteArray, QVariant> KFileItemModel::retrieveData(const KFileItem& item,
         data.insert(sharedValue("text"), item.text());
     }
 
+    if (m_requestRole[ExtensionRole]) {
+        data.insert(sharedValue("extension"), QFileInfo(item.name()).suffix());
+    }
+
     if (m_requestRole[SizeRole] && !isDir) {
         data.insert(sharedValue("size"), item.size());
     }
@@ -2613,6 +2618,7 @@ const KFileItemModel::RoleInfoMap* KFileItemModel::rolesInfoMap(int& count)
         { "tags",                TagsRole,                kli18nc("@label", "Tags"),                 KLazyLocalizedString(),                            true,            false },
         { "comment",             CommentRole,             kli18nc("@label", "Comment"),              KLazyLocalizedString(),                            true,            false },
         { "title",               TitleRole,               kli18nc("@label", "Title"),                kli18nc("@label", "Document"),                     true,            true  },
+        { "author",              AuthorRole,              kli18nc("@label", "Author"),               kli18nc("@label", "Document"),                     true,            true  },
         { "wordCount",           WordCountRole,           kli18nc("@label", "Word Count"),           kli18nc("@label", "Document"),                     true,            true  },
         { "lineCount",           LineCountRole,           kli18nc("@label", "Line Count"),           kli18nc("@label", "Document"),                     true,            true  },
         { "imageDateTime",       ImageDateTimeRole,       kli18nc("@label", "Date Photographed"),    kli18nc("@label", "Image"),                        true,            true  },
@@ -2630,6 +2636,7 @@ const KFileItemModel::RoleInfoMap* KFileItemModel::rolesInfoMap(int& count)
         { "aspectRatio",         AspectRatioRole,         kli18nc("@label", "Aspect Ratio"),         kli18nc("@label", "Video"),                        true,            true  },
         { "frameRate",           FrameRateRole,           kli18nc("@label", "Frame Rate"),           kli18nc("@label", "Video"),                        true,            true  },
         { "path",                PathRole,                kli18nc("@label", "Path"),                 kli18nc("@label", "Other"),                        false,           false },
+        { "extension",           ExtensionRole,           kli18nc("@label", "File Extension"),       kli18nc("@label", "Other"),                        false,           false },
         { "deletiontime",        DeletionTimeRole,        kli18nc("@label", "Deletion Time"),        kli18nc("@label", "Other"),                        false,           false },
         { "destination",         DestinationRole,         kli18nc("@label", "Link Destination"),     kli18nc("@label", "Other"),                        false,           false },
         { "originUrl",           OriginUrlRole,           kli18nc("@label", "Downloaded From"),      kli18nc("@label", "Other"),                        true,            false },
index cc39a0084d21246f3aff0d8dd143c463424b74b4..f4c09b6c5eadd64e2319b57b5b00eed67f044ec4 100644 (file)
@@ -290,10 +290,10 @@ private:
     enum RoleType {
         // User visible roles:
         NoRole, NameRole, SizeRole, ModificationTimeRole, CreationTimeRole, AccessTimeRole, PermissionsRole, OwnerRole,
-        GroupRole, TypeRole, DestinationRole, PathRole, DeletionTimeRole,
+        GroupRole, TypeRole, ExtensionRole, DestinationRole, PathRole, DeletionTimeRole,
         // User visible roles available with Baloo:
         CommentRole, TagsRole, RatingRole, DimensionsRole, WidthRole, HeightRole, ImageDateTimeRole, OrientationRole,
-        WordCountRole, TitleRole, LineCountRole, ArtistRole, GenreRole, AlbumRole, DurationRole, TrackRole, ReleaseYearRole,
+        WordCountRole, TitleRole, AuthorRole, LineCountRole, ArtistRole, GenreRole, AlbumRole, DurationRole, TrackRole, ReleaseYearRole,
         BitrateRole, OriginUrlRole, AspectRatioRole, FrameRateRole,
         // Non-visible roles:
         IsDirRole, IsLinkRole, IsHiddenRole, IsExpandedRole, IsExpandableRole, ExpandedParentsCountRole,
@@ -527,6 +527,7 @@ private:
 inline bool KFileItemModel::isRoleValueNatural(RoleType roleType)
 {
     return (roleType == TypeRole ||
+            roleType == ExtensionRole ||
             roleType == TagsRole ||
             roleType == CommentRole ||
             roleType == TitleRole ||
index e13b3dedfd2f75a4cc1993b2fc7944c1d60cd134..d9594de4178f8a19ff268b0fb9d41a5435d7ce10 100644 (file)
@@ -28,6 +28,7 @@
 #endif
 
 #include <QApplication>
+#include <QFileInfo>
 #include <QIcon>
 #include <QPainter>
 #include <QPluginLoader>
@@ -1337,6 +1338,10 @@ QHash<QByteArray, QVariant> KFileItemModelRolesUpdater::rolesData(const KFileIte
         }
     }
 
+    if (m_roles.contains("extension")) {
+        data.insert("extension", QFileInfo(item.name()).suffix());
+    }
+
     if (m_roles.contains("type")) {
         data.insert("type", item.mimeComment());
     }
index 7ef37481d49d65c8994ba67691bbabfb40a3fe0c..994812b1fc575424dba7a7f0c953c3f85f06adb1 100644 (file)
 #include "kitemlistview.h"
 #include "private/kitemlistkeyboardsearchmanager.h"
 #include "private/kitemlistrubberband.h"
-#include "private/ktwofingerswipe.h"
-#include "private/ktwofingertap.h"
 #include "views/draganddrophelper.h"
 
+#include <KTwoFingerSwipe>
+#include <KTwoFingerTap>
+
 #include <QAccessible>
 #include <QApplication>
 #include <QDrag>
@@ -1496,6 +1497,7 @@ bool KItemListController::onPress(const QPoint& screenPos, const QPointF& pos, c
 
     const bool shiftPressed = modifiers & Qt::ShiftModifier;
     const bool controlPressed = modifiers & Qt::ControlModifier;
+    const bool leftClick = buttons & Qt::LeftButton;
     const bool rightClick = buttons & Qt::RightButton;
 
     // The previous selection is cleared if either
@@ -1599,8 +1601,8 @@ bool KItemListController::onPress(const QPoint& screenPos, const QPointF& pos, c
             break;
 
         case MultiSelection:
-            if (controlPressed && !shiftPressed) {
-                // A mouse button press is happening on an item while control is pressed. This either means a user wants to:
+            if (controlPressed && !shiftPressed && leftClick) {
+                // A left mouse button press is happening on an item while control is pressed. This either means a user wants to:
                 // - toggle the selection of item(s) or
                 // - they want to begin a drag on the item(s) to copy them.
                 // We rule out the latter, if the item is not clicked directly and was unselected previously.
index b531b8641499d0a07ed2e330e6a0c1ea5d43d4fc..247581a4ec374ed4e2e0921a1a5ebea13c4d0ec7 100644 (file)
@@ -1196,7 +1196,11 @@ QString KStandardItemListWidget::elideRightKeepExtension(const QString &text, in
             QString ret = m_customizedFontMetrics.elidedText(text.chopped(extensionLength),
                                                              Qt::ElideRight,
                                                              elidingWidth - extensionWidth);
+#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
             ret.append(text.rightRef(extensionLength));
+#else
+            ret.append(QStringView(text).right(extensionLength));
+#endif
             return ret;
         }
     }
index 4c231e2ff92ddf45f320c8359068057c19b526f6..e183a0f9a20719ae14d1a59cabc0680e308d5c8a 100644 (file)
@@ -37,6 +37,7 @@ namespace {
             { Property::Rating,            QByteArrayLiteral("rating") },
             { Property::Comment,           QByteArrayLiteral("comment") },
             { Property::Title,             QByteArrayLiteral("title") },
+            { Property::Author,            QByteArrayLiteral("author") },
             { Property::WordCount,         QByteArrayLiteral("wordCount") },
             { Property::LineCount,         QByteArrayLiteral("lineCount") },
             { Property::Width,             QByteArrayLiteral("width") },
diff --git a/src/kitemviews/private/ktwofingerswipe.cpp b/src/kitemviews/private/ktwofingerswipe.cpp
deleted file mode 100644 (file)
index 6d0e18e..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2020 Steffen Hartleib <steffenhartleib@t-online.de>
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- */
-
-// Self
-#include "ktwofingerswipe.h"
-
-// Qt
-#include <QTouchEvent>
-#include <QLineF>
-
-KTwoFingerSwipeRecognizer::KTwoFingerSwipeRecognizer() :
-    QGestureRecognizer(),
-    m_touchBeginnTimestamp(0),
-    m_gestureAlreadyTriggered(false)
-{
-}
-
-KTwoFingerSwipeRecognizer::~KTwoFingerSwipeRecognizer()
-{
-}
-
-QGesture* KTwoFingerSwipeRecognizer::create(QObject*)
-{
-    return static_cast<QGesture*>(new KTwoFingerSwipe());
-}
-
-QGestureRecognizer::Result KTwoFingerSwipeRecognizer::recognize(QGesture* gesture, QObject* watched, QEvent* event)
-{
-    Q_UNUSED(watched)
-
-    KTwoFingerSwipe* const kTwoFingerSwipe = static_cast<KTwoFingerSwipe*>(gesture);
-    const QTouchEvent* touchEvent = static_cast<const QTouchEvent*>(event);
-
-    const int maxTimeFrameForSwipe = 90;
-    const int minDistanceForSwipe = 30;
-
-    switch (event->type()) {
-    case QEvent::TouchBegin: {
-        m_touchBeginnTimestamp = touchEvent->timestamp();
-        m_gestureAlreadyTriggered = false;
-        kTwoFingerSwipe->setHotSpot(touchEvent->touchPoints().first().startScreenPos());
-        kTwoFingerSwipe->setPos(touchEvent->touchPoints().first().startPos());
-        kTwoFingerSwipe->setScreenPos(touchEvent->touchPoints().first().startScreenPos());
-        kTwoFingerSwipe->setScenePos(touchEvent->touchPoints().first().startScenePos());
-        return MayBeGesture;
-    }
-
-    case QEvent::TouchUpdate: {
-        const qint64 now = touchEvent->timestamp();
-        const qint64 elapsedTime = now - m_touchBeginnTimestamp;
-        const QPointF distance = touchEvent->touchPoints().first().startPos() - touchEvent->touchPoints().first().pos();
-        kTwoFingerSwipe->setHotSpot(touchEvent->touchPoints().first().startScreenPos());
-        kTwoFingerSwipe->setPos(touchEvent->touchPoints().first().startPos());
-        kTwoFingerSwipe->setScreenPos(touchEvent->touchPoints().first().startScreenPos());
-        kTwoFingerSwipe->setScenePos(touchEvent->touchPoints().first().startScenePos());
-        const QLineF ql = QLineF(touchEvent->touchPoints().first().startPos(), touchEvent->touchPoints().first().pos());
-        kTwoFingerSwipe->setSwipeAngle(ql.angle());
-
-        if (touchEvent->touchPoints().size() > 2) {
-            return CancelGesture;
-        }
-
-        if (touchEvent->touchPoints().size() == 2) {
-            if ((elapsedTime) > maxTimeFrameForSwipe) {
-                return CancelGesture;
-            }
-
-            if (distance.manhattanLength() >= minDistanceForSwipe &&
-                    (elapsedTime) <= maxTimeFrameForSwipe && !m_gestureAlreadyTriggered) {
-                m_gestureAlreadyTriggered = true;
-                return FinishGesture;
-            } else if ((elapsedTime) <= maxTimeFrameForSwipe && !m_gestureAlreadyTriggered) {
-                return TriggerGesture;
-            }
-        }
-        break;
-    }
-
-    default:
-        return Ignore;
-    }
-    return Ignore;
-}
-
-KTwoFingerSwipe::KTwoFingerSwipe(QObject* parent) :
-    QGesture(parent),
-    m_pos(QPointF(-1, -1)),
-    m_screenPos(QPointF(-1, -1)),
-    m_scenePos(QPointF(-1, -1)),
-    m_swipeAngle(0.0)
-{
-}
-
-KTwoFingerSwipe::~KTwoFingerSwipe()
-{
-}
-
-QPointF KTwoFingerSwipe::pos() const
-{
-    return m_pos;
-}
-
-void KTwoFingerSwipe::setPos(QPointF _pos)
-{
-    m_pos = _pos;
-}
-
-QPointF KTwoFingerSwipe::screenPos() const
-{
-    return m_screenPos;
-}
-
-void KTwoFingerSwipe::setScreenPos(QPointF _screenPos)
-{
-    m_screenPos = _screenPos;
-}
-
-QPointF KTwoFingerSwipe::scenePos() const
-{
-    return m_scenePos;
-}
-
-void KTwoFingerSwipe::setScenePos(QPointF _scenePos)
-{
-    m_scenePos = _scenePos;
-}
-
-qreal KTwoFingerSwipe::swipeAngle() const
-{
-    return m_swipeAngle;
-}
- void KTwoFingerSwipe::setSwipeAngle(qreal _swipeAngle)
-{
-    m_swipeAngle = _swipeAngle;
-}
-
diff --git a/src/kitemviews/private/ktwofingerswipe.h b/src/kitemviews/private/ktwofingerswipe.h
deleted file mode 100644 (file)
index 6d64d8f..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2020 Steffen Hartleib <steffenhartleib@t-online.de>
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- */
-
-#ifndef KTWOFINGERSWIPE_H
-#define KTWOFINGERSWIPE_H
-
-#include "dolphin_export.h"
-// Qt
-#include <QGesture>
-#include <QGestureRecognizer>
-
-class DOLPHIN_EXPORT KTwoFingerSwipe : public QGesture
-{
-    Q_OBJECT
-    Q_PROPERTY(QPointF pos READ pos WRITE setPos)
-    Q_PROPERTY(QPointF screenPos READ screenPos WRITE setScreenPos)
-    Q_PROPERTY(QPointF scenePos READ scenePos WRITE setScenePos)
-    Q_PROPERTY(qreal swipeAngle READ swipeAngle WRITE setSwipeAngle)
-public:
-    explicit KTwoFingerSwipe(QObject* parent = nullptr);
-    ~KTwoFingerSwipe() override;
-    QPointF pos() const;
-    void setPos(QPointF pos);
-    QPointF screenPos() const;
-    void setScreenPos(QPointF screenPos);
-    QPointF scenePos() const;
-    void setScenePos(QPointF scenePos);
-    qreal swipeAngle() const;
-    void setSwipeAngle(qreal swipeAngle);
-private:
-    QPointF m_pos;
-    QPointF m_screenPos;
-    QPointF m_scenePos;
-    qreal m_swipeAngle;
-};
-
-class DOLPHIN_EXPORT KTwoFingerSwipeRecognizer : public QGestureRecognizer
-{
-public:
-    explicit KTwoFingerSwipeRecognizer();
-    ~KTwoFingerSwipeRecognizer() override;
-    QGesture* create(QObject*) override;
-    Result recognize(QGesture*, QObject*, QEvent*) override;
-private:
-    Q_DISABLE_COPY( KTwoFingerSwipeRecognizer )
-    qint64 m_touchBeginnTimestamp;
-    bool m_gestureAlreadyTriggered;
-};
-
-#endif /* KTWOFINGERSWIPE_H */
-
diff --git a/src/kitemviews/private/ktwofingertap.cpp b/src/kitemviews/private/ktwofingertap.cpp
deleted file mode 100644 (file)
index edd9d1d..0000000
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2020 Steffen Hartleib <steffenhartleib@t-online.de>
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- */
-
-// Self
-#include "ktwofingertap.h"
-
-// Qt
-#include <QTouchEvent>
-#include <QApplication>
-#include <QGraphicsWidget>
-
-KTwoFingerTapRecognizer::KTwoFingerTapRecognizer() :
-    QGestureRecognizer(),
-    m_gestureTriggered(false)
-{
-}
-
-KTwoFingerTapRecognizer::~KTwoFingerTapRecognizer()
-{
-}
-
-QGesture* KTwoFingerTapRecognizer::create(QObject*)
-{
-    return static_cast<QGesture*>(new KTwoFingerTap());
-}
-
-QGestureRecognizer::Result KTwoFingerTapRecognizer::recognize(QGesture* gesture, QObject* watched, QEvent* event)
-{
-    if (qobject_cast<QGraphicsWidget*>(watched)) {
-        return Ignore;
-    }
-
-    KTwoFingerTap* const kTwoFingerTap = static_cast<KTwoFingerTap*>(gesture);
-    const QTouchEvent* touchEvent = static_cast<const QTouchEvent*>(event);
-
-    switch (event->type()) {
-    case QEvent::TouchBegin: {
-        kTwoFingerTap->setHotSpot(touchEvent->touchPoints().first().startScreenPos());
-        kTwoFingerTap->setPos(touchEvent->touchPoints().first().startPos());
-        kTwoFingerTap->setScreenPos(touchEvent->touchPoints().first().startScreenPos());
-        kTwoFingerTap->setScenePos(touchEvent->touchPoints().first().startScenePos());
-        m_gestureTriggered = false;
-        return MayBeGesture;
-    }
-
-    case QEvent::TouchUpdate: {
-
-        if (touchEvent->touchPoints().size() > 2) {
-            m_gestureTriggered = false;
-            return CancelGesture;
-        }
-
-        if (touchEvent->touchPoints().size() == 2) {
-            if ((touchEvent->touchPoints().first().startPos() - touchEvent->touchPoints().first().pos()).manhattanLength() >= QApplication::startDragDistance()) {
-                m_gestureTriggered = false;
-                return CancelGesture;
-            }
-            if ((touchEvent->touchPoints().at(1).startPos() - touchEvent->touchPoints().at(1).pos()).manhattanLength() >= QApplication::startDragDistance()) {
-                m_gestureTriggered = false;
-                return CancelGesture;
-            }
-            if (touchEvent->touchPointStates() & Qt::TouchPointPressed) {
-                m_gestureTriggered = true;
-            }
-            if (touchEvent->touchPointStates() & Qt::TouchPointReleased && m_gestureTriggered) {
-                m_gestureTriggered = false;
-                return FinishGesture;
-            }
-        }
-        break;
-    }
-
-    default:
-        return Ignore;
-    }
-    return Ignore;
-}
-
-KTwoFingerTap::KTwoFingerTap(QObject* parent) :
-    QGesture(parent),
-    m_pos(QPointF(-1, -1)),
-    m_screenPos(QPointF(-1, -1)),
-    m_scenePos(QPointF(-1, -1))
-{
-}
-
-KTwoFingerTap::~KTwoFingerTap()
-{
-}
-
-QPointF KTwoFingerTap::pos() const
-{
-    return m_pos;
-}
-
-void KTwoFingerTap::setPos(QPointF _pos)
-{
-    m_pos = _pos;
-}
-
-QPointF KTwoFingerTap::screenPos() const
-{
-    return m_screenPos;
-}
-
-void KTwoFingerTap::setScreenPos(QPointF _screenPos)
-{
-    m_screenPos = _screenPos;
-}
-
-QPointF KTwoFingerTap::scenePos() const
-{
-    return m_scenePos;
-}
-
-void KTwoFingerTap::setScenePos(QPointF _scenePos)
-{
-    m_scenePos = _scenePos;
-}
diff --git a/src/kitemviews/private/ktwofingertap.h b/src/kitemviews/private/ktwofingertap.h
deleted file mode 100644 (file)
index 6d40990..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * SPDX-FileCopyrightText: 2020 Steffen Hartleib <steffenhartleib@t-online.de>
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- */
-
-#ifndef KTWOFINGERTAP_H
-#define KTWOFINGERTAP_H
-
-#include <dolphin_export.h>
-// Qt
-#include <QGesture>
-#include <QGestureRecognizer>
-
-class DOLPHIN_EXPORT KTwoFingerTap : public QGesture
-{
-    Q_OBJECT
-    Q_PROPERTY(QPointF pos READ pos WRITE setPos)
-    Q_PROPERTY(QPointF screenPos READ screenPos WRITE setScreenPos)
-    Q_PROPERTY(QPointF scenePos READ scenePos WRITE setScenePos)
-public:
-    explicit KTwoFingerTap(QObject* parent = nullptr);
-    ~KTwoFingerTap() override;
-    QPointF pos() const;
-    void setPos(QPointF pos);
-    QPointF screenPos() const;
-    void setScreenPos(QPointF screenPos);
-    QPointF scenePos() const;
-    void setScenePos(QPointF scenePos);
-private:
-    QPointF m_pos;
-    QPointF m_screenPos;
-    QPointF m_scenePos;
-};
-
-class DOLPHIN_EXPORT KTwoFingerTapRecognizer : public QGestureRecognizer
-{
-public:
-    explicit KTwoFingerTapRecognizer();
-    ~KTwoFingerTapRecognizer() override;
-    QGesture* create(QObject*) override; 
-    Result recognize(QGesture*, QObject*, QEvent*) override;
-private:
-    Q_DISABLE_COPY(KTwoFingerTapRecognizer)
-    bool m_gestureTriggered;
-};
-
-#endif /* KTWOFINGERTAP_H */
index a05649a7930ad74753db45e2761ce2efe8067f2f..afe024973adebff8d506e5b874adbf60b0f29713 100644 (file)
     <p xml:lang="sl">Dolphin je upravitelj datotek KDE, ki vam omogoča krmarjenje in brskanje po vsebini trdih diskov, USB ključkov, SD kartic in še več. Ustvarjanje, premikanje ali brisanje datotek in map je preprosto in hitro.</p>
     <p xml:lang="sv">Dolphin är KDE:s filhanterare som låter dig navigera och bläddra i innehållet på hårddiskar, USB-minnen, SD-kort, med mera. Skapa, flytta eller ta bort filer och kataloger är enkelt och går snabbt.</p>
     <p xml:lang="ta">டால்பின் என்பது, உங்கள் வட்டுகள், USB சாதனங்கள், மற்றும் SD அட்டைகள் போன்றவற்றின் உள்ளடக்கத்தை பார்க்க உதவும் கே.டீ.யீ.யின் கோப்பு உலாவியாகும். கோப்புகள் மற்றும் அடைவுகளை எளிதாகவும் வேகமாகவும் உருவாக்க, நகர்த்த, மற்றும் நீக்க முடியும்.</p>
-    <p xml:lang="tr">Dolphin, KDE'nin sabit disklerinizin, USB belleklerinizin, SD kartlarınızın ve daha fazlasının içeriğinde gezinmenizi ve bunlara göz atmanızı sağlayan dosya yöneticisidir. Dosya ve klasörlerin oluşturulması, taşınması veya silinmesi basit ve hızlıdır.</p>
+    <p xml:lang="tr">Dolphin, KDE'nin sabit disklerinizin, USB belleklerinizin, SD kartlarınızın ve daha fazlasının içeriğinde gezinmenizi ve bunlara göz atmanıza izin veren bir dosya yöneticisidir. Dosya ve klasörlerin oluşturulması, taşınması veya silinmesi basit ve hızlıdır.</p>
     <p xml:lang="uk">Dolphin — програма для керування файлами KDE, за допомогою якої ви можете пересуватися та переглядати вміст дисків, флешок USB, SD-карток тощо. Створення, пересування або вилучення файлів та тек є простим і швидким завданням.</p>
     <p xml:lang="vi">Dolphin là trình quản lí tệp của KDE, nó cho phép bạn điều hướng và duyệt nội dung các ổ cứng, các thẻ USB, thẻ SD và các thiết bị khác của bạn. Việc tạo, chuyển, hay xoá tệp và thư mục đều đơn giản và nhanh chóng.</p>
     <p xml:lang="x-test">xxDolphin is KDE's file manager that lets you navigate and browse the contents of your hard drives, USB sticks, SD cards, and more. Creating, moving, or deleting files and folders is simple and fast.xx</p>
     <p xml:lang="sl">Dolphin je zelo lahek, hkrati pa ga lahko prilagodite svojim posebnim potrebam. To pomeni, da lahko izvajate upravljanje datotek natanko tako, kot želite. Dolphin podpira tri različne načine pogleda: klasičen mrežni pogled vseh datotek, podrobnejši pogled in drevesni pogled. Večino vedenja Dolphina lahko tudi nastavljate.</p>
     <p xml:lang="sv">Dolphin är mycket lättviktigt, men samtidigt kan du anpassa det för dina specifika behov. Det betyder att du kan utföra filhantering precis på det sätt du vill. Dolphin stöder tre olika visningsmetoder: en klassisk rutnätsvy av alla filer, en mer detaljerad vy och en trädvy. Du kan också anpassa det mesta av Dolphins beteende.</p>
     <p xml:lang="ta">டால்பின் மிகவும் சிக்கனமானது, ஆனால் அதே நேரத்தில், உங்கள் தேவைகளுக்கேற்ப அதை மாற்றி அமைக்கலாம். அதாவது, நீங்கள் விரும்பும் விதத்திலெயே உங்கள் கோப்புகளை நீங்கள் நிர்வகிக்கலாம். டால்பின் மூன்று காட்சிமுறைகளை ஆதரிக்கும்: சாதாரணமான காட்சிமுறை, அதைவிட விவரமான காட்சிமுறை, மற்றும் கிளைப்பட (tree) காட்சிமுறை. டால்பினின் நடத்தையின் பெரும்பாலான அம்சங்களை நீங்கள் மாற்றலாம்.</p>
-    <p xml:lang="tr">Dolphin çok hafiftir, ancak aynı zamanda onu özel ihtiyaçlarınıza göre uyarlayabilirsiniz. Bu, dosya yönetiminizi tam olarak istediğiniz şekilde gerçekleştirebileceğiniz anlamına gelir. Dolphin üç farklı görünüm kipini destekler: tüm dosyaların klasik bir ızgara görünümü, daha ayrıntılı bir görünüm ve bir ağaç görünümü. Ayrıca, Dolphin'in davranışlarının çoğunu yapılandırabilirsiniz.</p>
+    <p xml:lang="tr">Dolphin çok hafiftir; ancak aynı zamanda onu özel gereksinimlerinize göre uyarlayabilirsiniz. Bu, dosya yönetimini tam olarak istediğiniz şekilde gerçekleştirebileceğiniz anlamına gelir. Dolphin üç farklı görünüm kipini destekler: tüm dosyaların klasik bir ızgara görünümü, daha ayrıntılı bir görünüm ve bir ağaç görünümü. Ayrıca, Dolphin'in davranışlarının çoğunu yapılandırabilirsiniz.</p>
     <p xml:lang="uk">Dolphin є дуже невибагливим до ресурсів. Втім, ви можете адаптувати програму до ваших потреб. Це означає, що ви можете здійснювати керування файлами саме так, як вам того хочеться. У Dolphin передбачено три різних режими перегляду: класичний перегляд таблицею усіх файлів, режим докладного перегляду та ієрархічний перегляд. Більшу частину характеристик роботи програми можна налаштувати Dolphin.</p>
     <p xml:lang="vi">Dolphin rất nhẹ, nhưng đồng thời bạn có thể điều chỉnh nó theo các nhu cầu cụ thể của mình. Điều này nghĩa là bạn có thể thực hiện việc quản lí tệp đúng như cách bạn muốn. Dolphin hỗ trợ ba chế độ xem khác nhau: một khung xem tất cả các tệp ở dạng lưới cổ điển, một khung xem chi tiết hơn, và một khung xem dạng cây. Bạn cũng có thể cấu hình hầu hết tất cả các ứng xử của Dolphin.</p>
     <p xml:lang="x-test">xxDolphin is very lightweight, but at the same time, you can adapt it to your specific needs. This means that you can carry out your file management exactly the way you want to. Dolphin supports three different view modes: a classic grid view of all the files, a more detailed view, and a tree view. You can also configure most of Dolphin's behavior.xx</p>
index a6ab14067b946451cb3e0756c4c2eb9b5e10ed50..d3a4e8680ad07dc09b0a3bb24736545dbbcb7d15 100755 (executable)
@@ -135,10 +135,11 @@ Keywords[ko]=files;file management;file browsing;samba;network shares;Explorer;F
 Keywords[nl]=bestanden;bestandsbeheer;bladeren in bestanden;samba;netwerk-shares;verkenner;zoeksysteem;
 Keywords[nn]=filer;filhandsaming;filutforsking;samba;nettverksressursar;Explorer;Finder;
 Keywords[pl]=pliki;zarządzenie plikami;przeglądanie plików;samba;udziały sieciowe;Przeglądarka;Finder;
+Keywords[pt]=ficheiros;gestão de ficheiros;navegação de ficheiros;samba;partilhas de rede;Explorador;Pesquisa;
 Keywords[pt_BR]=arquivo;gerenciamento de arquivos;navegação de arquivos;samba;compartilhamentos de rede;explorador;localizador;
 Keywords[ro]=fișiere;gestiune fișiere;răsfoire fișiere;samba;partajări de rețea;unități de rețea;Explorer;Finder;
 Keywords[ru]=files;file management;file browsing;samba;network shares;Explorer;Finder;файлы,управление файлами,просмотр файлов,сетевые папки
-Keywords[sk]=súbory;správa súborov;prehliadanie súborov;samba;sieťové akcie;Prieskumník;Vyhľadávač;
+Keywords[sk]=súbory;správa súborov;prehliadanie súborov;samba;zdieľanie v sieti;Prieskumník;Vyhľadávač;
 Keywords[sl]=datoteke;upravljanje z datotekami;brskanje po datotekah;samba;mrežni diski;Raziskovalec;Iskalec;
 Keywords[sv]=filer;filhantering;filbläddring;samba;delade nätverksresurser;Utforskare;Finder;
 Keywords[tr]=dosyalar;dosya yönetimi;dosya göz at;samba;ağ paylaşımları;Explorer;Finder;
index 91da3d256ea367c407a9084d891b3c783079b6fe..7f42ee3bd5927e3ec109ffac44d259491eea3401 100644 (file)
@@ -50,7 +50,7 @@ Q_NORETURN void fail(const QString &str)
 QString getServiceMenusDir()
 {
     const QString dataLocation = QStandardPaths::writableLocation(QStandardPaths::GenericDataLocation);
-    return QDir(dataLocation).absoluteFilePath("kservices5/ServiceMenus");
+    return QDir(dataLocation).absoluteFilePath("kio/servicemenus");
 }
 
 #ifdef HAVE_PACKAGEKIT
@@ -300,6 +300,8 @@ bool cmdInstall(const QString &archive, QString &errorText)
             errorText = i18n("Failed to copy .desktop file %1 to %2: %3", archive, dest, source.errorString());
             return false;
         }
+        QFile destFile(dest);
+        destFile.setPermissions(destFile.permissions() | QFile::ExeOwner);
     } else {
         if (binaryPackages->contains(QMimeDatabase().mimeTypeForFile(archive).name())) {
             packageKit(PackageOperation::Install, archive);
diff --git a/src/settings/kcm/kcmdolphingeneral.desktop b/src/settings/kcm/kcmdolphingeneral.desktop
deleted file mode 100644 (file)
index c43d2c6..0000000
+++ /dev/null
@@ -1,275 +0,0 @@
-Name=Dolphin General
-Name[ar]=دولفين العامّ
-Name[ast]=Axustes xenerales de Dolphin
-Name[az]=Əsas Dolphin parametrləri
-Name[ca]=General del Dolphin
-Name[ca@valencia]=General de Dolphin
-Name[cs]=Obecný Dolphin
-Name[da]=Dolphin generelt
-Name[de]=Dolphin allgemein
-Name[el]=Dolphin Γενικά
-Name[en_GB]=Dolphin General
-Name[es]=Preferencias generales de Dolphin
-Name[et]=Dolphin üldiselt
-Name[eu]=Dolphin orokorra
-Name[fi]=Dolphin – yleiset
-Name[fr]=Dolphin général
-Name[gl]=Xerais de Dolphin
-Name[he]=כללי ב־Dolphin
-Name[hi]=डॉल्फ़िन साधारण
-Name[hu]=Dolphin: Általános
-Name[ia]=Dolphin General
-Name[id]=Dolphin Umum
-Name[is]=Almennt um Dolphin
-Name[it]=Impostazioni generali di Dolphin
-Name[ja]=Dolphin 全般
-Name[ko]=Dolphin 일반
-Name[lt]=Dolphin bendrosios
-Name[lv]=Dolphin vispārējs
-Name[ml]=ഡോൾഫിൻ ജനറൽ
-Name[my]=လင်းပိုင် ယေဘုယျ
-Name[nb]=Dolphin generelt
-Name[nl]=Dolphin algemeen
-Name[nn]=Generelt for Dolphin
-Name[pa]=ਡਾਲਫਿਨ ਆਮ
-Name[pl]=Ustawienia Dolphina
-Name[pt]=Geral do Dolphin
-Name[pt_BR]=Geral do Dolphin
-Name[ro]=Dolphin – Generale
-Name[ru]=Основные параметры Dolphin
-Name[se]=Dolphinoppalaččat
-Name[sk]=Všeobecný Dolphin
-Name[sl]=Dolphin - splošno
-Name[sr]=Делфиново опште
-Name[sr@ijekavian]=Делфиново опште
-Name[sr@ijekavianlatin]=Dolphinovo opšte
-Name[sr@latin]=Dolphinovo opšte
-Name[sv]=Dolphin allmänt
-Name[ta]=டால்பின் பொது அமைப்புகள்
-Name[tr]=Dolphin Genel
-Name[uk]=«Загальне» Dolphin
-Name[vi]=Chung cho Dolphin
-Name[x-test]=xxDolphin Generalxx
-Name[zh_CN]=Dolphin 常规
-Name[zh_TW]=Dolphin 一般
-Comment=This service allows configuration of general Dolphin settings.
-Comment[ar]=تسمح هذه الخدمة بضبط إعدادات دولفين العامّة.
-Comment[ast]=Esti serviciu permite la configuración de los axustes xenerales de Dolphin.
-Comment[az]=Bu xidmət əsas Dolphin parametrlərini ayarlamağa imkan verir.
-Comment[ca]=Aquest servei permet la configuració de l'arranjament general del Dolphin.
-Comment[ca@valencia]=Este servei permet la configuració general de Dolphin.
-Comment[cs]=Tato služba umožňuje obecné nastavení Dolphinu.
-Comment[da]=Denne tjeneste muliggør konfiguration af generelle Dolphin-indstillinger.
-Comment[de]=Mit diesem Dienst können allgemeine Einstellungen von Dolphin eingerichtet werden.
-Comment[el]=Η υπηρεσία αυτή επιτρέπει τη διαμόρφωση των γενικών ρυθμίσεων του Dolphin
-Comment[en_GB]=This service allows configuration of general Dolphin settings.
-Comment[es]=Este servicio permite configurar las preferencias generales de Dolphin.
-Comment[et]=See teenus võimaldab seadistada Dolphini üldisi seadistusi.
-Comment[eu]=Zerbitzu honek Dolphinen ezarpen orokorrak konfiguratzeko balio du.
-Comment[fi]=Tällä palvelulla voi muokata Dolphinin yleisasetuksia.
-Comment[fr]=Ce service permet de configurer les paramètres généraux de Dolphin.
-Comment[gl]=Este servizo permite configurar opcións xerais de Dolphin.
-Comment[he]=שרות זה מאפשר את ההגדרה של הגדרות Dolphin הכלליות.
-Comment[hi]=यह सेवा साधारण डॉल्फिन सेटिंग्स के विन्यास की अनुमति देती है। 
-Comment[hu]=Ez a szolgáltatás lehetővé teszi a Dolphin általános beállításainak módosítását.
-Comment[ia]=Iste servicio permitte configuration del preferentias general de Dolphin.
-Comment[id]=Layanan ini memungkinkan konfigurasi pengaturan umum Dolphin.
-Comment[is]=Þessi þjónusta leyfir breytingar á almennum stillingum á Dolphin.
-Comment[it]=Questo servizio permette di configurare le impostazioni generali di Dolphin.
-Comment[ja]=Dolphin の全般的な設定を行います
-Comment[ko]=이 서비스를 통해 일반 Dolphin 설정을 구성할 수 있습니다.
-Comment[lt]=Ši paslauga leidžia bendrųjų Dolphin nuostatų konfigūravimą.
-Comment[lv]=Šis serviss ļauj konfigurēt vispārējos Dolphin iestatījumus.
-Comment[ml]=പൊതുവായ ഡോള്‍ഫിന്‍ സജ്ജീകരണങ്ങള്‍ ക്രമീകരിയ്ക്കാന്‍ ഈ സേവനം അനുവദിക്കുന്നു.
-Comment[my]=ဤဝန်ဆောင်မှုက လင်းပိုင် ယေဘုယျဆက်တင်ကို ပြင်ဆင်နိုင်စေသည်။
-Comment[nb]=Med denne tjenesten kan du sette opp generelle innstillinger for Dolphin.
-Comment[nl]=Met deze dienst kunt u algemene Dolphin-instellingen configureren.
-Comment[nn]=Denne tenesta lèt deg setja opp generelle innstillingar for Dolphin.
-Comment[pa]=ਇਹ ਸਰਵਿਸ ਆਮ ਡਾਲਫਿਨ ਸੈਟਿੰਗ ਦੀ ਸੰਰਚਨਾ ਵਾਸਤੇ ਹੈ।
-Comment[pl]=Ta usługa pozwala na ogólne ustawienie Dolphina.
-Comment[pt]=Este serviço permite a configuração das definições gerais do Dolphin.
-Comment[pt_BR]=Este serviço permite configurar as opções gerais do Dolphin.
-Comment[ro]=Acest serviciu permite configurarea opțiunilor generale Dolphin.
-Comment[ru]=Эта служба позволяет настраивать основные параметры Dolphin
-Comment[sk]=Táto služba umožňuje všeobecné nastavenie Dolphinu.
-Comment[sl]=Ta storitev omogoča spreminjanje splošnih nastavitev programa Dolphin.
-Comment[sr]=Овај сервис омогућава подешавање општих Делфинових поставки.
-Comment[sr@ijekavian]=Овај сервис омогућава подешавање општих Делфинових поставки.
-Comment[sr@ijekavianlatin]=Ovaj servis omogućava podešavanje opštih Dolphinovih postavki.
-Comment[sr@latin]=Ovaj servis omogućava podešavanje opštih Dolphinovih postavki.
-Comment[sv]=Den här tjänsten låter dig anpassa allmänna inställningar i Dolphin.
-Comment[ta]=டால்பினின் பொது அமைப்புகளை அமைக்க இந்த சேவை உதவும்.
-Comment[tr]=Bu servis genel Dolphin ayarlarını yapılandırmanızı sağlar.
-Comment[uk]=Ця служба надасть змогу налаштувати загальні параметри Dolphin.
-Comment[vi]=Dịch vụ này cho phép cấu hình các thiết lập chung của Dolphin.
-Comment[x-test]=xxThis service allows configuration of general Dolphin settings.xx
-Comment[zh_CN]=此服务用于配置 Dolphin 的常规设置。
-Comment[zh_TW]=此服務允許設定 Dolphin 的一般設定。
-
-[Desktop Entry]
-Icon=system-file-manager
-Type=Service
-X-KDE-ServiceTypes=KCModule
-
-X-KDE-Library=dolphin/kcms/kcm_dolphingeneral
-X-DocPath=dolphin/configuring-dolphin.html#preferences-dialog
-# ctxt: Random file browsing settings.
-Name=General
-Name[ar]=عامّ
-Name[ast]=Xeneral
-Name[az]=Əsas
-Name[ca]=General
-Name[ca@valencia]=General
-Name[cs]=Obecné
-Name[da]=Generelt
-Name[de]=Allgemein
-Name[el]=Γενικά
-Name[en_GB]=General
-Name[es]=General
-Name[et]=Üldine
-Name[eu]=Orokorra
-Name[fi]=Yleiset
-Name[fr]=Général
-Name[gl]=Xerais
-Name[he]=כללי
-Name[hi]=साधारण
-Name[hu]=Általános
-Name[ia]=General
-Name[id]=Umum
-Name[is]=Almennt
-Name[it]=Generale
-Name[ja]=全般
-Name[ko]=일반
-Name[lt]=Bendrosios
-Name[lv]=Vispārējs
-Name[ml]=പൊതുവായതു്
-Name[my]=ယေဘုယျ
-Name[nb]=Generelt
-Name[nl]=Algemeen
-Name[nn]=Generelt
-Name[pa]=ਆਮ
-Name[pl]=Ogólne
-Name[pt]=Geral
-Name[pt_BR]=Geral
-Name[ro]=Generale
-Name[ru]=Основное
-Name[sk]=Všeobecné
-Name[sl]=Splošno
-Name[sr]=Опште
-Name[sr@ijekavian]=Опште
-Name[sr@ijekavianlatin]=Opšte
-Name[sr@latin]=Opšte
-Name[sv]=Allmänt
-Name[ta]=பொது
-Name[tr]=Genel
-Name[uk]=Загальне
-Name[vi]=Chung
-Name[x-test]=xxGeneralxx
-Name[zh_CN]=常规
-Name[zh_TW]=一般
-Comment=Configure general file manager settings
-Comment[ar]=اضبط إعدادات مدير الملفّات العامّة
-Comment[ast]=Configura los axustes xenerales del xestor de ficheros
-Comment[az]=Fayl menecerinin ayarları
-Comment[ca]=Configura les opcions generals del gestor de fitxers
-Comment[ca@valencia]=Configura les opcions generals del gestor de fitxers
-Comment[cs]=Obecné nastavení správce souborů
-Comment[da]=Konfiguration af generelle indstillinger for filhåndtering
-Comment[de]=Allgemeine Einstellungen an der Dateiverwaltung vornehmen
-Comment[el]=Διαμόρφωση γενικών ρυθμίσεων διαχείρισης αρχείων
-Comment[en_GB]=Configure general file manager settings
-Comment[es]=Configurar las preferencias generales del gestor de archivos
-Comment[et]=Failihalduri üldine seadistamine
-Comment[eu]=Konfiguratu fitxategi-kudeatzailearen ezarpen orokorrak
-Comment[fi]=Tiedostonhallinnan yleisasetukset
-Comment[fr]=Configuration des paramètres généraux du gestionnaire de fichiers
-Comment[gl]=Configurar opcións xerais de xestores de ficheiros.
-Comment[he]=תצורת ההגדרות הכלליות של מנהל הקבצים
-Comment[hi]=साधारण फ़ाइल प्रबंधक सेटिंग्स विन्यस्त करें
-Comment[hu]=A fájlkezelő általános beállításainak módosítása
-Comment[ia]=Configura preferentias del gerente general de file
-Comment[id]=Konfigurasikan pengaturan pengelola file umum
-Comment[is]=Sýsla með almennar stillingar skráastjóra
-Comment[it]=Configura le impostazioni generali del gestore dei file
-Comment[ja]=ファイルマネージャの全般的な設定を行います
-Comment[ko]=일반 파일 관리자 설정 구성
-Comment[lt]=Konfigūruoti bendras failų tvarkytuvės nuostatas
-Comment[lv]=Konfigurēt vispārējā datņu pārvaldnieka iestatījumus
-Comment[ml]=ഫയൽ മാനേജറിന്റെ പൊതുവായ സജ്ജീകരണങ്ങള്‍ ക്രമീകരിയ്ക്കുക
-Comment[my]=ဖိုင်လ်မန်နေဂျာ ယေဘုယျဆက်တင် ပြင်ဆင်မည်
-Comment[nb]=Sett opp generelle innstillinger for filbehandleren
-Comment[nl]=Algemene bestandsbeheerderinstellingen configureren
-Comment[nn]=Set opp generelle innstillingar for filhandsamaren
-Comment[pa]=ਆਮ ਫਾਇਲ ਮੈਨੇਜਰ ਸੈਟਿੰਗ ਸੰਰਚਨਾ
-Comment[pl]=Ustawienia ogólne zarządzania plikami
-Comment[pt]=Configurar as definições gerais do gestor de ficheiros
-Comment[pt_BR]=Configura as opções gerais do gerenciador de arquivos
-Comment[ro]=Configurează opțiuni generale ale gestionarului de fișiere
-Comment[ru]=Настройка диспетчера файлов
-Comment[sk]=Všeobecné nastavenie správcu súborov
-Comment[sl]=Splošne nastavitve upravljalnika datotek
-Comment[sr]=Подешавање општих поставки менаџера фајлова
-Comment[sr@ijekavian]=Подешавање општих поставки менаџера фајлова
-Comment[sr@ijekavianlatin]=Podešavanje opštih postavki menadžera fajlova
-Comment[sr@latin]=Podešavanje opštih postavki menadžera fajlova
-Comment[sv]=Anpassa filhanterarens allmänna inställningar
-Comment[ta]=பொதுவான கோப்பு மேலாளி அமைப்புகளை அமையுங்கள்
-Comment[tr]=Genel dosya yöneticisi ayarlarını yapılandır
-Comment[uk]=Налаштувати загальні параметри менеджера файлів
-Comment[vi]=Cấu hình các thiết lập chung cho trình quản lí tệp
-Comment[x-test]=xxConfigure general file manager settingsxx
-Comment[zh_CN]=配置常规文件管理器设置
-Comment[zh_TW]=設定一般檔案管理員
-X-KDE-Keywords=file manager
-X-KDE-Keywords[ar]=مدير ملفّات ملفات الملفّات الملفات
-X-KDE-Keywords[ast]=xestor de ficheros
-X-KDE-Keywords[az]=fayl meneceri
-X-KDE-Keywords[ca]=gestor de fitxers
-X-KDE-Keywords[ca@valencia]=gestor de fitxers
-X-KDE-Keywords[cs]=správce souborů
-X-KDE-Keywords[da]=filhåndtering
-X-KDE-Keywords[de]=Dateiverwaltung
-X-KDE-Keywords[el]=διαχειριστής αρχείων
-X-KDE-Keywords[en_GB]=file manager
-X-KDE-Keywords[es]=gestor de archivos
-X-KDE-Keywords[et]=failihaldur
-X-KDE-Keywords[eu]=Fitxategi-kudeatzailea
-X-KDE-Keywords[fi]=tiedostonhallinta
-X-KDE-Keywords[fr]=gestionnaire de fichiers
-X-KDE-Keywords[gl]=xestor de ficheiros
-X-KDE-Keywords[he]=מנהל קבצים
-X-KDE-Keywords[hi]=फ़ाइल प्रबंधक
-X-KDE-Keywords[hu]=fájlkezelő
-X-KDE-Keywords[ia]=gerente de file
-X-KDE-Keywords[id]=pengelola file
-X-KDE-Keywords[is]=skráastjóri
-X-KDE-Keywords[it]=gestore dei file
-X-KDE-Keywords[ja]=ファイルマネージャ
-X-KDE-Keywords[ko]=파일 관리자
-X-KDE-Keywords[lt]=failų tvarkytuvė
-X-KDE-Keywords[lv]=datņu pārvaldnieks
-X-KDE-Keywords[ml]=ഫയൽ മാനേജർ
-X-KDE-Keywords[my]=ဖိုင်လ်မန်နေဂျာ
-X-KDE-Keywords[nb]=filbehandler
-X-KDE-Keywords[nl]=bestandsbeheerder
-X-KDE-Keywords[nn]=filhandsamar
-X-KDE-Keywords[pa]=ਫਾਇਲ ਮੈਨੇਜਰ
-X-KDE-Keywords[pl]=zarządzanie plikami
-X-KDE-Keywords[pt]=gestor de ficheiros
-X-KDE-Keywords[pt_BR]=gerenciador de arquivos
-X-KDE-Keywords[ro]=gestionar de fișiere
-X-KDE-Keywords[ru]=диспетчер файлов
-X-KDE-Keywords[sk]=správca súborov
-X-KDE-Keywords[sl]=upravljalnik datotek
-X-KDE-Keywords[sr]=file manager,менаџер фајлова
-X-KDE-Keywords[sr@ijekavian]=file manager,менаџер фајлова
-X-KDE-Keywords[sr@ijekavianlatin]=file manager,menadžer fajlova
-X-KDE-Keywords[sr@latin]=file manager,menadžer fajlova
-X-KDE-Keywords[sv]=filhanterare
-X-KDE-Keywords[ta]=file manager,கோப்பு மேலாளர், கோப்பு நிர்வாகி, கோப்பு உலாவி
-X-KDE-Keywords[tr]=dosya yöneticisi
-X-KDE-Keywords[uk]=менеджер,керування,файл,файли
-X-KDE-Keywords[vi]=file manager,trình quản lí tệp
-X-KDE-Keywords[x-test]=xxfile managerxx
-X-KDE-Keywords[zh_CN]=文件管理器
-X-KDE-Keywords[zh_TW]=檔案管理員
diff --git a/src/settings/kcm/kcmdolphingeneral.json b/src/settings/kcm/kcmdolphingeneral.json
new file mode 100644 (file)
index 0000000..cfe09e7
--- /dev/null
@@ -0,0 +1,94 @@
+{
+    "KPlugin": {
+        "Description": "Configure general file manager settings",
+        "Description[ar]": "اضبط إعدادات مدير الملفّات العامّة",
+        "Description[ca@valencia]": "Configura les opcions generals del gestor de fitxers",
+        "Description[ca]": "Configura les opcions generals del gestor de fitxers",
+        "Description[es]": "Configurar las preferencias generales del gestor de archivos",
+        "Description[fr]": "Configurer les paramètres généraux pour le gestionnaire de fichiers",
+        "Description[it]": "Configura le impostazioni generali del gestore dei file",
+        "Description[nl]": "Algemene bestandsbeheerderinstellingen configureren",
+        "Description[ro]": "Configurează opțiuni generale ale gestionarului de fișiere",
+        "Description[sl]": "Postavi splošne nastavitve upravljalnika datotek",
+        "Description[sv]": "Anpassa filhanterarens allmänna inställningar",
+        "Description[ta]": "பொதுவான கோப்பு மேலாளி அமைப்புகளை அமையுங்கள்",
+        "Description[tr]": "Genel dosya yöneticisi ayarlarını yapılandır",
+        "Description[uk]": "Налаштувати загальні параметри менеджера файлів",
+        "Description[x-test]": "xxConfigure general file manager settingsxx",
+        "Description[zh_CN]": "配置文件管理器常规设置",
+        "Icon": "system-file-manager",
+        "Name": "General",
+        "Name[ar]": "عامّ",
+        "Name[ca@valencia]": "General",
+        "Name[ca]": "General",
+        "Name[es]": "General",
+        "Name[fr]": "Général",
+        "Name[it]": "Generale",
+        "Name[nl]": "Algemeen",
+        "Name[ro]": "Generale",
+        "Name[sl]": "Splošno",
+        "Name[sv]": "Allmänt",
+        "Name[ta]": "பொதுவானவை",
+        "Name[tr]": "Genel",
+        "Name[uk]": "Загальне",
+        "Name[x-test]": "xxGeneralxx",
+        "Name[zh_CN]": "常规",
+        "ServiceTypes": [
+            "KCModule"
+        ]
+    },
+    "X-DocPath": "dolphin/configuring-dolphin.html#preferences-dialog",
+    "X-KDE-Keywords": "file manager",
+    "X-KDE-Keywords[ar]": "مدير ملفّات ملفات الملفّات الملفات",
+    "X-KDE-Keywords[ast]": "xestor de ficheros",
+    "X-KDE-Keywords[az]": "fayl meneceri",
+    "X-KDE-Keywords[ca@valencia]": "gestor de fitxers",
+    "X-KDE-Keywords[ca]": "gestor de fitxers",
+    "X-KDE-Keywords[cs]": "správce souborů",
+    "X-KDE-Keywords[da]": "filhåndtering",
+    "X-KDE-Keywords[de]": "Dateiverwaltung",
+    "X-KDE-Keywords[el]": "διαχειριστής αρχείων",
+    "X-KDE-Keywords[en_GB]": "file manager",
+    "X-KDE-Keywords[es]": "gestor de archivos",
+    "X-KDE-Keywords[et]": "failihaldur",
+    "X-KDE-Keywords[eu]": "Fitxategi-kudeatzailea",
+    "X-KDE-Keywords[fi]": "tiedostonhallinta",
+    "X-KDE-Keywords[fr]": "gestionnaire de fichiers",
+    "X-KDE-Keywords[gl]": "xestor de ficheiros",
+    "X-KDE-Keywords[he]": "מנהל קבצים",
+    "X-KDE-Keywords[hi]": "फ़ाइल प्रबंधक",
+    "X-KDE-Keywords[hu]": "fájlkezelő",
+    "X-KDE-Keywords[ia]": "gerente de file",
+    "X-KDE-Keywords[id]": "pengelola file",
+    "X-KDE-Keywords[is]": "skráastjóri",
+    "X-KDE-Keywords[it]": "gestore dei file",
+    "X-KDE-Keywords[ja]": "ファイルマネージャ",
+    "X-KDE-Keywords[ko]": "파일 관리자",
+    "X-KDE-Keywords[lt]": "failų tvarkytuvė",
+    "X-KDE-Keywords[lv]": "datņu pārvaldnieks",
+    "X-KDE-Keywords[ml]": "ഫയൽ മാനേജർ",
+    "X-KDE-Keywords[my]": "ဖိုင်လ်မန်နေဂျာ",
+    "X-KDE-Keywords[nb]": "filbehandler",
+    "X-KDE-Keywords[nl]": "bestandsbeheerder",
+    "X-KDE-Keywords[nn]": "filhandsamar",
+    "X-KDE-Keywords[pa]": "ਫਾਇਲ ਮੈਨੇਜਰ",
+    "X-KDE-Keywords[pl]": "zarządzanie plikami",
+    "X-KDE-Keywords[pt]": "gestor de ficheiros",
+    "X-KDE-Keywords[pt_BR]": "gerenciador de arquivos",
+    "X-KDE-Keywords[ro]": "gestionar de fișiere",
+    "X-KDE-Keywords[ru]": "диспетчер файлов",
+    "X-KDE-Keywords[sk]": "správca súborov",
+    "X-KDE-Keywords[sl]": "upravljalnik datotek",
+    "X-KDE-Keywords[sr@ijekavian]": "file manager,менаџер фајлова",
+    "X-KDE-Keywords[sr@ijekavianlatin]": "file manager,menadžer fajlova",
+    "X-KDE-Keywords[sr@latin]": "file manager,menadžer fajlova",
+    "X-KDE-Keywords[sr]": "file manager,менаџер фајлова",
+    "X-KDE-Keywords[sv]": "filhanterare",
+    "X-KDE-Keywords[ta]": "file manager,கோப்பு மேலாளர், கோப்பு நிர்வாகி, கோப்பு உலாவி",
+    "X-KDE-Keywords[tr]": "dosya yöneticisi",
+    "X-KDE-Keywords[uk]": "менеджер,керування,файл,файли",
+    "X-KDE-Keywords[vi]": "file manager,trình quản lí tệp",
+    "X-KDE-Keywords[x-test]": "xxfile managerxx",
+    "X-KDE-Keywords[zh_CN]": "文件管理器",
+    "X-KDE-Keywords[zh_TW]": "檔案管理員"
+}
diff --git a/src/settings/kcm/kcmdolphinnavigation.desktop b/src/settings/kcm/kcmdolphinnavigation.desktop
deleted file mode 100644 (file)
index eb33186..0000000
+++ /dev/null
@@ -1,276 +0,0 @@
-Name=Dolphin Navigation
-Name[ar]=التّنقّل في دولفين
-Name[ast]=Navegación de Dolphin
-Name[az]=Dolphində hərəkət
-Name[ca]=Navegació del Dolphin
-Name[ca@valencia]=Navegació de Dolphin
-Name[cs]=Navigace Dolphinu
-Name[da]=Dolphin-navigation
-Name[de]=Dolphin-Navigation
-Name[el]=Dolphin Πλοήγηση
-Name[en_GB]=Dolphin Navigation
-Name[es]=Navegación de Dolphin
-Name[et]=Dolphini liikumine
-Name[eu]=Dolphin nabigatzea
-Name[fi]=Dolphin – selaus
-Name[fr]=Navigation avec Dolphin
-Name[gl]=Navegación de Dolphin
-Name[he]=ניווט ב־Dolphin
-Name[hi]=डॉल्फ़िन संचालन
-Name[hu]=Dolphin: Navigáció
-Name[ia]=Navigation de Dolphin
-Name[id]=Navigasi Dolphin
-Name[is]=Flakk í Dolphin
-Name[it]=Navigazione di Dolphin
-Name[ja]=Dolphin ナビゲーション
-Name[ko]=Dolphin 탐색
-Name[lt]=Dolphin naršymas
-Name[lv]=Dolphin navigācija
-Name[ml]=ഡോള്‍ഫിന്‍ നാവിഗേഷന്‍
-Name[my]=လင်းပိုင် လမ်းညွှန်
-Name[nb]=Navigasjon i Dolphin
-Name[nl]=Dolphin-navigatie
-Name[nn]=Navigasjon i Dolphin
-Name[pa]=ਡਾਲਫਿਨ ਨੇਵੀਗੇਸ਼ਨ
-Name[pl]=Nawigacja Dolphina
-Name[pt]=Navegação do Dolphin
-Name[pt_BR]=Navegação do Dolphin
-Name[ro]=Dolphin – Navigare
-Name[ru]=Навигация в Dolphin
-Name[se]=Dolphinnavigašuvdna
-Name[sk]=Navigácia Dolphinu
-Name[sl]=Dolphin - krmarjenje
-Name[sr]=Делфинова навигација
-Name[sr@ijekavian]=Делфинова навигација
-Name[sr@ijekavianlatin]=Dolphinova navigacija
-Name[sr@latin]=Dolphinova navigacija
-Name[sv]=Dolphin navigering
-Name[ta]=டால்பின் உலாவல்
-Name[tr]=Dolphin Dolaşımı
-Name[uk]=«Навігація» Dolphin
-Name[vi]=Điều hướng Dolphin
-Name[x-test]=xxDolphin Navigationxx
-Name[zh_CN]=Dolphin 导航
-Name[zh_TW]=Dolphin 導覽
-Comment=This service allows configuration of the Dolphin navigation.
-Comment[ar]=تسمح هذه الخدمة بضبط التّنقّل في دولفين.
-Comment[ast]=Esti serviciu permite la configuración de la navegación del Dolphin.
-Comment[az]=Bu xidmət Dolphin üzrə hərəkəti tənzimləməyə imkan verir.
-Comment[ca]=Aquest servei permet la configuració de la navegació del Dolphin.
-Comment[ca@valencia]=Este servei permet la configuració de la navegació de Dolphin.
-Comment[cs]=Tato služba umožňuje nastavení navigace v Dolphinu.
-Comment[da]=Denne tjeneste muliggør konfiguration af Dolphin-navigation.
-Comment[de]=Mit diesem Dienst kann die Navigation für Dolphin eingerichtet werden.
-Comment[el]=Η υπηρεσία αυτή επιτρέπει τη διαμόρφωση της πλοήγησης του Dolphin
-Comment[en_GB]=This service allows configuration of the Dolphin navigation.
-Comment[es]=Este servicio permite configurar la navegación de Dolphin.
-Comment[et]=See teenus võimaldab seadistada Dolphinis liikumist.
-Comment[eu]=Zerbitzu honek Dolphinen nabigatzea konfiguratzeko balio du.
-Comment[fi]=Tällä palvelulla voi muokata Dolphinin selausasetuksia.
-Comment[fr]=Ce service permet de configurer la navigation avec Dolphin.
-Comment[gl]=Este servizo permite configurar a navegación de Dolphin.
-Comment[he]=שרות זה מאפשר את ההגדרה של הניווט ב־Dolphin.
-Comment[hi]=यह सेवा डॉल्फिन संचालन के विन्यास की अनुमति देती है।
-Comment[hu]=Ez a szolgáltatás lehetővé teszi a Dolphin navigálásának beállítását.
-Comment[ia]=Iste servicio permitte le configuration del navigation de Dolphin.
-Comment[id]=Layanan ini memungkinkan konfigurasi navigasi Dolphin.
-Comment[is]=Þessi þjónusta leyfir stillingar á flakkstýringum Dolphin.
-Comment[it]=Questo servizio permette di configurare la navigazione con Dolphin.
-Comment[ja]=Dolphin でのナビゲーションを設定します
-Comment[ko]=이 서비스를 통해 Dolphin 탐색을 설정할 수 있습니다.
-Comment[lt]=Ši paslauga leidžia Dolphin naršymo konfigūravimą.
-Comment[lv]=Šis serviss ļauj konfigurēt Dolphin navigāciju.
-Comment[ml]=ഡോള്‍ഫിന്‍ നാവിഗേഷൻ ക്രമീകരിയ്ക്കാന്‍ ഈ സേവനം അനുവദിയ്ക്കുന്നു.
-Comment[my]=ဤဝန်ဆောင်မှုက လင်းပိုင် လမ်းညွှန်ကို ပြင်ဆင်နိုင်စေသည်။
-Comment[nb]=Med denne tjenesten kan du sette opp navigasjon for Dolphin.
-Comment[nl]=Met deze dienst kunt u Dolphin-navigatie configureren.
-Comment[nn]=Denne tenesta lèt deg setja opp navigasjonen for Dolphin.
-Comment[pa]=ਇਹ ਸਰਵਿਸ ਡਾਲਫਿਨ ਨੇਵੀਗੇਸ਼ਨ ਦੀ ਸੰਰਚਨਾ ਵਾਸਤੇ ਹੈ।
-Comment[pl]=Ta usługa umożliwia ustawienie nawigacji w Dolphinie.
-Comment[pt]=Este serviço permite a configuração da navegação do Dolphin.
-Comment[pt_BR]=Este serviço permite configurar a navegação do Dolphin.
-Comment[ro]=Acest serviciu permite configurarea navigării Dolphin.
-Comment[ru]=Эта служба позволяет настраивать навигацию в Dolphin
-Comment[sk]=Táto služba umožňuje nastavenie navigácie v Dolphine.
-Comment[sl]=Ta storitev omogoča spreminjanje nastavitev krmarjenja programa Dolphin.
-Comment[sr]=Овај сервис омогућава подешавање навигације у Делфину.
-Comment[sr@ijekavian]=Овај сервис омогућава подешавање навигације у Делфину.
-Comment[sr@ijekavianlatin]=Ovaj servis omogućava podešavanje navigacije u Dolphinu.
-Comment[sr@latin]=Ovaj servis omogućava podešavanje navigacije u Dolphinu.
-Comment[sv]=Den här tjänsten låter dig anpassa navigering i Dolphin.
-Comment[ta]=டால்பினின் உலாவல் அமைப்புகளை அமைக்க இந்த சேவை உதவும்.
-Comment[tr]=Bu servis Dolphin dolaşımını yapılandırmanızı sağlar.
-Comment[uk]=Ця служба надасть змогу налаштувати навігацію у Dolphin.
-Comment[vi]=Dịch vụ này cho phép cấu hình điều hướng Dolphin.
-Comment[x-test]=xxThis service allows configuration of the Dolphin navigation.xx
-Comment[zh_CN]=此服务用于配置 Dolphin 的导航功能。
-Comment[zh_TW]=此服務允許設定 Dolphin 的導覽。
-
-[Desktop Entry]
-Icon=preferences-desktop-navigation
-Type=Service
-X-KDE-ServiceTypes=KCModule
-
-X-KDE-Library=dolphin/kcms/kcm_dolphinnavigation
-X-DocPath=dolphin/configuring-dolphin.html#preferences-dialog-navigation
-Name=Navigation
-Name[ar]=التّنقّل
-Name[ast]=Navegación
-Name[az]=Naviqasiya
-Name[ca]=Navegació
-Name[ca@valencia]=Navegació
-Name[cs]=Navigace
-Name[da]=Navigation
-Name[de]=Navigation
-Name[el]=Πλοήγηση
-Name[en_GB]=Navigation
-Name[es]=Navegación
-Name[et]=Liikumine
-Name[eu]=Nabigatzea
-Name[fi]=Selaus
-Name[fr]=Navigation
-Name[gl]=Navegación
-Name[he]=ניווט
-Name[hi]=संचालन
-Name[hu]=Navigálás
-Name[ia]=Navigation
-Name[id]=Navigasi
-Name[is]=Flakk
-Name[it]=Navigazione
-Name[ja]=ナビゲーション
-Name[ko]=탐색
-Name[lt]=Naršymas
-Name[lv]=Navigācija
-Name[ml]=നാവിഗേഷന്‍
-Name[my]=လမ်းညွှန်
-Name[nb]=Navigasjon
-Name[nl]=Navigatie
-Name[nn]=Navigasjon
-Name[pa]=ਨੇਵੀਗੇਸ਼ਨ
-Name[pl]=Nawigacja
-Name[pt]=Navegação
-Name[pt_BR]=Navegação
-Name[ro]=Navigare
-Name[ru]=Навигация
-Name[se]=Navigašuvdna
-Name[sk]=Navigácia
-Name[sl]=Krmarjenje
-Name[sr]=Навигација
-Name[sr@ijekavian]=Навигација
-Name[sr@ijekavianlatin]=Navigacija
-Name[sr@latin]=Navigacija
-Name[sv]=Navigering
-Name[ta]=உலாவல்
-Name[tr]=Dolaşım
-Name[uk]=Навігація
-Name[vi]=Điều hướng
-Name[x-test]=xxNavigationxx
-Name[zh_CN]=导航
-Name[zh_TW]=導覽
-Comment=Configure file manager navigation
-Comment[ar]=اضبط التّنقّل في مدير الملفّات
-Comment[ast]=Configura la navegación del xestor de ficheros
-Comment[az]=Fayl meneceri naviqasiyasını tənzimləmək
-Comment[ca]=Configura la navegació del gestor de fitxers
-Comment[ca@valencia]=Configura la navegació del gestor de fitxers
-Comment[cs]=Nastavení navigace správce souborů
-Comment[da]=Indstil navigation i filhåndtering
-Comment[de]=Einstellungen zur Navigation mit der Dateiverwaltung
-Comment[el]=Διαμόρφωση πλοήγησης του διαχειριστή αρχείων
-Comment[en_GB]=Configure file manager navigation
-Comment[es]=Configurar la navegación del gestor de archivos
-Comment[et]=Failihalduris liikumise seadistamine
-Comment[eu]=Konfiguratu fitxategi-kudeatzailearen nabigatzea
-Comment[fi]=Tiedostonhallinnan selausasetukset
-Comment[fr]=Configuration la navigation avec le gestionnaire de fichiers
-Comment[gl]=Configurar a navegación do xestor de ficheiros.
-Comment[he]=הגדרת הניווט במנהל הקבצים
-Comment[hi]=फ़ाइल प्रबंधक संचालन विन्यस्त करें
-Comment[hu]=A fájlkezelő navigálásának beállítása
-Comment[ia]=Configura navigation del gerente de file
-Comment[id]=Konfigurasikan navigasi pengelola file
-Comment[is]=Stilla flakkstýringu í skráastjóra
-Comment[it]=Configura la navigazione col gestore dei file
-Comment[ja]=ファイルマネージャでのナビゲーションを設定します
-Comment[ko]=파일 관리자 탐색 설정
-Comment[lt]=Konfigūruoti failų tvarkytuvės naršymą
-Comment[lv]=Konfigurēt datņu pārvaldnieka navigāciju
-Comment[ml]=ഫയല്‍ മാനേജർ നാവിഗേഷൻ ക്രമീകരിയ്ക്കുക
-Comment[my]=ဖိုင်လ်မန်နေဂျာ လမ်းညွှန် ပြင်ဆင်မည်
-Comment[nb]=Sett opp navigasjon i filbehandleren
-Comment[nl]=Bestandsbeheerdernavigatie configureren
-Comment[nn]=Set opp navigasjonen i filhandsamaren
-Comment[pa]=ਫਾਇਲ ਮੈਨੇਜਰ ਨੇਵੀਗੇਸ਼ਨ ਸੰਰਚਨਾ
-Comment[pl]=Ustawienia nawigacji w zarządzaniu plikami
-Comment[pt]=Configurar a navegação do gestor de ficheiros
-Comment[pt_BR]=Configura a navegação do gerenciador de arquivos
-Comment[ro]=Configurează navigarea cu gestionarul de fișiere
-Comment[ru]=Настройка навигации в диспетчере файлов
-Comment[se]=Heivet fiilagieđahallannavigašuvdna
-Comment[sk]=Nastavenie navigácie správcu súborov
-Comment[sl]=Nastavitve krmarjenja v upravljalniku datotek
-Comment[sr]=Подешавање навигације у менаџеру фајлова
-Comment[sr@ijekavian]=Подешавање навигације у менаџеру фајлова
-Comment[sr@ijekavianlatin]=Podešavanje navigacije u menadžeru fajlova
-Comment[sr@latin]=Podešavanje navigacije u menadžeru fajlova
-Comment[sv]=Anpassa filhanterarens navigering
-Comment[ta]=கோப்பு உலாவியில் உலாவலை அமையுங்கள்
-Comment[tr]=Dosya yöneticisi gezintisini yapılandır
-Comment[uk]=Налаштувати навігацію у менеджері файлів
-Comment[vi]=Cấu hình điều hướng trình quản lí tệp
-Comment[x-test]=xxConfigure file manager navigationxx
-Comment[zh_CN]=配置文件管理器导航功能
-Comment[zh_TW]=設定檔案管理員導覽
-X-KDE-Keywords=file manager
-X-KDE-Keywords[ar]=مدير ملفّات ملفات الملفّات الملفات
-X-KDE-Keywords[ast]=xestor de ficheros
-X-KDE-Keywords[az]=fayl meneceri
-X-KDE-Keywords[ca]=gestor de fitxers
-X-KDE-Keywords[ca@valencia]=gestor de fitxers
-X-KDE-Keywords[cs]=správce souborů
-X-KDE-Keywords[da]=filhåndtering
-X-KDE-Keywords[de]=Dateiverwaltung
-X-KDE-Keywords[el]=διαχειριστής αρχείων
-X-KDE-Keywords[en_GB]=file manager
-X-KDE-Keywords[es]=gestor de archivos
-X-KDE-Keywords[et]=failihaldur
-X-KDE-Keywords[eu]=Fitxategi-kudeatzailea
-X-KDE-Keywords[fi]=tiedostonhallinta
-X-KDE-Keywords[fr]=gestionnaire de fichiers
-X-KDE-Keywords[gl]=xestor de ficheiros
-X-KDE-Keywords[he]=מנהל קבצים
-X-KDE-Keywords[hi]=फ़ाइल प्रबंधक
-X-KDE-Keywords[hu]=fájlkezelő
-X-KDE-Keywords[ia]=gerente de file
-X-KDE-Keywords[id]=pengelola file
-X-KDE-Keywords[is]=skráastjóri
-X-KDE-Keywords[it]=gestore dei file
-X-KDE-Keywords[ja]=ファイルマネージャ
-X-KDE-Keywords[ko]=파일 관리자
-X-KDE-Keywords[lt]=failų tvarkytuvė
-X-KDE-Keywords[lv]=datņu pārvaldnieks
-X-KDE-Keywords[ml]=ഫയൽ മാനേജർ
-X-KDE-Keywords[my]=ဖိုင်လ်မန်နေဂျာ
-X-KDE-Keywords[nb]=filbehandler
-X-KDE-Keywords[nl]=bestandsbeheerder
-X-KDE-Keywords[nn]=filhandsamar
-X-KDE-Keywords[pa]=ਫਾਇਲ ਮੈਨੇਜਰ
-X-KDE-Keywords[pl]=zarządzanie plikami
-X-KDE-Keywords[pt]=gestor de ficheiros
-X-KDE-Keywords[pt_BR]=gerenciador de arquivos
-X-KDE-Keywords[ro]=gestionar de fișiere
-X-KDE-Keywords[ru]=диспетчер файлов
-X-KDE-Keywords[sk]=správca súborov
-X-KDE-Keywords[sl]=upravljalnik datotek
-X-KDE-Keywords[sr]=file manager,менаџер фајлова
-X-KDE-Keywords[sr@ijekavian]=file manager,менаџер фајлова
-X-KDE-Keywords[sr@ijekavianlatin]=file manager,menadžer fajlova
-X-KDE-Keywords[sr@latin]=file manager,menadžer fajlova
-X-KDE-Keywords[sv]=filhanterare
-X-KDE-Keywords[ta]=file manager,கோப்பு மேலாளர், கோப்பு நிர்வாகி, கோப்பு உலாவி
-X-KDE-Keywords[tr]=dosya yöneticisi
-X-KDE-Keywords[uk]=менеджер,керування,файл,файли
-X-KDE-Keywords[vi]=file manager,trình quản lí tệp
-X-KDE-Keywords[x-test]=xxfile managerxx
-X-KDE-Keywords[zh_CN]=文件管理器
-X-KDE-Keywords[zh_TW]=檔案管理員
diff --git a/src/settings/kcm/kcmdolphinnavigation.json b/src/settings/kcm/kcmdolphinnavigation.json
new file mode 100644 (file)
index 0000000..db11a5c
--- /dev/null
@@ -0,0 +1,132 @@
+{
+    "KPlugin": {
+        "Description": "Configure file manager navigation",
+        "Description[ar]": "اضبط التّنقّل في مدير الملفّات",
+        "Description[ca@valencia]": "Configura la navegació del gestor de fitxers",
+        "Description[ca]": "Configura la navegació del gestor de fitxers",
+        "Description[es]": "Configurar la navegación del gestor de archivos",
+        "Description[fr]": "Configurer la navigation dans le gestionnaire de fichiers",
+        "Description[it]": "Configura la navigazione col gestore dei file",
+        "Description[nl]": "Bestandsbeheerdernavigatie configureren",
+        "Description[ro]": "Configurează navigarea cu gestionarul de fișiere",
+        "Description[sl]": "Postavi krmarjenje v upravljalniku datotek",
+        "Description[sv]": "Anpassa filhanterarens navigering",
+        "Description[ta]": "கோப்பு உலாவியில் உலாவலை அமையுங்கள்",
+        "Description[tr]": "Dosya yöneticisi dolaşımını yapılandır",
+        "Description[uk]": "Налаштувати навігацію у менеджері файлів",
+        "Description[x-test]": "xxConfigure file manager navigationxx",
+        "Description[zh_CN]": "配置文件管理器导航功能",
+        "Icon": "preferences-desktop-navigation",
+        "Name": "Navigation",
+        "Name[ar]": "التّنقّل",
+        "Name[ast]": "Navegación",
+        "Name[az]": "Naviqasiya",
+        "Name[ca@valencia]": "Navegació",
+        "Name[ca]": "Navegació",
+        "Name[cs]": "Navigace",
+        "Name[da]": "Navigation",
+        "Name[de]": "Navigation",
+        "Name[el]": "Πλοήγηση",
+        "Name[en_GB]": "Navigation",
+        "Name[es]": "Navegación",
+        "Name[et]": "Liikumine",
+        "Name[eu]": "Nabigatzea",
+        "Name[fi]": "Selaus",
+        "Name[fr]": "Navigation",
+        "Name[gl]": "Navegación",
+        "Name[he]": "ניווט",
+        "Name[hi]": "संचालन",
+        "Name[hu]": "Navigálás",
+        "Name[ia]": "Navigation",
+        "Name[id]": "Navigasi",
+        "Name[is]": "Flakk",
+        "Name[it]": "Navigazione",
+        "Name[ja]": "ナビゲーション",
+        "Name[ko]": "탐색",
+        "Name[lt]": "Naršymas",
+        "Name[lv]": "Navigācija",
+        "Name[ml]": "നാവിഗേഷന്‍",
+        "Name[my]": "လမ်းညွှန်",
+        "Name[nb]": "Navigasjon",
+        "Name[nl]": "Navigatie",
+        "Name[nn]": "Navigasjon",
+        "Name[pa]": "ਨੇਵੀਗੇਸ਼ਨ",
+        "Name[pl]": "Nawigacja",
+        "Name[pt]": "Navegação",
+        "Name[pt_BR]": "Navegação",
+        "Name[ro]": "Navigare",
+        "Name[ru]": "Навигация",
+        "Name[se]": "Navigašuvdna",
+        "Name[sk]": "Navigácia",
+        "Name[sl]": "Krmarjenje",
+        "Name[sr@ijekavian]": "Навигација",
+        "Name[sr@ijekavianlatin]": "Navigacija",
+        "Name[sr@latin]": "Navigacija",
+        "Name[sr]": "Навигација",
+        "Name[sv]": "Navigering",
+        "Name[ta]": "உலாவல்",
+        "Name[tr]": "Dolaşım",
+        "Name[uk]": "Навігація",
+        "Name[vi]": "Điều hướng",
+        "Name[x-test]": "xxNavigationxx",
+        "Name[zh_CN]": "导航",
+        "Name[zh_TW]": "導覽",
+        "ServiceTypes": [
+            "KCModule"
+        ]
+    },
+    "X-DocPath": "dolphin/configuring-dolphin.html#preferences-dialog-navigation",
+    "X-KDE-Keywords": "file manager",
+    "X-KDE-Keywords[ar]": "مدير ملفّات ملفات الملفّات الملفات",
+    "X-KDE-Keywords[ast]": "xestor de ficheros",
+    "X-KDE-Keywords[az]": "fayl meneceri",
+    "X-KDE-Keywords[ca@valencia]": "gestor de fitxers",
+    "X-KDE-Keywords[ca]": "gestor de fitxers",
+    "X-KDE-Keywords[cs]": "správce souborů",
+    "X-KDE-Keywords[da]": "filhåndtering",
+    "X-KDE-Keywords[de]": "Dateiverwaltung",
+    "X-KDE-Keywords[el]": "διαχειριστής αρχείων",
+    "X-KDE-Keywords[en_GB]": "file manager",
+    "X-KDE-Keywords[es]": "gestor de archivos",
+    "X-KDE-Keywords[et]": "failihaldur",
+    "X-KDE-Keywords[eu]": "Fitxategi-kudeatzailea",
+    "X-KDE-Keywords[fi]": "tiedostonhallinta",
+    "X-KDE-Keywords[fr]": "gestionnaire de fichiers",
+    "X-KDE-Keywords[gl]": "xestor de ficheiros",
+    "X-KDE-Keywords[he]": "מנהל קבצים",
+    "X-KDE-Keywords[hi]": "फ़ाइल प्रबंधक",
+    "X-KDE-Keywords[hu]": "fájlkezelő",
+    "X-KDE-Keywords[ia]": "gerente de file",
+    "X-KDE-Keywords[id]": "pengelola file",
+    "X-KDE-Keywords[is]": "skráastjóri",
+    "X-KDE-Keywords[it]": "gestore dei file",
+    "X-KDE-Keywords[ja]": "ファイルマネージャ",
+    "X-KDE-Keywords[ko]": "파일 관리자",
+    "X-KDE-Keywords[lt]": "failų tvarkytuvė",
+    "X-KDE-Keywords[lv]": "datņu pārvaldnieks",
+    "X-KDE-Keywords[ml]": "ഫയൽ മാനേജർ",
+    "X-KDE-Keywords[my]": "ဖိုင်လ်မန်နေဂျာ",
+    "X-KDE-Keywords[nb]": "filbehandler",
+    "X-KDE-Keywords[nl]": "bestandsbeheerder",
+    "X-KDE-Keywords[nn]": "filhandsamar",
+    "X-KDE-Keywords[pa]": "ਫਾਇਲ ਮੈਨੇਜਰ",
+    "X-KDE-Keywords[pl]": "zarządzanie plikami",
+    "X-KDE-Keywords[pt]": "gestor de ficheiros",
+    "X-KDE-Keywords[pt_BR]": "gerenciador de arquivos",
+    "X-KDE-Keywords[ro]": "gestionar de fișiere",
+    "X-KDE-Keywords[ru]": "диспетчер файлов",
+    "X-KDE-Keywords[sk]": "správca súborov",
+    "X-KDE-Keywords[sl]": "upravljalnik datotek",
+    "X-KDE-Keywords[sr@ijekavian]": "file manager,менаџер фајлова",
+    "X-KDE-Keywords[sr@ijekavianlatin]": "file manager,menadžer fajlova",
+    "X-KDE-Keywords[sr@latin]": "file manager,menadžer fajlova",
+    "X-KDE-Keywords[sr]": "file manager,менаџер фајлова",
+    "X-KDE-Keywords[sv]": "filhanterare",
+    "X-KDE-Keywords[ta]": "file manager,கோப்பு மேலாளர், கோப்பு நிர்வாகி, கோப்பு உலாவி",
+    "X-KDE-Keywords[tr]": "dosya yöneticisi",
+    "X-KDE-Keywords[uk]": "менеджер,керування,файл,файли",
+    "X-KDE-Keywords[vi]": "file manager,trình quản lí tệp",
+    "X-KDE-Keywords[x-test]": "xxfile managerxx",
+    "X-KDE-Keywords[zh_CN]": "文件管理器",
+    "X-KDE-Keywords[zh_TW]": "檔案管理員"
+}
diff --git a/src/settings/kcm/kcmdolphinviewmodes.desktop b/src/settings/kcm/kcmdolphinviewmodes.desktop
deleted file mode 100644 (file)
index 4374c84..0000000
+++ /dev/null
@@ -1,272 +0,0 @@
-Name=Dolphin View Modes
-Name[ar]=أوضاع المنظور في دولفين
-Name[ast]=Moos de vista de Dolphin
-Name[az]=Dolphin baxış rejimi
-Name[ca]=Modes de vista del Dolphin
-Name[ca@valencia]=Modes de vista de Dolphin
-Name[cs]=Režimy pohledů Dolphinu
-Name[da]=Dolphins visningstilstande
-Name[de]=Dolphin-Ansichtsmodi
-Name[el]=Dolphin Λειτουργίες Προβολής
-Name[en_GB]=Dolphin View Modes
-Name[es]=Modos de vistas de Dolphin
-Name[et]=Dolphini vaaterežiimid
-Name[eu]=Dolphin ikuspegi moduak
-Name[fi]=Dolphin – näkymät
-Name[fr]=Modes d'affichage de Dolphin
-Name[gl]=Modos de vista de Dolphin
-Name[hi]=डॉल्फ़िन दृश्य मोड
-Name[hu]=Dolphin: Nézetmódok
-Name[ia]=Modos de vista de Dolphin
-Name[id]=Mode Tampilan Dolphin
-Name[is]=Skoðunarhamir Dolphin
-Name[it]=Viste di Dolphin
-Name[ja]=Dolphin 表示モード
-Name[ko]=Dolphin 보기 모드
-Name[lt]=Dolphin rodinio veiksenos
-Name[lv]=Dolphin skata režīmi
-Name[ml]=ഡോള്‍ഫിന്‍ അവതരണദശകള്‍
-Name[my]=လင်းပိုင် မြင်ကွင်းထုံးနည်းများ
-Name[nb]=Dolphin visningsmåter
-Name[nl]=Dolphin-weergavemodussen
-Name[nn]=Dolphin-visingar
-Name[pa]=ਡਾਲਫਿਨ ਝਲਕ ਢੰਗ
-Name[pl]=Tryby widoku Dolphina
-Name[pt]=Modos de Visualização do Dolphin
-Name[pt_BR]=Modos de exibição do Dolphin
-Name[ro]=Dolphin – Regimuri de vizualizare
-Name[ru]=Режимы просмотра папок в Dolphin
-Name[se]=Dolphin čájehanmodusat
-Name[sk]=Režimy zobrazenia Dolphinu
-Name[sl]=Dolphin - načini prikaza
-Name[sr]=Делфинови режими приказа
-Name[sr@ijekavian]=Делфинови режими приказа
-Name[sr@ijekavianlatin]=Dolphinovi režimi prikaza
-Name[sr@latin]=Dolphinovi režimi prikaza
-Name[sv]=Dolphin visningslägen
-Name[ta]=டால்பின் காட்சிமுறைகள்
-Name[tr]=Dolphin Görünüm Kipleri
-Name[uk]=Режими перегляду Dolphin
-Name[vi]=Các chế độ xem Dolphin
-Name[x-test]=xxDolphin View Modesxx
-Name[zh_CN]=Dolphin 视图模式
-Name[zh_TW]=設定檔案管理員服務
-Comment=This service allows configuration of the Dolphin view modes.
-Comment[ar]=تسمح هذه الخدمة بضبط أوضاع المنظور في دولفين.
-Comment[ast]=Esti serviciu permite la configuración de los moos de vista de Dolphin.
-Comment[az]=Bu xidmət Dolphin baxış rejimini tənzimləməyə imkan verir
-Comment[ca]=Aquest servei permet la configuració dels modes de vista del Dolphin.
-Comment[ca@valencia]=Este servei permet la configuració dels modes de vista de Dolphin.
-Comment[cs]=Tato služba umožňuje nastavení režimů pohledu Dolphinu.
-Comment[da]=Denne tjeneste muliggør konfiguration af Dolphins visningstilstande.
-Comment[de]=Mit diesem Dienst können Dolphin-Ansichtsmodi eingerichtet werden.
-Comment[el]=Η υπηρεσία αυτή επιτρέπει τη διαμόρφωση των λειτουργιών προβολής του Dolphin
-Comment[en_GB]=This service allows configuration of the Dolphin view modes.
-Comment[es]=Este servicio permite configurar los modos de las vistas de Dolphin.
-Comment[et]=See teenus võimaldab seadistada Dolphini vaaterežiime.
-Comment[eu]=Zerbitzu honek Dolphinen ikuspegi moduak konfiguratzeko balio du.
-Comment[fi]=Tällä palvelulla voi muokata Dolphinin katselutilojen asetuksia.
-Comment[fr]=Ce service permet de configurer les modes d'affichage de Dolphin.
-Comment[gl]=Este servizo permite configurar os modos de vista de Dolphin.
-Comment[hi]=यह सेवा डॉल्फिन दृश्य मोड के विन्यास की अनुमति देती है।
-Comment[hu]=Ez a szolgáltatás lehetővé teszi a Dolphin nézetmódjainak beállítását.
-Comment[ia]=Iste servicio permitte configuration del modos de vista de Dolphin
-Comment[id]=Layanan ini memungkinkan konfigurasi mode tampilan Dolphin.
-Comment[is]=Þessi þjónusta leyfir stillingar á skoðunarhömum í Dolphin.
-Comment[it]=Questo servizio permette di configurare le viste di Dolphin.
-Comment[ja]=Dolphin の表示モードを設定します
-Comment[ko]=이 서비스를 통해 Dolphin 보기 모드를 설정할 수 있습니다.
-Comment[lt]=Ši paslauga leidžia Dolphin rodinio veiksenų konfigūravimą.
-Comment[lv]=Šis serviss ļauj konfigurēt Dolphin skata režīmus.
-Comment[ml]=ഡോള്‍ഫിന്‍ അവതരണദശകള്‍ ക്രമീകരിയ്ക്കാന്‍ ഈ സേവനം അനുവദിയ്ക്കുന്നു.
-Comment[my]=ဤဝန်ဆောင်မှုက လင်းပိုင် မြင်ကွင်းထုံးနည်းများကို ပြင်ဆင်နိုင်စေသည်။
-Comment[nb]=Med denne tjenesten kan du sette opp Dolphins visningsmåter.
-Comment[nl]=Met deze dienst kunt u Dolphin-weergavemodussen configureren.
-Comment[nn]=Denne tenesta lèt deg setja opp Dolphin-visingsmodusar.
-Comment[pa]=ਇਹ ਸਰਵਿਸ ਡਾਲਫਿਨ ਝਲਕ ਮੋਡ ਦੀ ਸੰਰਚਨਾ ਵਾਸਤੇ ਹੈ।
-Comment[pl]=Ta usługa umożliwia ustawienie trybów widoku Dolphina.
-Comment[pt]=Este serviço permite a configuração dos modos de visualização do Dolphin.
-Comment[pt_BR]=Este serviço permite configurar os modos de exibição do Dolphin.
-Comment[ro]=Acest serviciu permite configurarea regimurilor de vizualizare Dolphin.
-Comment[ru]=Эта служба позволяет настраивать режимы просмотра папок в Dolphin
-Comment[sk]=Táto služba umožňuje nastavenie režimov zobrazenia Dolphinu.
-Comment[sl]=Ta storitev omogoča spreminjanje nastavitev načinov prikaza programa Dolphin.
-Comment[sr]=Овај сервис омогућава подешавање Делфинових режима приказа.
-Comment[sr@ijekavian]=Овај сервис омогућава подешавање Делфинових режима приказа.
-Comment[sr@ijekavianlatin]=Ovaj servis omogućava podešavanje Dolphinovih režima prikaza.
-Comment[sr@latin]=Ovaj servis omogućava podešavanje Dolphinovih režima prikaza.
-Comment[sv]=Den här tjänsten låter dig anpassa visningslägen i Dolphin.
-Comment[ta]=டால்பினின் காட்சிமுறைகளை அமைக்க இந்த சேவை உதவும்.
-Comment[tr]=Bu servis Dolphin görünüm kiplerini yapılandırmanızı sağlar.
-Comment[uk]=Ця служба надасть змогу налаштувати режими перегляду Dolphin.
-Comment[vi]=Dịch vụ này cho phép cấu hình các chế độ xem Dolphin.
-Comment[x-test]=xxThis service allows configuration of the Dolphin view modes.xx
-Comment[zh_CN]=此服务用于配置 Dolphin 的视图模式。
-Comment[zh_TW]=此服務允許設定 Dolphin 的檢視模式。
-
-[Desktop Entry]
-Icon=preferences-desktop-icons
-Type=Service
-X-KDE-ServiceTypes=KCModule
-
-X-KDE-Library=dolphin/kcms/kcm_dolphinviewmodes
-X-DocPath=dolphin/configuring-dolphin.html#preferences-dialog-viewmodes
-Name=View Modes
-Name[ar]=أوضاع المنظور
-Name[ast]=Moos de vista
-Name[az]=Baxış rejimləri
-Name[ca]=Modes de vista
-Name[ca@valencia]=Modes de vista
-Name[cs]=Režimy pohledu
-Name[da]=Visningstilstande
-Name[de]=Ansichts-Modi
-Name[el]=Λειτουργίες Προβολής
-Name[en_GB]=View Modes
-Name[es]=Modos de vistas
-Name[et]=Vaaterežiimid
-Name[eu]=Ikuspegi moduak
-Name[fi]=Näkymät
-Name[fr]=Modes d'affichage
-Name[gl]=Modos de vista
-Name[hi]=दृश्य मोड्स
-Name[hu]=Nézetmódok
-Name[ia]=Modos de vista
-Name[id]=Mode Tampilan
-Name[is]=Skoðunarhamur
-Name[it]=Viste
-Name[ja]=表示モード
-Name[ko]=보기 모드
-Name[lt]=Rodinio veiksenos
-Name[lv]=Skata režīmi
-Name[ml]=അവതരണ രീതികള്‍
-Name[my]=မြင်ကွင်းထုံးနည်းများ
-Name[nb]=Visningsmåter
-Name[nl]=Weergavemodi
-Name[nn]=Visingsmodusar
-Name[pa]=ਵੇਖਣ ਢੰਗ
-Name[pl]=Tryby widoku
-Name[pt]=Modos de Visualização
-Name[pt_BR]=Modos de exibição
-Name[ro]=Regimuri de vizualizare
-Name[ru]=Режимы просмотра
-Name[se]=Čájehanmodusat
-Name[sk]=Režimy zobrazenia
-Name[sl]=Načini prikaza
-Name[sr]=Режими приказа
-Name[sr@ijekavian]=Режими приказа
-Name[sr@ijekavianlatin]=Režimi prikaza
-Name[sr@latin]=Režimi prikaza
-Name[sv]=Visningslägen
-Name[ta]=காட்சிமுறைகள்
-Name[tr]=Görünüm Kipleri
-Name[uk]=Режими перегляду
-Name[vi]=Các chế độ xem
-Name[x-test]=xxView Modesxx
-Name[zh_CN]=视图模式
-Name[zh_TW]=檢視模式
-Comment=Configure file manager view modes
-Comment[ar]=اضبط أوضاع المنظور في مدير الملفّات
-Comment[ast]=Configura los moos de vista del xestor de ficheros
-Comment[az]=Fayl meneceri baxış rejimlərini tənzimləmək
-Comment[ca]=Configura els modes de vista del gestor de fitxers
-Comment[ca@valencia]=Configura els modes de vista del gestor de fitxers
-Comment[cs]=Nastavení režimů pohledu správce souborů
-Comment[da]=Indstil filhåndteringens visningstilstande
-Comment[de]=Dateiverwaltungs-Ansichten einrichten
-Comment[el]=Διαμόρφωση των λειτουργιών προβολής του διαχειριστή αρχείων
-Comment[en_GB]=Configure file manager view modes
-Comment[es]=Configura los modos de vistas del gestor de archivos
-Comment[et]=Failihalduri vaaterežiimide seadistamine
-Comment[eu]=Konfiguratu fitxategi-kudeatzailearen ikuspegi moduak
-Comment[fi]=Tiedostonhallinnan katselutilojen asetukset
-Comment[fr]=Configuration les modes d'affichage du gestionnaire de fichiers
-Comment[gl]=Configurar os modos de vista do xestor de ficheiros.
-Comment[hi]=फ़ाइल प्रबंधक दृश्य मोड विन्यस्त करें
-Comment[hu]=A fájlkezelő nézetmódjainak beállítása
-Comment[ia]=Configura le modos de vista del gerente de file
-Comment[id]=Konfigurasikan mode tampilan pengelola file
-Comment[is]=Stilla skoðunarhami í skráastjóra
-Comment[it]=Configura le viste del gestore dei file
-Comment[ja]=ファイルマネージャの表示モードを設定します
-Comment[ko]=파일 관리자 보기 모드 구성
-Comment[lt]=Konfigūruoti failų tvarkytuvės rodinio veiksenas
-Comment[lv]=Konfigurēt datņu pārvaldnieka skata režīmus
-Comment[ml]=ഫയല്‍ മാനേജറിന്റെ അവതരണ രീതികള്‍ ക്രമീകരിയ്ക്കുക
-Comment[my]=ဖိုင်လ်မန်နေဂျာ မြင်ကွင်းထုံးနည်းများ ပြင်ဆင်မည်
-Comment[nb]=Tilpass filbehandlerens visningsmåter
-Comment[nl]=Bestandsbeheerderweergavemodussen configureren
-Comment[nn]=Set opp visingsmodusane i filhandsamaren
-Comment[pa]=ਫਾਇਲ ਮੈਨੇਜਰ ਝਲਕ ਮੋਡ ਸੰਰਚਨਾ
-Comment[pl]=Ustawienia trybów widoku zarządzania plikami
-Comment[pt]=Configurar os modos de visualização do gestor de ficheiros
-Comment[pt_BR]=Configura os modos de exibição do gerenciador de arquivos
-Comment[ro]=Configurează regimurile de vizualizare ale gestionarului de fișiere
-Comment[ru]=Настройка режимов просмотра папок в диспетчере файлов
-Comment[se]=Heivet fiilagieđahalli čájehanmodusat
-Comment[sk]=Nastavenie režimov zobrazenia správcu súborov
-Comment[sl]=Nastavitve načinov prikaza upravljalnika datotek
-Comment[sr]=Подешавање режима приказа у менаџеру фајлова
-Comment[sr@ijekavian]=Подешавање режима приказа у менаџеру фајлова
-Comment[sr@ijekavianlatin]=Podešavanje režima prikaza u menadžeru fajlova
-Comment[sr@latin]=Podešavanje režima prikaza u menadžeru fajlova
-Comment[sv]=Anpassa filhanterarens visningslägen
-Comment[ta]=கோப்பு உலாவியின் காட்சிமுறைகளை அமையுங்கள்
-Comment[tr]=Dosya yöneticisi görünüm ayarlarını yapılandır
-Comment[uk]=Налаштувати режими перегляду менеджера файлів
-Comment[vi]=Cấu hình các chế độ xem trình quản lí tệp
-Comment[x-test]=xxConfigure file manager view modesxx
-Comment[zh_CN]=配置文件管理器视图模式
-Comment[zh_TW]=設定檔案管理員檢視模式
-X-KDE-Keywords=file manager
-X-KDE-Keywords[ar]=مدير ملفّات ملفات الملفّات الملفات
-X-KDE-Keywords[ast]=xestor de ficheros
-X-KDE-Keywords[az]=fayl meneceri
-X-KDE-Keywords[ca]=gestor de fitxers
-X-KDE-Keywords[ca@valencia]=gestor de fitxers
-X-KDE-Keywords[cs]=správce souborů
-X-KDE-Keywords[da]=filhåndtering
-X-KDE-Keywords[de]=Dateiverwaltung
-X-KDE-Keywords[el]=διαχειριστής αρχείων
-X-KDE-Keywords[en_GB]=file manager
-X-KDE-Keywords[es]=gestor de archivos
-X-KDE-Keywords[et]=failihaldur
-X-KDE-Keywords[eu]=Fitxategi-kudeatzailea
-X-KDE-Keywords[fi]=tiedostonhallinta
-X-KDE-Keywords[fr]=gestionnaire de fichiers
-X-KDE-Keywords[gl]=xestor de ficheiros
-X-KDE-Keywords[he]=מנהל קבצים
-X-KDE-Keywords[hi]=फ़ाइल प्रबंधक
-X-KDE-Keywords[hu]=fájlkezelő
-X-KDE-Keywords[ia]=gerente de file
-X-KDE-Keywords[id]=pengelola file
-X-KDE-Keywords[is]=skráastjóri
-X-KDE-Keywords[it]=gestore dei file
-X-KDE-Keywords[ja]=ファイルマネージャ
-X-KDE-Keywords[ko]=파일 관리자
-X-KDE-Keywords[lt]=failų tvarkytuvė
-X-KDE-Keywords[lv]=datņu pārvaldnieks
-X-KDE-Keywords[ml]=ഫയൽ മാനേജർ
-X-KDE-Keywords[my]=ဖိုင်လ်မန်နေဂျာ
-X-KDE-Keywords[nb]=filbehandler
-X-KDE-Keywords[nl]=bestandsbeheerder
-X-KDE-Keywords[nn]=filhandsamar
-X-KDE-Keywords[pa]=ਫਾਇਲ ਮੈਨੇਜਰ
-X-KDE-Keywords[pl]=zarządzanie plikami
-X-KDE-Keywords[pt]=gestor de ficheiros
-X-KDE-Keywords[pt_BR]=gerenciador de arquivos
-X-KDE-Keywords[ro]=gestionar de fișiere
-X-KDE-Keywords[ru]=диспетчер файлов
-X-KDE-Keywords[sk]=správca súborov
-X-KDE-Keywords[sl]=upravljalnik datotek
-X-KDE-Keywords[sr]=file manager,менаџер фајлова
-X-KDE-Keywords[sr@ijekavian]=file manager,менаџер фајлова
-X-KDE-Keywords[sr@ijekavianlatin]=file manager,menadžer fajlova
-X-KDE-Keywords[sr@latin]=file manager,menadžer fajlova
-X-KDE-Keywords[sv]=filhanterare
-X-KDE-Keywords[ta]=file manager,கோப்பு மேலாளர், கோப்பு நிர்வாகி, கோப்பு உலாவி
-X-KDE-Keywords[tr]=dosya yöneticisi
-X-KDE-Keywords[uk]=менеджер,керування,файл,файли
-X-KDE-Keywords[vi]=file manager,trình quản lí tệp
-X-KDE-Keywords[x-test]=xxfile managerxx
-X-KDE-Keywords[zh_CN]=文件管理器
-X-KDE-Keywords[zh_TW]=檔案管理員
diff --git a/src/settings/kcm/kcmdolphinviewmodes.json b/src/settings/kcm/kcmdolphinviewmodes.json
new file mode 100644 (file)
index 0000000..3f1449e
--- /dev/null
@@ -0,0 +1,131 @@
+{
+    "KPlugin": {
+        "Description": "Configure file manager view modes",
+        "Description[ar]": "اضبط أوضاع العرض في مدير الملفّات",
+        "Description[ca@valencia]": "Configura els modes de vista del gestor de fitxers",
+        "Description[ca]": "Configura els modes de vista del gestor de fitxers",
+        "Description[es]": "Configurar los modos de vistas del gestor de archivos",
+        "Description[fr]": "Configurer les modes d'affichage du gestionnaire de fichiers",
+        "Description[it]": "Configura le viste del gestore dei file",
+        "Description[nl]": "Bestandsbeheerderweergavemodussen configureren",
+        "Description[ro]": "Configurează regimurile de vizualizare ale gestionarului de fișiere",
+        "Description[sl]": "Postavi načine prikaza upravljalnika datotek",
+        "Description[sv]": "Anpassa filhanterarens visningslägen",
+        "Description[ta]": "கோப்பு உலாவியின் காட்சிமுறைகளை அமையுங்கள்",
+        "Description[tr]": "Dosya yöneticisi görünüm kiplerini yapılandır",
+        "Description[uk]": "Налаштувати режими перегляду менеджера файлів",
+        "Description[x-test]": "xxConfigure file manager view modesxx",
+        "Description[zh_CN]": "配置文件管理器视图模式",
+        "Icon": "preferences-desktop-icons",
+        "Name": "View Modes",
+        "Name[ar]": "أوضاع المنظور",
+        "Name[ast]": "Moos de vista",
+        "Name[az]": "Baxış rejimləri",
+        "Name[ca@valencia]": "Modes de vista",
+        "Name[ca]": "Modes de vista",
+        "Name[cs]": "Režimy pohledu",
+        "Name[da]": "Visningstilstande",
+        "Name[de]": "Ansichts-Modi",
+        "Name[el]": "Λειτουργίες Προβολής",
+        "Name[en_GB]": "View Modes",
+        "Name[es]": "Modos de vistas",
+        "Name[et]": "Vaaterežiimid",
+        "Name[eu]": "Ikuspegi moduak",
+        "Name[fi]": "Näkymät",
+        "Name[fr]": "Modes d'affichage",
+        "Name[gl]": "Modos de vista",
+        "Name[hi]": "दृश्य मोड्स",
+        "Name[hu]": "Nézetmódok",
+        "Name[ia]": "Modos de vista",
+        "Name[id]": "Mode Tampilan",
+        "Name[is]": "Skoðunarhamur",
+        "Name[it]": "Viste",
+        "Name[ja]": "表示モード",
+        "Name[ko]": "보기 모드",
+        "Name[lt]": "Rodinio veiksenos",
+        "Name[lv]": "Skata režīmi",
+        "Name[ml]": "അവതരണ രീതികള്‍",
+        "Name[my]": "မြင်ကွင်းထုံးနည်းများ",
+        "Name[nb]": "Visningsmåter",
+        "Name[nl]": "Weergavemodi",
+        "Name[nn]": "Visingsmodusar",
+        "Name[pa]": "ਵੇਖਣ ਢੰਗ",
+        "Name[pl]": "Tryby widoku",
+        "Name[pt]": "Modos de Visualização",
+        "Name[pt_BR]": "Modos de exibição",
+        "Name[ro]": "Regimuri de vizualizare",
+        "Name[ru]": "Режимы просмотра",
+        "Name[se]": "Čájehanmodusat",
+        "Name[sk]": "Režimy zobrazenia",
+        "Name[sl]": "Načini prikaza",
+        "Name[sr@ijekavian]": "Режими приказа",
+        "Name[sr@ijekavianlatin]": "Režimi prikaza",
+        "Name[sr@latin]": "Režimi prikaza",
+        "Name[sr]": "Режими приказа",
+        "Name[sv]": "Visningslägen",
+        "Name[ta]": "காட்சிமுறைகள்",
+        "Name[tr]": "Görünüm Kipleri",
+        "Name[uk]": "Режими перегляду",
+        "Name[vi]": "Các chế độ xem",
+        "Name[x-test]": "xxView Modesxx",
+        "Name[zh_CN]": "视图模式",
+        "Name[zh_TW]": "檢視模式",
+        "ServiceTypes": [
+            "KCModule"
+        ]
+    },
+    "X-DocPath": "dolphin/configuring-dolphin.html#preferences-dialog-viewmodes",
+    "X-KDE-Keywords": "file manager",
+    "X-KDE-Keywords[ar]": "مدير ملفّات ملفات الملفّات الملفات",
+    "X-KDE-Keywords[ast]": "xestor de ficheros",
+    "X-KDE-Keywords[az]": "fayl meneceri",
+    "X-KDE-Keywords[ca@valencia]": "gestor de fitxers",
+    "X-KDE-Keywords[ca]": "gestor de fitxers",
+    "X-KDE-Keywords[cs]": "správce souborů",
+    "X-KDE-Keywords[da]": "filhåndtering",
+    "X-KDE-Keywords[de]": "Dateiverwaltung",
+    "X-KDE-Keywords[el]": "διαχειριστής αρχείων",
+    "X-KDE-Keywords[en_GB]": "file manager",
+    "X-KDE-Keywords[es]": "gestor de archivos",
+    "X-KDE-Keywords[et]": "failihaldur",
+    "X-KDE-Keywords[eu]": "Fitxategi-kudeatzailea",
+    "X-KDE-Keywords[fi]": "tiedostonhallinta",
+    "X-KDE-Keywords[fr]": "gestionnaire de fichiers",
+    "X-KDE-Keywords[gl]": "xestor de ficheiros",
+    "X-KDE-Keywords[he]": "מנהל קבצים",
+    "X-KDE-Keywords[hi]": "फ़ाइल प्रबंधक",
+    "X-KDE-Keywords[hu]": "fájlkezelő",
+    "X-KDE-Keywords[ia]": "gerente de file",
+    "X-KDE-Keywords[id]": "pengelola file",
+    "X-KDE-Keywords[is]": "skráastjóri",
+    "X-KDE-Keywords[it]": "gestore dei file",
+    "X-KDE-Keywords[ja]": "ファイルマネージャ",
+    "X-KDE-Keywords[ko]": "파일 관리자",
+    "X-KDE-Keywords[lt]": "failų tvarkytuvė",
+    "X-KDE-Keywords[lv]": "datņu pārvaldnieks",
+    "X-KDE-Keywords[ml]": "ഫയൽ മാനേജർ",
+    "X-KDE-Keywords[my]": "ဖိုင်လ်မန်နေဂျာ",
+    "X-KDE-Keywords[nb]": "filbehandler",
+    "X-KDE-Keywords[nl]": "bestandsbeheerder",
+    "X-KDE-Keywords[nn]": "filhandsamar",
+    "X-KDE-Keywords[pa]": "ਫਾਇਲ ਮੈਨੇਜਰ",
+    "X-KDE-Keywords[pl]": "zarządzanie plikami",
+    "X-KDE-Keywords[pt]": "gestor de ficheiros",
+    "X-KDE-Keywords[pt_BR]": "gerenciador de arquivos",
+    "X-KDE-Keywords[ro]": "gestionar de fișiere",
+    "X-KDE-Keywords[ru]": "диспетчер файлов",
+    "X-KDE-Keywords[sk]": "správca súborov",
+    "X-KDE-Keywords[sl]": "upravljalnik datotek",
+    "X-KDE-Keywords[sr@ijekavian]": "file manager,менаџер фајлова",
+    "X-KDE-Keywords[sr@ijekavianlatin]": "file manager,menadžer fajlova",
+    "X-KDE-Keywords[sr@latin]": "file manager,menadžer fajlova",
+    "X-KDE-Keywords[sr]": "file manager,менаџер фајлова",
+    "X-KDE-Keywords[sv]": "filhanterare",
+    "X-KDE-Keywords[ta]": "file manager,கோப்பு மேலாளர், கோப்பு நிர்வாகி, கோப்பு உலாவி",
+    "X-KDE-Keywords[tr]": "dosya yöneticisi",
+    "X-KDE-Keywords[uk]": "менеджер,керування,файл,файли",
+    "X-KDE-Keywords[vi]": "file manager,trình quản lí tệp",
+    "X-KDE-Keywords[x-test]": "xxfile managerxx",
+    "X-KDE-Keywords[zh_CN]": "文件管理器",
+    "X-KDE-Keywords[zh_TW]": "檔案管理員"
+}
index 12f10f101e5540b8369a2c4ef3b09b1e29a89f95..2ee85e89a87a8bdef0a362e6604b98a6bcad27f6 100644 (file)
@@ -11,7 +11,7 @@
 #include <QWidget>
 
 #include <KIO/EmptyTrashJob>
-#include <KIOWidgets/KDirLister>
+#include <KDirLister>
 
 class Trash: public QObject
 {
index 5646fa9828ccabdcad33ffe746f682a58d2cb8bd..e6aecff80bad89fafc8909d89e9852061cc9997a 100644 (file)
@@ -1058,12 +1058,12 @@ void DolphinView::slotItemContextMenuRequested(int index, const QPointF& pos)
     }
 
     const KFileItem item = m_model->fileItem(index);
-    Q_EMIT requestContextMenu(pos.toPoint(), item, url(), QList<QAction*>());
+    Q_EMIT requestContextMenu(pos.toPoint(), item, selectedItems(), url());
 }
 
 void DolphinView::slotViewContextMenuRequested(const QPointF& pos)
 {
-    Q_EMIT requestContextMenu(pos.toPoint(), KFileItem(), url(), QList<QAction*>());
+    Q_EMIT requestContextMenu(pos.toPoint(), KFileItem(), selectedItems(), url());
 }
 
 void DolphinView::slotHeaderContextMenuRequested(const QPointF& pos)
index e93ca4fa026bebe041ad80791ad55d8d690ffdcf..b40be89367e12a1bc2f145a2ba7a2afc04f02b5f 100644 (file)
@@ -510,13 +510,12 @@ Q_SIGNALS:
     /**
      * Is emitted if a context menu is requested for the item \a item,
      * which is part of \a url. If the item is null, the context menu
-     * for the URL should be shown and the custom actions \a customActions
-     * will be added.
+     * for the URL should be shown.
      */
     void requestContextMenu(const QPoint& pos,
                             const KFileItem& item,
-                            const QUrl& url,
-                            const QList<QAction*>& customActions);
+                            const KFileItemList &selectedItems,
+                            const QUrl& url);
 
     /**
      * Is emitted if an information message with the content \a msg
index 2e524f8f224f438e011e4cc3984d7f30359c71cd..1c5298703cf1fc6343e48d18cc4bb8c256aa2533 100644 (file)
@@ -8,6 +8,7 @@
 #include "dolphinviewactionhandler.h"
 
 #include "dolphindebug.h"
+#include "kitemviews/kfileitemlisttostring.h"
 #include "kitemviews/kfileitemmodel.h"
 #include "settings/viewpropertiesdialog.h"
 #include "views/zoomlevelinfo.h"
@@ -663,7 +664,7 @@ void DolphinViewActionHandler::slotSortRoleChanged(const QByteArray& role)
     QAction* descending = m_actionCollection->action(QStringLiteral("descending"));
     QAction* ascending = m_actionCollection->action(QStringLiteral("ascending"));
 
-    if (role == "text" || role == "type" || role == "tags" || role == "comment") {
+    if (role == "text" || role == "type" || role == "extension" || role == "tags" || role == "comment") {
         descending->setText(i18nc("Sort descending", "Z-A"));
         ascending->setText(i18nc("Sort ascending", "A-Z"));
     } else if (role == "size") {
@@ -763,49 +764,25 @@ void DolphinViewActionHandler::slotCopyPath()
 void DolphinViewActionHandler::slotSelectionChanged(const KFileItemList& selection)
 {
     QString basicActionsMenuText;
-    switch (selection.count()) {
-    case 0:
+    if (selection.isEmpty()) {
         basicActionsMenuText =
             i18nc("@action:inmenu menu with actions like copy, paste, rename. The user's selection is empty when this text is shown.",
                   "Actions for Current View");
-        break;
-    case 1:
-        basicActionsMenuText =
-            i18nc("@action:inmenu menu with actions like copy, paste, rename. %1 is the name of the singular selected file/folder.",
-                  "Actions for \"%1\"", selection.first().name());
-        break;
-    case 2:
-        basicActionsMenuText =
-            i18nc("@action:inmenu menu with actions like copy, paste, rename. %1 and %2 are names of files/folders.",
-                  "Actions for \"%1\" and \"%2\"", selection.first().name(), selection.last().name());
-        break;
-    case 3:
-        basicActionsMenuText =
-            i18nc("@action:inmenu menu with actions like copy, paste, rename. %1, %2 and %3 are names of files/folders.",
-                  "Actions for \"%1\", \"%2\" and \"%3\"",
-                  selection.first().name(), selection.at(1).name(), selection.last().name());
-        break;
-    default:
-        basicActionsMenuText = QString();
-        break;
+    } else {
+        QFontMetrics fontMetrics = QMenu().fontMetrics();
+        // i18n: @action:inmenu menu with actions like copy, paste, rename.
+        // %1 is a textual representation of the currently selected files or folders. This can be the name of
+        // the file/files like "file1" or "file1, file2 and file3" or an aggregate like "8 Selected Folders".
+        // If this sort of word puzzle can not be correctly translated in your language, translate it as "NULL" (without the quotes)
+        // and a fallback will be used.
+        basicActionsMenuText = i18n("Actions for %1", fileItemListToString(selection, fontMetrics.averageCharWidth() * 40, fontMetrics, ItemsState::Selected));
     }
 
-    // At some point the added clarity from the text starts being less important than the menu width.
-    if (basicActionsMenuText.isEmpty() || basicActionsMenuText.length() > 40) {
+    if (basicActionsMenuText == QStringLiteral("NULL")) {
         const KFileItemListProperties properties(selection);
-        if (properties.isFile()) {
-            basicActionsMenuText =
-                i18ncp("@action:inmenu menu with actions like copy, paste, rename. %1 is the amount of selected files/folders.",
-                       "Actions for One Selected File", "Actions for %1 Selected Files", selection.count());
-        } else if (properties.isDirectory()) {
-            basicActionsMenuText =
-                i18ncp("@action:inmenu menu with actions like copy, paste, rename. %1 is the amount of selected files/folders.",
-                       "Actions for One Selected Folder", "Actions for %1 Selected Folders", selection.count());
-        } else {
-            basicActionsMenuText =
-                i18ncp("@action:inmenu menu with actions like copy, paste, rename. %1 is the amount of selected files/folders.",
-                       "Actions for One Selected Item", "Actions for %1 Selected Items", selection.count());
-        }
+        basicActionsMenuText =
+            i18ncp("@action:inmenu menu with actions like copy, paste, rename. %1 is the amount of selected files/folders.",
+                    "Actions for One Selected Item", "Actions for %1 Selected Items", selection.count());
     }
 
     QAction *basicActionsMenu = m_actionCollection->action(QStringLiteral("basic_actions"));
index 54af9c94cf9e16e98a5efb8b8d0eaf82a9b23996..6372617027da3e892d6f640d088e79410cac7f0f 100644 (file)
@@ -38,7 +38,6 @@ ToolTipManager::ToolTipManager(QWidget* parent) :
     m_showToolTipTimer(nullptr),
     m_contentRetrievalTimer(nullptr),
     m_transientParent(nullptr),
-    m_fileMetaDataWidget(nullptr),
     m_toolTipRequested(false),
     m_metaDataRequested(false),
     m_appliedWaitCursor(false),
@@ -65,11 +64,14 @@ ToolTipManager::ToolTipManager(QWidget* parent) :
 
 ToolTipManager::~ToolTipManager()
 {
+    if (!m_fileMetaDatWidgetOwnershipTransferred) {
+        delete m_fileMetaDataWidget;
+    }
 }
 
 void ToolTipManager::showToolTip(const KFileItem& item, const QRectF& itemRect, QWindow *transientParent)
 {
-    hideToolTip();
+    hideToolTip(HideBehavior::Instantly);
 
     m_itemRect = itemRect.toRect();
 
@@ -81,11 +83,11 @@ void ToolTipManager::showToolTip(const KFileItem& item, const QRectF& itemRect,
     // Only start the retrieving of the content, when the mouse has been over this
     // item for 200 milliseconds. This prevents a lot of useless preview jobs and
     // meta data retrieval, when passing rapidly over a lot of items.
-    m_fileMetaDataWidget.reset(new DolphinFileMetaDataWidget());
-    connect(m_fileMetaDataWidget.data(), &DolphinFileMetaDataWidget::metaDataRequestFinished,
-            this, &ToolTipManager::slotMetaDataRequestFinished);
-    connect(m_fileMetaDataWidget.data(), &DolphinFileMetaDataWidget::urlActivated,
-            this, &ToolTipManager::urlActivated);
+    if (!m_fileMetaDataWidget) {
+        m_fileMetaDataWidget = new DolphinFileMetaDataWidget();
+        connect(m_fileMetaDataWidget, &DolphinFileMetaDataWidget::metaDataRequestFinished, this, &ToolTipManager::slotMetaDataRequestFinished);
+        connect(m_fileMetaDataWidget, &DolphinFileMetaDataWidget::urlActivated, this, &ToolTipManager::urlActivated);
+    }
 
     m_contentRetrievalTimer->start();
     m_showToolTipTimer->start();
@@ -220,7 +222,10 @@ void ToolTipManager::showToolTip()
     if (!m_tooltipWidget) {
         m_tooltipWidget.reset(new KToolTipWidget());
     }
-    m_tooltipWidget->showBelow(m_itemRect, m_fileMetaDataWidget.data(), m_transientParent);
+    m_tooltipWidget->showBelow(m_itemRect, m_fileMetaDataWidget, m_transientParent);
+    // At this point KToolTipWidget adopted our parent-less metadata widget.
+    m_fileMetaDatWidgetOwnershipTransferred = true;
+
     m_toolTipRequested = false;
 }
 
index 3688e815caa64a69fff976d7dbc2afbc50a9f1f7..c86c97f6bc821db8eb0c681c4896b1750565c3cb 100644 (file)
@@ -77,7 +77,12 @@ private:
     QWindow* m_transientParent;
 
     QScopedPointer<KToolTipWidget> m_tooltipWidget;
-    QScopedPointer<DolphinFileMetaDataWidget> m_fileMetaDataWidget;
+    DolphinFileMetaDataWidget *m_fileMetaDataWidget = nullptr;
+
+    /// Whether ownership of the metadata widget was transferred
+    /// over to the KToolTipWidget (i.e. we should not delete it
+    /// anymore)
+    bool m_fileMetaDatWidgetOwnershipTransferred = false;
 
     bool m_toolTipRequested;
     bool m_metaDataRequested;