]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphincontextmenu.cpp
don't clear the selection when the view gets inactive
[dolphin.git] / src / dolphincontextmenu.cpp
index dd88fb74bcabf1d290bd271a4db800f61787cee1..13b1318da1bd70b141148114d6b3aad679091e09 100644 (file)
@@ -24,6 +24,8 @@
 #include "dolphinsettings.h"
 #include "dolphinview.h"
 #include "dolphinviewcontainer.h"
+#include "dolphin_generalsettings.h"
+#include "fileitemcapabilities.h"
 
 #include <kactioncollection.h>
 #include <kfileplacesmodel.h>
@@ -39,6 +41,7 @@
 #include <konqmimedata.h>
 #include <konq_operations.h>
 #include <konq_menuactions.h>
+#include <konq_popupmenuinformation.h>
 #include <klocale.h>
 #include <kpropertiesdialog.h>
 #include <krun.h>
@@ -53,6 +56,7 @@ DolphinContextMenu::DolphinContextMenu(DolphinMainWindow* parent,
                                        const KFileItem& fileInfo,
                                        const KUrl& baseUrl) :
     m_mainWindow(parent),
+    m_capabilities(0),
     m_fileInfo(fileInfo),
     m_baseUrl(baseUrl),
     m_context(NoContext)
@@ -66,6 +70,8 @@ DolphinContextMenu::DolphinContextMenu(DolphinMainWindow* parent,
 
 DolphinContextMenu::~DolphinContextMenu()
 {
+    delete m_capabilities;
+    m_capabilities = 0;
 }
 
 void DolphinContextMenu::open()
@@ -116,7 +122,7 @@ void DolphinContextMenu::openTrashContextMenu()
 
     QAction *action = popup->exec(QCursor::pos());
     if (action == emptyTrashAction) {
-        const QString text(i18nc("@info", "Do you really want to empty the Trash? All items will get deleted."));
+        const QString text(i18nc("@info", "Do you really want to empty the Trash? All items will be deleted."));
         const bool del = KMessageBox::warningContinueCancel(m_mainWindow,
                                                             text,
                                                             QString(),
@@ -179,14 +185,29 @@ void DolphinContextMenu::openItemContextMenu()
     }
 
     // Insert 'Open With...' sub menu
+    // TODO: port to menuActions.addOpenWithActionsTo(popup);
     QVector<KService::Ptr> openWithVector;
     const QList<QAction*> openWithActions = insertOpenWithItems(popup, openWithVector);
 
+    KonqPopupMenuInformation popupInfo;
+    popupInfo.setItems(m_selectedItems);
+    popupInfo.setReadOnly(!capabilities().supportsMoving());
+    popupInfo.setParentWidget(m_mainWindow);
+
     // Insert 'Actions' sub menu
     KonqMenuActions menuActions;
-    menuActions.setItems(m_selectedItems);
-    if (menuActions.addActionsTo(popup))
+    menuActions.setPopupMenuInfo(popupInfo);
+    if (menuActions.addActionsTo(popup)) {
         popup->addSeparator();
+    }
+
+    // Insert 'Copy To' and 'Move To' sub menus
+    if (DolphinSettings::instance().generalSettings()->showCopyMoveMenu()) {
+        m_copyToMenu.setItems(m_selectedItems);
+        m_copyToMenu.setReadOnly(!capabilities().supportsWriting());
+        m_copyToMenu.addActionsTo(popup);
+        popup->addSeparator();
+    }
 
     // insert 'Properties...' entry
     QAction* propertiesAction = m_mainWindow->actionCollection()->action("properties");
@@ -421,7 +442,7 @@ QAction* DolphinContextMenu::createPasteAction()
         action = new QAction(KIcon("edit-paste"), i18nc("@action:inmenu", "Paste Into Folder"), this);
         const QMimeData* mimeData = QApplication::clipboard()->mimeData();
         const KUrl::List pasteData = KUrl::List::fromMimeData(mimeData);
-        action->setEnabled(!pasteData.isEmpty());
+        action->setEnabled(!pasteData.isEmpty() && capabilities().supportsWriting());
         connect(action, SIGNAL(triggered()), m_mainWindow, SLOT(pasteIntoFolder()));
     } else {
         action = m_mainWindow->actionCollection()->action(KStandardAction::name(KStandardAction::Paste));
@@ -430,4 +451,12 @@ QAction* DolphinContextMenu::createPasteAction()
     return action;
 }
 
+FileItemCapabilities& DolphinContextMenu::capabilities()
+{
+    if (m_capabilities == 0) {
+        m_capabilities = new FileItemCapabilities(m_selectedItems);
+    }
+    return *m_capabilities;
+}
+
 #include "dolphincontextmenu.moc"