X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/60bd873e9f42d22f2d4dae8d1ed43ebbc23c600f..509464cce954f7fc4b00a9dafc2bc6355eb99ec6:/src/dolphinpart.cpp diff --git a/src/dolphinpart.cpp b/src/dolphinpart.cpp index 8720e0ce2..ccc91fd7d 100644 --- a/src/dolphinpart.cpp +++ b/src/dolphinpart.cpp @@ -40,27 +40,34 @@ #include #include #include +#include + +#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 "views/dolphindirlister.h" +#include "kitemviews/kfileitemmodel.h" +#include "kitemviews/private/kfileitemmodeldirlister.h" #include #include #include +#include K_PLUGIN_FACTORY(DolphinPartFactory, registerPlugin();) 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"); @@ -69,8 +76,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 +103,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. @@ -115,6 +122,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 +147,6 @@ DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QVariantL // (sort of spacial navigation) loadPlugins(this, this, componentData()); - } DolphinPart::~DolphinPart() @@ -190,18 +213,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 +319,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 +461,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 +501,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 +576,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 +637,7 @@ DolphinPart* DolphinPartFileInfoExtension::part() const bool DolphinPartFileInfoExtension::hasSelection() const { - return part()->view()->hasSelection(); + return part()->view()->selectedItemsCount() > 0; } KParts::FileInfoExtension::QueryModes DolphinPartFileInfoExtension::supportedQueryModes() const