X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/38beff1a4b291b479a067e556ad7a4dd3e52cf8e..817f3952e2bed820ea3b50dfdfe91ccb99dcb748:/src/dolphinpart.cpp diff --git a/src/dolphinpart.cpp b/src/dolphinpart.cpp index 686dde5b8..45fc99115 100644 --- a/src/dolphinpart.cpp +++ b/src/dolphinpart.cpp @@ -29,27 +29,25 @@ #include #include #include -#include #include #include #include #include #include #include -#include #include #include +#include #include -#include +#include +#include #include #include #include K_PLUGIN_FACTORY(DolphinPartFactory, registerPlugin();) -// The componentdata name must be dolphinpart so that dolphinpart.rc is found -// Alternatively we would have to install it as dolphin/dolphinpart.rc -K_EXPORT_PLUGIN(DolphinPartFactory("dolphinpart")) +K_EXPORT_PLUGIN(DolphinPartFactory("dolphinpart", "dolphin")) DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QVariantList& args) : KParts::ReadOnlyPart(parent) @@ -120,8 +118,6 @@ DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QVariantL m_actionHandler->updateViewActions(); slotSelectionChanged(KFileItemList()); // initially disable selection-dependent actions - // TODO sort_by_* actions - // TODO there was a "always open a new window" (when clicking on a directory) setting in konqueror // (sort of spacial navigation) @@ -135,15 +131,16 @@ DolphinPart::~DolphinPart() void DolphinPart::createActions() { + // Edit menu + + m_newMenu = new KNewMenu(actionCollection(), widget(), "new_menu"); + connect(m_newMenu->menu(), SIGNAL(aboutToShow()), + this, SLOT(updateNewMenu())); + KAction *editMimeTypeAction = actionCollection()->addAction( "editMimeType" ); editMimeTypeAction->setText( i18nc("@action:inmenu Edit", "&Edit File Type..." ) ); connect(editMimeTypeAction, SIGNAL(triggered()), SLOT(slotEditMimeType())); - KAction *propertiesAction = actionCollection()->addAction( "properties" ); - propertiesAction->setText( i18nc("@action:inmenu Edit", "Properties") ); - propertiesAction->setShortcut(Qt::ALT+Qt::Key_Return); - connect(propertiesAction, SIGNAL(triggered()), SLOT(slotProperties())); - // View menu: all done by DolphinViewActionHandler // Go menu @@ -205,26 +202,27 @@ void DolphinPart::slotSelectionChanged(const KFileItemList& selection) QAction* deleteAction = actionCollection()->action("delete"); QAction* editMimeTypeAction = actionCollection()->action("editMimeType"); QAction* propertiesAction = actionCollection()->action("properties"); + QAction* deleteWithTrashShortcut = actionCollection()->action("delete_shortcut"); // see DolphinViewActionHandler if (!hasSelection) { stateChanged("has_no_selection"); emit m_extension->enableAction("cut", false); emit m_extension->enableAction("copy", false); - renameAction->setEnabled(false); - moveToTrashAction->setEnabled(false); - deleteAction->setEnabled(false); + deleteWithTrashShortcut->setEnabled(false); editMimeTypeAction->setEnabled(false); - propertiesAction->setEnabled(false); } else { stateChanged("has_selection"); + // TODO share this code with DolphinMainWindow::updateEditActions (and the desktop code) + // in libkonq KonqFileItemCapabilities capabilities(selection); const bool enableMoveToTrash = capabilities.isLocal() && capabilities.supportsMoving(); renameAction->setEnabled(capabilities.supportsMoving()); moveToTrashAction->setEnabled(enableMoveToTrash); deleteAction->setEnabled(capabilities.supportsDeleting()); + deleteWithTrashShortcut->setEnabled(capabilities.supportsDeleting() && !enableMoveToTrash); editMimeTypeAction->setEnabled(true); propertiesAction->setEnabled(true); emit m_extension->enableAction("cut", capabilities.supportsMoving()); @@ -344,7 +342,7 @@ void DolphinPart::slotOpenContextMenu(const KFileItem& _item, const KUrl&) // If the parent directory of the selected item is writable, moving // and deleting are possible. KFileItem parentDir = m_dirLister->rootItem(); - if (!parentDir.isWritable()) { + if (!parentDir.isNull() && !parentDir.isWritable()) { popupFlags |= KParts::BrowserExtension::NoDeletion; sDeleting = false; sMoving = false; @@ -369,8 +367,9 @@ void DolphinPart::slotOpenContextMenu(const KFileItem& _item, const KUrl&) addDel = true; } else { - KConfigGroup configGroup( KGlobal::config(), "KDE" ); - if ( configGroup.readEntry( "ShowDeleteCommand", false) ) + KSharedConfig::Ptr globalConfig = KSharedConfig::openConfig("kdeglobals", KConfig::IncludeGlobals); + KConfigGroup configGroup(globalConfig, "KDE"); + if ( configGroup.readEntry("ShowDeleteCommand", false) ) addDel = true; } } @@ -396,6 +395,7 @@ void DolphinPart::slotOpenContextMenu(const KFileItem& _item, const KUrl&) void DolphinPart::slotUrlChanged(const KUrl& url) { + KParts::ReadOnlyPart::setUrl(url); QString prettyUrl = url.pathOrUrl(); emit m_extension->setLocationBarUrl(prettyUrl); } @@ -442,15 +442,6 @@ void DolphinPart::slotEditMimeType() } } -void DolphinPart::slotProperties() -{ - const KFileItemList items = m_view->selectedItems(); - if (!items.isEmpty()) { - KPropertiesDialog dialog(items.first().url(), m_view); - dialog.exec(); - } -} - void DolphinPart::setCurrentViewMode(const QString& viewModeName) { QAction* action = actionCollection()->action(viewModeName); @@ -473,9 +464,6 @@ void DolphinPart::setNameFilter(const QString& nameFilter) void DolphinPart::slotOpenTerminal() { - KConfigGroup confGroup(KGlobal::config(), "General"); // set by componentchooser kcm - const QString preferredTerminal = confGroup.readPathEntry("TerminalApplication", "konsole"); - QString dir(QDir::homePath()); KUrl u(url()); @@ -489,17 +477,15 @@ void DolphinPart::slotOpenTerminal() dir = u.path(); } - // Compensate for terminal having arguments. - QStringList args = KShell::splitArgs(preferredTerminal); - if (args.isEmpty()) { - return; - } - const QString prog = args.takeFirst(); - if (prog == "konsole") { - args << "--workdir"; - args << dir; - } - QProcess::startDetached(prog, args); + KToolInvocation::invokeTerminal(QString(), dir); +} + +void DolphinPart::updateNewMenu() +{ + // As requested by KNewMenu : + m_newMenu->slotCheckUpToDate(); + // And set the files that the menu apply on : + m_newMenu->setPopupFiles(url()); } #include "dolphinpart.moc"