]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphincontextmenu.cpp
fix possible crash when selecting "New Tab" from the tab context menu of an inactive tab
[dolphin.git] / src / dolphincontextmenu.cpp
index a7a5ae567cc6d28d454396b1ac7e4cf80d5f0b7a..41673e182d291cbfa88aac0ebe740f1c9cb94ce2 100644 (file)
@@ -24,6 +24,7 @@
 #include "dolphinsettings.h"
 #include "dolphinview.h"
 #include "dolphinviewcontainer.h"
+#include "dolphin_generalsettings.h"
 
 #include <kactioncollection.h>
 #include <kfileplacesmodel.h>
@@ -75,7 +76,7 @@ void DolphinContextMenu::open()
         m_context |= TrashContext;
     }
 
-    if (!m_fileInfo.isNull()) {
+    if (!m_fileInfo.isNull() && (m_selectedItems.count() > 0)) {
         m_context |= ItemContext;
         // TODO: handle other use cases like devices + desktop files
     }
@@ -95,7 +96,6 @@ void DolphinContextMenu::open()
     }
 }
 
-
 void DolphinContextMenu::openTrashContextMenu()
 {
     Q_ASSERT(m_context & TrashContext);
@@ -109,7 +109,7 @@ void DolphinContextMenu::openTrashContextMenu()
     emptyTrashAction->setEnabled(!trashConfig.group("Status").readEntry("Empty", true));
     popup->addAction(emptyTrashAction);
 
-    QAction* addToPlacesAction = popup->addAction(KIcon("folder-bookmarks"),
+    QAction* addToPlacesAction = popup->addAction(KIcon("bookmark-new"),
                                                   i18nc("@action:inmenu Add current folder to places", "Add to Places"));
 
     QAction* propertiesAction = m_mainWindow->actionCollection()->action("properties");
@@ -117,7 +117,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(),
@@ -130,7 +130,7 @@ void DolphinContextMenu::openTrashContextMenu()
     } else if (action == addToPlacesAction) {
         const KUrl& url = m_mainWindow->activeViewContainer()->url();
         if (url.isValid()) {
-            DolphinSettings::instance().placesModel()->addPlace(i18n("Trash"), url);
+            DolphinSettings::instance().placesModel()->addPlace(i18nc("@label", "Trash"), url);
         }
     }
 
@@ -175,7 +175,7 @@ void DolphinContextMenu::openItemContextMenu()
     // insert 'Bookmark This Folder' entry if exactly one item is selected
     QAction* addToPlacesAction = 0;
     if (m_fileInfo.isDir() && (m_selectedUrls.count() == 1)) {
-        addToPlacesAction = popup->addAction(KIcon("folder-bookmarks"),
+        addToPlacesAction = popup->addAction(KIcon("bookmark-new"),
                                              i18nc("@action:inmenu Add selected folder to places", "Add to Places"));
     }
 
@@ -186,8 +186,16 @@ void DolphinContextMenu::openItemContextMenu()
     // Insert 'Actions' sub menu
     KonqMenuActions menuActions;
     menuActions.setItems(m_selectedItems);
-    if (menuActions.addActionsTo(popup))
+    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.addActionsTo(popup);
         popup->addSeparator();
+    }
 
     // insert 'Properties...' entry
     QAction* propertiesAction = m_mainWindow->actionCollection()->action("properties");
@@ -198,7 +206,7 @@ void DolphinContextMenu::openItemContextMenu()
     if ((addToPlacesAction != 0) && (activatedAction == addToPlacesAction)) {
         const KUrl selectedUrl(m_fileInfo.url());
         if (selectedUrl.isValid()) {
-            DolphinSettings::instance().placesModel()->addPlace(selectedUrl.fileName(),
+            DolphinSettings::instance().placesModel()->addPlace(placesName(selectedUrl),
                                                                 selectedUrl);
         }
     } else if (openWithActions.contains(activatedAction)) {
@@ -219,7 +227,6 @@ void DolphinContextMenu::openItemContextMenu()
 
 void DolphinContextMenu::openViewportContextMenu()
 {
-    Q_ASSERT(m_fileInfo.isNull());
     KMenu* popup = new KMenu(m_mainWindow);
 
     addShowMenubarAction(popup);
@@ -231,7 +238,7 @@ void DolphinContextMenu::openViewportContextMenu()
     popup->addMenu(newMenu->menu());
     popup->addSeparator();
 
-    QAction* pasteAction = m_mainWindow->actionCollection()->action(KStandardAction::stdName(KStandardAction::Paste));
+    QAction* pasteAction = createPasteAction();
     popup->addAction(pasteAction);
 
     // setup 'View Mode' menu
@@ -253,7 +260,7 @@ void DolphinContextMenu::openViewportContextMenu()
 
     popup->addSeparator();
 
-    QAction* addToPlacesAction = popup->addAction(KIcon("folder-bookmarks"),
+    QAction* addToPlacesAction = popup->addAction(KIcon("bookmark-new"),
                                                   i18nc("@action:inmenu Add current folder to places", "Add to Places"));
     popup->addSeparator();
 
@@ -262,12 +269,12 @@ void DolphinContextMenu::openViewportContextMenu()
     QAction* action = popup->exec(QCursor::pos());
     if (action == propertiesAction) {
         const KUrl& url = m_mainWindow->activeViewContainer()->url();
-        KPropertiesDialog dialog(url);
+        KPropertiesDialog dialog(url, m_mainWindow);
         dialog.exec();
     } else if (action == addToPlacesAction) {
         const KUrl& url = m_mainWindow->activeViewContainer()->url();
         if (url.isValid()) {
-            DolphinSettings::instance().placesModel()->addPlace(url.fileName(), url);
+            DolphinSettings::instance().placesModel()->addPlace(placesName(url), url);
         }
     }
 
@@ -280,9 +287,9 @@ void DolphinContextMenu::insertDefaultItemActions(KMenu* popup)
     const KActionCollection* collection = m_mainWindow->actionCollection();
 
     // insert 'Cut', 'Copy' and 'Paste'
-    QAction* cutAction = collection->action(KStandardAction::stdName(KStandardAction::Cut));
-    QAction* copyAction  = collection->action(KStandardAction::stdName(KStandardAction::Copy));
-    QAction* pasteAction = collection->action(KStandardAction::stdName(KStandardAction::Paste));
+    QAction* cutAction = collection->action(KStandardAction::name(KStandardAction::Cut));
+    QAction* copyAction  = collection->action(KStandardAction::name(KStandardAction::Copy));
+    QAction* pasteAction = createPasteAction();
 
     popup->addAction(cutAction);
     popup->addAction(copyAction);
@@ -407,4 +414,29 @@ void DolphinContextMenu::addShowMenubarAction(KMenu* menu)
     }
 }
 
+QString DolphinContextMenu::placesName(const KUrl& url) const
+{
+    QString name = url.fileName();
+    if (name.isEmpty()) {
+        name = url.host();
+    }
+    return name;
+}
+
+QAction* DolphinContextMenu::createPasteAction()
+{
+    QAction* action = 0;
+    if ((m_selectedItems.count() == 1) && m_fileInfo.isDir()) {
+        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());
+        connect(action, SIGNAL(triggered()), m_mainWindow, SLOT(pasteIntoFolder()));
+    } else {
+        action = m_mainWindow->actionCollection()->action(KStandardAction::name(KStandardAction::Paste));
+    }
+
+    return action;
+}
+
 #include "dolphincontextmenu.moc"