]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinpart.cpp
Comment out assertion to fix a crash when filtering in Icons/Compat View
[dolphin.git] / src / dolphinpart.cpp
index b3b7cd044e2f52edb8b777559a131ddf63cce88f..627ba79c56570e87e01d61c40288761aa8610294 100644 (file)
 #include <KMenu>
 #include <KInputDialog>
 #include <KProtocolInfo>
+#include <kdeversion.h>
+
+#if KDE_IS_VERSION(4, 9, 2)
+#include "dolphinpart_ext.h"
+#endif
 
 #include "views/dolphinview.h"
 #include "views/dolphinviewactionhandler.h"
 #include "views/dolphinnewfilemenuobserver.h"
 #include "views/dolphinremoteencoding.h"
+#include "kitemviews/kfileitemmodel.h"
+#include "kitemviews/private/kfileitemmodeldirlister.h"
 
 #include <QActionGroup>
 #include <QApplication>
@@ -56,11 +63,11 @@ K_EXPORT_PLUGIN(DolphinPartFactory("dolphinpart", "dolphin"))
 
 DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QVariantList& args)
     : KParts::ReadOnlyPart(parent)
+      ,m_openTerminalAction(0)
 {
     Q_UNUSED(args)
     setComponentData(DolphinPartFactory::componentData(), false);
     m_extension = new DolphinPartBrowserExtension(this);
-    new DolphinPartFileInfoExtension(this);
 
     // make sure that other apps using this part find Dolphin's view-file-columns icons
     KIconLoader::global()->addAppDir("dolphin");
@@ -83,6 +90,8 @@ DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QVariantL
             this, SLOT(slotErrorMessage(QString)));
     connect(m_view, SIGNAL(itemActivated(KFileItem)),
             this, SLOT(slotItemActivated(KFileItem)));
+    connect(m_view, SIGNAL(itemsActivated(KFileItemList)),
+            this, SLOT(slotItemsActivated(KFileItemList)));
     connect(m_view, SIGNAL(tabRequested(KUrl)),
             this, SLOT(createNewWindow(KUrl)));
     connect(m_view, SIGNAL(requestContextMenu(QPoint,KFileItem,KUrl,QList<QAction*>)),
@@ -115,6 +124,23 @@ DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QVariantL
     connect(clipboard, SIGNAL(dataChanged()),
             this, SLOT(updatePasteAction()));
 
+    // Create file info and listing filter extensions.
+    // NOTE: Listing filter needs to be instantiated after the creation of the view.
+    new DolphinPartFileInfoExtension(this);
+
+#if KDE_IS_VERSION(4, 9, 2)
+    new DolphinPartListingFilterExtension(this);
+
+    KDirLister* lister = m_view->m_model->m_dirLister;
+    if (lister) {
+        DolphinPartListingNotificationExtension* notifyExt = new DolphinPartListingNotificationExtension(this);
+        connect(lister, SIGNAL(newItems(KFileItemList)), notifyExt, SLOT(slotNewItems(KFileItemList)));
+        connect(lister, SIGNAL(itemsDeleted(KFileItemList)), notifyExt, SLOT(slotItemsDeleted(KFileItemList)));
+    } else {
+        kWarning() << "NULL KDirLister object! KParts::ListingNotificationExtension will NOT be supported";
+    }
+#endif
+
     createActions();
     m_actionHandler->updateViewActions();
     slotSelectionChanged(KFileItemList()); // initially disable selection-dependent actions
@@ -123,7 +149,6 @@ DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QVariantL
     // (sort of spacial navigation)
 
     loadPlugins(this, this, componentData());
-
 }
 
 DolphinPart::~DolphinPart()
@@ -190,18 +215,18 @@ void DolphinPart::createActions()
                    goActionGroup);
 
     // Tools menu
-    KAction* findFile = actionCollection()->addAction("find_file");
-    findFile->setText(i18nc("@action:inmenu Tools", "Find File..."));
-    findFile->setShortcut(Qt::CTRL | Qt::Key_F);
-    findFile->setIcon(KIcon("edit-find"));
-    connect(findFile, SIGNAL(triggered()), this, SLOT(slotFindFile()));
+    m_findFileAction = actionCollection()->addAction("find_file");
+    m_findFileAction->setText(i18nc("@action:inmenu Tools", "Find File..."));
+    m_findFileAction->setShortcut(Qt::CTRL | Qt::Key_F);
+    m_findFileAction->setIcon(KIcon("edit-find"));
+    connect(m_findFileAction, SIGNAL(triggered()), this, SLOT(slotFindFile()));
 
     if (KAuthorized::authorizeKAction("shell_access")) {
-        KAction* action = actionCollection()->addAction("open_terminal");
-        action->setIcon(KIcon("utilities-terminal"));
-        action->setText(i18nc("@action:inmenu Tools", "Open &Terminal"));
-        connect(action, SIGNAL(triggered()), SLOT(slotOpenTerminal()));
-        action->setShortcut(Qt::Key_F4);
+        m_openTerminalAction = actionCollection()->addAction("open_terminal");
+        m_openTerminalAction->setIcon(KIcon("utilities-terminal"));
+        m_openTerminalAction->setText(i18nc("@action:inmenu Tools", "Open &Terminal"));
+        connect(m_openTerminalAction, SIGNAL(triggered()), SLOT(slotOpenTerminal()));
+        m_openTerminalAction->setShortcut(Qt::Key_F4);
     }
 }
 
@@ -296,6 +321,13 @@ bool DolphinPart::openUrl(const KUrl& url)
     emit aboutToOpenURL();
     if (reload)
         m_view->reload();
+    // Disable "Find File" and "Open Terminal" actions for non-file URLs,
+    // e.g. ftp, smb, etc. #279283
+    const bool isLocalUrl = url.isLocalFile();
+    m_findFileAction->setEnabled(isLocalUrl);
+    if (m_openTerminalAction) {
+        m_openTerminalAction->setEnabled(isLocalUrl);
+    }
     return true;
 }
 
@@ -337,6 +369,13 @@ void DolphinPart::slotItemActivated(const KFileItem& item)
     emit m_extension->openUrlRequest(item.targetUrl(), args, browserArgs);
 }
 
+void DolphinPart::slotItemsActivated(const KFileItemList& items)
+{
+    foreach (const KFileItem& item, items) {
+        slotItemActivated(item);
+    }
+}
+
 void DolphinPart::createNewWindow(const KUrl& url)
 {
     // TODO: Check issue N176832 for the missing QAIV signal; task 177399 - maybe this code
@@ -546,7 +585,12 @@ void DolphinPart::createDirectory()
 
 void DolphinPart::setFilesToSelect(const KUrl::List& files)
 {
+    if (files.isEmpty()) {
+        return;
+    }
+
     m_view->markUrlsAsSelected(files);
+    m_view->markUrlAsCurrent(files.at(0));
 }
 
 ////