]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinpart.cpp
Make --select can automatically scroll to the selected file.
[dolphin.git] / src / dolphinpart.cpp
index 8720e0ce2202ae035b43ad2f4b3e86e3c2b3cab8..fff7dc0e08b7e74f7039dd698527abc017cb7a9b 100644 (file)
 #include "views/dolphinviewactionhandler.h"
 #include "views/dolphinnewfilemenuobserver.h"
 #include "views/dolphinremoteencoding.h"
-#include "views/dolphindirlister.h"
 
 #include <QActionGroup>
 #include <QApplication>
 #include <QClipboard>
+#include <QDir>
 
 K_PLUGIN_FACTORY(DolphinPartFactory, registerPlugin<DolphinPart>();)
 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);
@@ -69,8 +70,8 @@ DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QVariantL
     m_view->setTabsForFilesEnabled(true);
     setWidget(m_view);
 
-    connect(m_view, SIGNAL(finishedPathLoading(KUrl)), this, SLOT(slotCompleted(KUrl)));
-    connect(m_view, SIGNAL(pathLoadingProgress(int)), this, SLOT(updateProgress(int)));
+    connect(m_view, SIGNAL(directoryLoadingCompleted()), this, SIGNAL(completed()));
+    connect(m_view, SIGNAL(directoryLoadingProgress(int)), this, SLOT(updateProgress(int)));
     connect(m_view, SIGNAL(errorMessage(QString)), this, SLOT(slotErrorMessage(QString)));
 
     setXMLFile("dolphinpart.rc");
@@ -96,7 +97,7 @@ DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QVariantL
     connect(m_view, SIGNAL(modeChanged(DolphinView::Mode,DolphinView::Mode)),
             this, SIGNAL(viewModeChanged())); // relay signal
     connect(m_view, SIGNAL(redirection(KUrl,KUrl)),
-            this, SLOT(slotRedirection(KUrl,KUrl)));
+            this, SLOT(slotDirectoryRedirection(KUrl,KUrl)));
 
     // Watch for changes that should result in updates to the
     // status bar text.
@@ -190,18 +191,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,15 +297,16 @@ 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;
 }
 
-void DolphinPart::slotCompleted(const KUrl& url)
-{
-    Q_UNUSED(url)
-    emit completed();
-}
-
 void DolphinPart::slotMessage(const QString& msg)
 {
     emit setStatusBarText(msg);
@@ -437,7 +439,7 @@ void DolphinPart::slotOpenContextMenu(const QPoint& pos,
                                 actionGroups);
 }
 
-void DolphinPart::slotRedirection(const KUrl& oldUrl, const KUrl& newUrl)
+void DolphinPart::slotDirectoryRedirection(const KUrl& oldUrl, const KUrl& newUrl)
 {
     //kDebug() << oldUrl << newUrl << "currentUrl=" << url();
     if (oldUrl.equals(url(), KUrl::CompareWithoutTrailingSlash /* #207572 */)) {
@@ -477,7 +479,7 @@ void DolphinPart::openSelectionDialog(const QString& title, const QString& text,
 
     if (okClicked && !pattern.isEmpty()) {
         QRegExp patternRegExp(pattern, Qt::CaseSensitive, QRegExp::Wildcard);
-        m_view->setItemSelectionEnabled(patternRegExp, selectItems);
+        m_view->selectItems(patternRegExp, selectItems);
     }
 }
 
@@ -552,7 +554,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));
 }
 
 ////
@@ -608,7 +615,7 @@ DolphinPart* DolphinPartFileInfoExtension::part() const
 
 bool DolphinPartFileInfoExtension::hasSelection() const
 {
-    return part()->view()->hasSelection();
+    return part()->view()->selectedItemsCount() > 0;
 }
 
 KParts::FileInfoExtension::QueryModes DolphinPartFileInfoExtension::supportedQueryModes() const