X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/0a3a481ee2c850d6cacf48c2ffcf08b1ee8adce6..13b2fc55704fbc734cd4f9cbae56cfc2ef3ec0ce:/src/dolphinpart.cpp diff --git a/src/dolphinpart.cpp b/src/dolphinpart.cpp index 766a8f0dd..dd0f33121 100644 --- a/src/dolphinpart.cpp +++ b/src/dolphinpart.cpp @@ -38,6 +38,11 @@ #include #include #include +#include +#include +#include +#include +#include #include #include @@ -117,8 +122,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) @@ -132,6 +135,12 @@ 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())); @@ -164,6 +173,16 @@ void DolphinPart::createActions() createGoAction("go_autostart", "", i18nc("@action:inmenu Go", "Autostart"), KGlobalSettings::autostartPath(), goActionGroup); + + // Tools menu + 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); + } + } void DolphinPart::createGoAction(const char* name, const char* iconName, @@ -192,26 +211,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()); @@ -331,12 +351,12 @@ 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; } - + if ( sMoving ) editActions.append(actionCollection()->action("rename")); @@ -458,4 +478,30 @@ void DolphinPart::setNameFilter(const QString& nameFilter) // TODO save/restore name filter in saveState/restoreState like KonqDirPart did in kde3? } +void DolphinPart::slotOpenTerminal() +{ + QString dir(QDir::homePath()); + + KUrl u(url()); + + // If the given directory is not local, it can still be the URL of an + // ioslave using UDS_LOCAL_PATH which to be converted first. + u = KIO::NetAccess::mostLocalUrl(u, widget()); + + //If the URL is local after the above conversion, set the directory. + if (u.isLocalFile()) { + dir = u.path(); + } + + 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"