From 0a3a481ee2c850d6cacf48c2ffcf08b1ee8adce6 Mon Sep 17 00:00:00 2001 From: George Goldberg Date: Mon, 2 Jun 2008 10:07:13 +0000 Subject: [PATCH] Fix the edit-menu action disabling/enabling bug in dolphinpart finally! Also, move FileItemCapabilities from dolphin to KonqFileItemCapabilities at dfaure's request (making it implicitly shared along the way). BUGS:161594 svn path=/trunk/KDE/kdebase/apps/; revision=815584 --- src/CMakeLists.txt | 3 +- src/dolphincontextmenu.cpp | 6 +-- src/dolphincontextmenu.h | 6 +-- src/dolphinmainwindow.cpp | 4 +- src/dolphinpart.cpp | 38 ++++++++++++------ src/fileitemcapabilities.cpp | 60 ----------------------------- src/fileitemcapabilities.h | 75 ------------------------------------ 7 files changed, 35 insertions(+), 157 deletions(-) delete mode 100644 src/fileitemcapabilities.cpp delete mode 100644 src/fileitemcapabilities.h diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 90fade469..b548c723f 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -79,7 +79,7 @@ set(dolphinpart_SRCS kde4_add_plugin(dolphinpart ${dolphinpart_SRCS}) -target_link_libraries(dolphinpart dolphinprivate) +target_link_libraries(dolphinpart dolphinprivate konq) install(TARGETS dolphinpart DESTINATION ${PLUGIN_INSTALL_DIR} ) @@ -104,7 +104,6 @@ set(dolphin_SRCS dolphinfileplacesview.cpp dolphinsettingsdialog.cpp draganddrophelper.cpp - fileitemcapabilities.cpp filterbar.cpp generalsettingspage.cpp generalviewsettingspage.cpp diff --git a/src/dolphincontextmenu.cpp b/src/dolphincontextmenu.cpp index 13b1318da..a45d715dc 100644 --- a/src/dolphincontextmenu.cpp +++ b/src/dolphincontextmenu.cpp @@ -25,7 +25,6 @@ #include "dolphinview.h" #include "dolphinviewcontainer.h" #include "dolphin_generalsettings.h" -#include "fileitemcapabilities.h" #include #include @@ -39,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -451,10 +451,10 @@ QAction* DolphinContextMenu::createPasteAction() return action; } -FileItemCapabilities& DolphinContextMenu::capabilities() +KonqFileItemCapabilities& DolphinContextMenu::capabilities() { if (m_capabilities == 0) { - m_capabilities = new FileItemCapabilities(m_selectedItems); + m_capabilities = new KonqFileItemCapabilities(m_selectedItems); } return *m_capabilities; } diff --git a/src/dolphincontextmenu.h b/src/dolphincontextmenu.h index 8b623114c..b3779c9ab 100644 --- a/src/dolphincontextmenu.h +++ b/src/dolphincontextmenu.h @@ -34,7 +34,7 @@ class KMenu; class KFileItem; class QAction; class DolphinMainWindow; -class FileItemCapabilities; +class KonqFileItemCapabilities; /** * @brief Represents the context menu which appears when doing a right @@ -113,7 +113,7 @@ private: QAction* createPasteAction(); private: - FileItemCapabilities& capabilities(); + KonqFileItemCapabilities& capabilities(); private: struct Entry @@ -134,7 +134,7 @@ private: }; DolphinMainWindow* m_mainWindow; - FileItemCapabilities* m_capabilities; + KonqFileItemCapabilities* m_capabilities; KFileItem m_fileInfo; KUrl m_baseUrl; KFileItemList m_selectedItems; diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 2cf81427b..81d1e2670 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -32,7 +32,6 @@ #include "dolphinsettingsdialog.h" #include "dolphinstatusbar.h" #include "dolphinviewcontainer.h" -#include "fileitemcapabilities.h" #include "infosidebarpage.h" #include "metadatawidget.h" #include "mainwindowadaptor.h" @@ -63,6 +62,7 @@ #include #include #include +#include #include #include #include @@ -1114,7 +1114,7 @@ void DolphinMainWindow::updateEditActions() QAction* deleteAction = col->action("delete"); QAction* cutAction = col->action(KStandardAction::name(KStandardAction::Cut)); - FileItemCapabilities capabilities(list); + KonqFileItemCapabilities capabilities(list); const bool enableMoveToTrash = capabilities.isLocal() && capabilities.supportsMoving(); renameAction->setEnabled(capabilities.supportsMoving()); diff --git a/src/dolphinpart.cpp b/src/dolphinpart.cpp index fb34941c2..766a8f0dd 100644 --- a/src/dolphinpart.cpp +++ b/src/dolphinpart.cpp @@ -23,6 +23,7 @@ #include "dolphinview.h" #include "dolphinmodel.h" +#include #include #include @@ -185,24 +186,37 @@ void DolphinPart::slotGoTriggered(QAction* action) void DolphinPart::slotSelectionChanged(const KFileItemList& selection) { const bool hasSelection = !selection.isEmpty(); + + QAction* renameAction = actionCollection()->action("rename"); + QAction* moveToTrashAction = actionCollection()->action("move_to_trash"); + QAction* deleteAction = actionCollection()->action("delete"); + QAction* editMimeTypeAction = actionCollection()->action("editMimeType"); + QAction* propertiesAction = actionCollection()->action("properties"); + 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); + editMimeTypeAction->setEnabled(false); + propertiesAction->setEnabled(false); } else { stateChanged("has_selection"); - } - QStringList actions; - actions << "rename" << "move_to_trash" << "delete" << "editMimeType" << "properties"; - foreach(const QString& actionName, actions) { - QAction* action = actionCollection()->action(actionName); - Q_ASSERT(action); - if (action) { - action->setEnabled(hasSelection); - } + KonqFileItemCapabilities capabilities(selection); + const bool enableMoveToTrash = capabilities.isLocal() && capabilities.supportsMoving(); + + renameAction->setEnabled(capabilities.supportsMoving()); + moveToTrashAction->setEnabled(enableMoveToTrash); + deleteAction->setEnabled(capabilities.supportsDeleting()); + editMimeTypeAction->setEnabled(true); + propertiesAction->setEnabled(true); + emit m_extension->enableAction("cut", capabilities.supportsMoving()); + emit m_extension->enableAction("copy", true); } - - emit m_extension->enableAction("cut", hasSelection); - emit m_extension->enableAction("copy", hasSelection); } void DolphinPart::updatePasteAction() diff --git a/src/fileitemcapabilities.cpp b/src/fileitemcapabilities.cpp deleted file mode 100644 index 6ab37ad2c..000000000 --- a/src/fileitemcapabilities.cpp +++ /dev/null @@ -1,60 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2008 by Peter Penz * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - ***************************************************************************/ - -#include "fileitemcapabilities.h" - -#include -#include - -#include - -FileItemCapabilities::FileItemCapabilities(const KFileItemList& items) : - m_supportsReading(true), - m_supportsDeleting(true), - m_supportsWriting(true), - m_supportsMoving(true), - m_isLocal(true) -{ - QFileInfo parentDirInfo; - foreach (const KFileItem &item, items) { - const KUrl url = item.url(); - m_isLocal = m_isLocal && url.isLocalFile(); - m_supportsReading = m_supportsReading && KProtocolManager::supportsReading(url); - m_supportsDeleting = m_supportsDeleting && KProtocolManager::supportsDeleting(url); - m_supportsWriting = m_supportsWriting && KProtocolManager::supportsWriting(url); - m_supportsMoving = m_supportsMoving && KProtocolManager::supportsMoving(url); - - // The following code has been taken from kdebase/apps/lib/konq/konq_popupmenu.cpp: - // For local files we can do better: check if we have write permission in parent directory - if (m_isLocal && (m_supportsDeleting || m_supportsMoving)) { - const QString directory = url.directory(); - if (parentDirInfo.filePath() != directory) { - parentDirInfo.setFile(directory); - } - if (!parentDirInfo.isWritable()) { - m_supportsDeleting = false; - m_supportsMoving = false; - } - } - } -} - -FileItemCapabilities::~FileItemCapabilities() -{ -} diff --git a/src/fileitemcapabilities.h b/src/fileitemcapabilities.h deleted file mode 100644 index 5ed6d1902..000000000 --- a/src/fileitemcapabilities.h +++ /dev/null @@ -1,75 +0,0 @@ -/*************************************************************************** - * Copyright (C) 2008 by Peter Penz * - * * - * This program is free software; you can redistribute it and/or modify * - * it under the terms of the GNU General Public License as published by * - * the Free Software Foundation; either version 2 of the License, or * - * (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the * - * Free Software Foundation, Inc., * - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * - ***************************************************************************/ - -#ifndef FILEITEMCAPABILITIES_H -#define FILEITEMCAPABILITIES_H - -class KFileItemList; - -/** - * @brief Provides information about the access capabilities of file items. - * - * As soon as one file item does not support a specific capability, it is - * marked as unsupported for all items. - */ -class FileItemCapabilities -{ -public: - FileItemCapabilities(const KFileItemList& items); - virtual ~FileItemCapabilities(); - bool supportsReading() const; - bool supportsDeleting() const; - bool supportsWriting() const; - bool supportsMoving() const; - bool isLocal() const; - -private: - bool m_supportsReading : 1; - bool m_supportsDeleting : 1; - bool m_supportsWriting : 1; - bool m_supportsMoving : 1; - bool m_isLocal : 1; -}; - -inline bool FileItemCapabilities::supportsReading() const -{ - return m_supportsReading; -} - -inline bool FileItemCapabilities::supportsDeleting() const -{ - return m_supportsDeleting; -} - -inline bool FileItemCapabilities::supportsWriting() const -{ - return m_supportsWriting; -} - -inline bool FileItemCapabilities::supportsMoving() const -{ - return m_supportsMoving; -} - -inline bool FileItemCapabilities::isLocal() const -{ - return m_isLocal; -} - -#endif -- 2.47.3