X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/36a816d7a63c58ead01002db59c2cf8862c72c97..eda483436bb9513e7afc059ffcabc129305bc435:/src/dolphinpart.cpp diff --git a/src/dolphinpart.cpp b/src/dolphinpart.cpp index 627ba79c5..642b15013 100644 --- a/src/dolphinpart.cpp +++ b/src/dolphinpart.cpp @@ -18,6 +18,7 @@ */ #include "dolphinpart.h" +#include "dolphinremoveaction.h" #include #include @@ -64,6 +65,7 @@ K_EXPORT_PLUGIN(DolphinPartFactory("dolphinpart", "dolphin")) DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QVariantList& args) : KParts::ReadOnlyPart(parent) ,m_openTerminalAction(0) + ,m_removeAction(0) { Q_UNUSED(args) setComponentData(DolphinPartFactory::componentData(), false); @@ -145,6 +147,10 @@ DolphinPart::DolphinPart(QWidget* parentWidget, QObject* parent, const QVariantL m_actionHandler->updateViewActions(); slotSelectionChanged(KFileItemList()); // initially disable selection-dependent actions + // Listen to events from the app so we can update the remove key by + // checking for a Shift key press. + qApp->installEventFilter(this); + // TODO there was a "always open a new window" (when clicking on a directory) setting in konqueror // (sort of spacial navigation) @@ -447,10 +453,18 @@ void DolphinPart::slotOpenContextMenu(const QPoint& pos, } } - if (addTrash) + if (!addTrash || !addDel) { + if (!m_removeAction) { + m_removeAction = new DolphinRemoveAction(this, actionCollection()); + } + editActions.append(m_removeAction); + m_removeAction->update(); + } else { + delete m_removeAction; + m_removeAction = 0; editActions.append(actionCollection()->action("move_to_trash")); - if (addDel) editActions.append(actionCollection()->action("delete")); + } // Normally KonqPopupMenu only shows the "Create new" submenu in the current view // since otherwise the created file would not be visible. @@ -593,6 +607,23 @@ void DolphinPart::setFilesToSelect(const KUrl::List& files) m_view->markUrlAsCurrent(files.at(0)); } +bool DolphinPart::eventFilter(QObject* obj, QEvent* event) +{ + const int type = event->type(); + + if ((type == QEvent::KeyPress || type == QEvent::KeyRelease) && m_removeAction) { + QMenu* menu = qobject_cast(obj); + if (menu && menu->parent() == m_view) { + QKeyEvent* ev = static_cast(event); + if (ev->key() == Qt::Key_Shift) { + m_removeAction->update(); + } + } + } + + return KParts::ReadOnlyPart::eventFilter(obj, event); +} + //// void DolphinPartBrowserExtension::restoreState(QDataStream &stream)