X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/70999c96a27777c2b1d0774b410680abd47eb131..b5cc2a6924cfd8f59611d3cec2edbb00a08b4ff1:/src/dolphincontextmenu.cpp diff --git a/src/dolphincontextmenu.cpp b/src/dolphincontextmenu.cpp index ddc8c9155..147606581 100644 --- a/src/dolphincontextmenu.cpp +++ b/src/dolphincontextmenu.cpp @@ -36,6 +36,7 @@ #include #include #include +#include #include #include #include @@ -45,11 +46,9 @@ #include DolphinContextMenu::DolphinContextMenu(DolphinView* parent, - KFileItem* fileInfo, - const QPoint& pos) : + KFileItem* fileInfo) : m_dolphinView(parent), - m_fileInfo(fileInfo), - m_pos(pos) + m_fileInfo(fileInfo) { } @@ -69,35 +68,19 @@ DolphinContextMenu::~DolphinContextMenu() void DolphinContextMenu::openViewportContextMenu() { - // Parts of the following code have been taken - // from the class KonqOperations located in - // libqonq/konq_operations.h of Konqueror. - // (Copyright (C) 2000 David Faure ) - assert(m_fileInfo == 0); - DolphinMainWindow* dolphin = m_dolphinView->mainWindow(); KMenu* popup = new KMenu(m_dolphinView); // setup 'Create New' menu - KMenu* createNewMenu = new KMenu(i18n("Create New")); - createNewMenu->setIcon(SmallIcon("filenew")); - - QAction* createFolderAction = dolphin->actionCollection()->action("create_folder"); - if (createFolderAction != 0) { - createNewMenu->addAction(createFolderAction); - } - - QLinkedListIterator fileGrouptIt(dolphin->fileGroupActions()); - while (fileGrouptIt.hasNext()) { - createNewMenu->addAction(fileGrouptIt.next()); - } - - popup->addMenu(createNewMenu); + KNewMenu* newMenu = dolphin->newMenu(); + newMenu->slotCheckUpToDate(); + newMenu->setPopupFiles(m_dolphinView->url()); + popup->addMenu(newMenu->menu()); + popup->addSeparator(); QAction* pasteAction = dolphin->actionCollection()->action(KStandardAction::stdName(KStandardAction::Paste)); popup->addAction(pasteAction); - popup->insertSeparator(pasteAction); // setup 'View Mode' menu KMenu* viewModeMenu = new KMenu(i18n("View Mode")); @@ -112,14 +95,14 @@ void DolphinContextMenu::openViewportContextMenu() viewModeMenu->addAction(previewsMode); popup->addMenu(viewModeMenu); + popup->addSeparator(); - QAction* bookmarkAction = popup->addAction(i18n("Bookmark this folder")); - popup->insertSeparator(bookmarkAction); + QAction* bookmarkAction = popup->addAction(KIcon("bookmark-folder"), i18n("Bookmark this folder")); + popup->addSeparator(); QAction* propertiesAction = popup->addAction(i18n("Properties...")); - popup->insertSeparator(propertiesAction); - QAction* activatedAction = popup->exec(m_pos); + QAction* activatedAction = popup->exec(QCursor::pos()); if (activatedAction == propertiesAction) { new KPropertiesDialog(dolphin->activeView()->url()); } @@ -142,11 +125,6 @@ void DolphinContextMenu::openViewportContextMenu() void DolphinContextMenu::openItemContextMenu() { - // Parts of the following code have been taken - // from the class KonqOperations located in - // libkonq/konq_operations.h of Konqueror. - // (Copyright (C) 2000 David Faure ) - assert(m_fileInfo != 0); KMenu* popup = new KMenu(m_dolphinView); @@ -167,19 +145,26 @@ void DolphinContextMenu::openItemContextMenu() popup->addAction(action); } } + popup->addSeparator(); // insert 'Rename' QAction* renameAction = dolphin->actionCollection()->action("rename"); popup->addAction(renameAction); - popup->insertSeparator(renameAction); - // insert 'Move to Trash' for local Urls, otherwise insert 'Delete' + // insert 'Move to Trash' and (optionally) 'Delete' + const KSharedConfig::Ptr globalConfig = KSharedConfig::openConfig("kdeglobals", KConfig::NoGlobals); + const KConfigGroup kdeConfig(globalConfig, "KDE"); + bool showDeleteCommand = kdeConfig.readEntry("ShowDeleteCommand", false); const KUrl& url = dolphin->activeView()->url(); if (url.isLocalFile()) { QAction* moveToTrashAction = dolphin->actionCollection()->action("move_to_trash"); popup->addAction(moveToTrashAction); } else { + showDeleteCommand = true; + } + + if (showDeleteCommand) { QAction* deleteAction = dolphin->actionCollection()->action("delete"); popup->addAction(deleteAction); } @@ -189,7 +174,7 @@ void DolphinContextMenu::openItemContextMenu() // urls contains only one item, i.e. no multiple selection made QAction* bookmarkAction = 0; if (m_fileInfo->isDir() && (urls.count() == 1)) { - bookmarkAction = popup->addAction(i18n("Bookmark this folder")); + bookmarkAction = popup->addAction(KIcon("bookmark-folder"), i18n("Bookmark this folder")); } // Insert 'Open With...' sub menu @@ -199,13 +184,13 @@ void DolphinContextMenu::openItemContextMenu() // Insert 'Actions' sub menu QVector actionsVector; const QList serviceActions = insertActionItems(popup, actionsVector); + popup->addSeparator(); // insert 'Properties...' entry QAction* propertiesAction = dolphin->actionCollection()->action("properties"); popup->addAction(propertiesAction); - popup->insertSeparator(propertiesAction); - QAction* activatedAction = popup->exec(m_pos); + QAction* activatedAction = popup->exec(QCursor::pos()); if ((bookmarkAction!= 0) && (activatedAction == bookmarkAction)) { const KUrl selectedUrl(m_fileInfo->url()); @@ -246,6 +231,11 @@ void DolphinContextMenu::openItemContextMenu() QList DolphinContextMenu::insertOpenWithItems(KMenu* popup, QVector& openWithVector) { + // Parts of the following code have been taken + // from the class KonqOperations located in + // libqonq/konq_operations.h of Konqueror. + // (Copyright (C) 2000 David Faure ) + // Prepare 'Open With' sub menu. Usually a sub menu is created, where all applications // are listed which are registered to open the item. As last entry "Other..." will be // attached which allows to select a custom application. If no applications are registered @@ -253,11 +243,7 @@ QList DolphinContextMenu::insertOpenWithItems(KMenu* popup, const KFileItemList list = m_dolphinView->selectedItems(); bool insertOpenWithItems = true; - - // TODO: a crash occurs in KFileItem although m_fileInfo seems to be valid. Temporary - // commented out the following command, otherwise it won't be possible to open a context menu: - //const QString contextMimeType(m_fileInfo->mimetype()); - const QString contextMimeType; + const QString contextMimeType(m_fileInfo->mimetype()); QListIterator mimeIt(list); while (insertOpenWithItems && mimeIt.hasNext()) { @@ -266,7 +252,6 @@ QList DolphinContextMenu::insertOpenWithItems(KMenu* popup, } QList openWithActions; - if (insertOpenWithItems) { // fill the 'Open with' sub menu with application types const KMimeType::Ptr mimePtr = KMimeType::findByUrl(m_fileInfo->url()); @@ -290,10 +275,11 @@ QList DolphinContextMenu::insertOpenWithItems(KMenu* popup, } } + openWithMenu->addSeparator(); QAction* action = openWithMenu->addAction(i18n("&Other...")); - openWithMenu->insertSeparator(action); openWithActions << action; + popup->addSeparator(); popup->addMenu(openWithMenu); } else { @@ -307,8 +293,8 @@ QList DolphinContextMenu::insertOpenWithItems(KMenu* popup, else { // At least one of the selected items has a different MIME type. In this case // just show a disabled "Open With..." entry. + popup->addSeparator(); QAction* action = popup->addAction(i18n("Open With...")); - popup->insertSeparator(action); action->setEnabled(false); } @@ -318,6 +304,11 @@ QList DolphinContextMenu::insertOpenWithItems(KMenu* popup, QList DolphinContextMenu::insertActionItems(KMenu* popup, QVector& actionsVector) { + // Parts of the following code have been taken + // from the class KonqOperations located in + // libqonq/konq_operations.h of Konqueror. + // (Copyright (C) 2000 David Faure ) + KMenu* actionsMenu = new KMenu(i18n("Actions")); QList serviceActions; @@ -333,8 +324,7 @@ QList DolphinContextMenu::insertActionItems(KMenu* popup, QStringList entries = dir.entryList(QDir::Files); for (QStringList::ConstIterator entryIt = entries.begin(); entryIt != entries.end(); ++entryIt) { - KSimpleConfig cfg(*dirIt + *entryIt, true); - cfg.setDesktopGroup(); + KConfigGroup cfg(KSharedConfig::openConfig( *dirIt + *entryIt, KConfig::OnlyLocal), "Desktop Entry" ); if ((cfg.hasKey("Actions") || cfg.hasKey("X-KDE-GetActionMenu")) && cfg.hasKey("ServiceTypes")) { //const QStringList types = cfg.readListEntry("ServiceTypes"); QStringList types;