From 9a5be1d858d340ee638144bff8adcee43c049e98 Mon Sep 17 00:00:00 2001 From: liyigang Date: Fri, 20 Sep 2024 10:22:24 +0800 Subject: [PATCH] fix: The application name on the dde-desktop cannot be renamed Desktop files on the desktop are hard linked and can be renamed based on whether the file is writable Log: The application name on the dde-desktop cannot be renamed Bug: https://pms.uniontech.com/bug-view-256967.html --- src/dfm-base/file/local/desktopfileinfo.cpp | 4 ++++ .../menuscene/fileoperatormenuscene.cpp | 7 ++++++- .../core/ddplugin-canvas/menu/canvasmenuscene.cpp | 13 ++++++++++++- .../menus/workspacemenuscene.cpp | 9 ++++++++- 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/src/dfm-base/file/local/desktopfileinfo.cpp b/src/dfm-base/file/local/desktopfileinfo.cpp index bb225b0447..6427c66572 100644 --- a/src/dfm-base/file/local/desktopfileinfo.cpp +++ b/src/dfm-base/file/local/desktopfileinfo.cpp @@ -258,6 +258,10 @@ bool DesktopFileInfo::canAttributes(const CanableInfoType type) const return false; return ProxyFileInfo::canAttributes(type); + case FileCanType::kCanRename: + if (!isAttributes(OptInfoType::kIsWritable)) + return false; + return ProxyFileInfo::canAttributes(type); default: return ProxyFileInfo::canAttributes(type); } diff --git a/src/plugins/common/core/dfmplugin-menu/menuscene/fileoperatormenuscene.cpp b/src/plugins/common/core/dfmplugin-menu/menuscene/fileoperatormenuscene.cpp index e329c605b8..262d3f1243 100644 --- a/src/plugins/common/core/dfmplugin-menu/menuscene/fileoperatormenuscene.cpp +++ b/src/plugins/common/core/dfmplugin-menu/menuscene/fileoperatormenuscene.cpp @@ -78,7 +78,8 @@ bool FileOperatorMenuScene::initialize(const QVariantHash ¶ms) if (!d->isEmptyArea) { QString errString; - d->focusFileInfo = DFMBASE_NAMESPACE::InfoFactory::create(d->focusFile, Global::CreateFileInfoType::kCreateFileInfoAuto, &errString); + d->focusFileInfo = DFMBASE_NAMESPACE::InfoFactory::create(d->focusFile, + Global::CreateFileInfoType::kCreateFileInfoAuto, &errString); if (d->focusFileInfo.isNull()) { fmDebug() << errString; return false; @@ -175,6 +176,10 @@ void FileOperatorMenuScene::updateState(QMenu *parent) || !d->focusFileInfo->canAttributes(CanableInfoType::kCanRename) || !d->indexFlags.testFlag(Qt::ItemIsEditable)) rename->setDisabled(true); + + if (d->focusFileInfo && FileUtils::isDesktopFileInfo(d->focusFileInfo) + && !d->focusFileInfo->canAttributes(CanableInfoType::kCanRename)) + rename->setDisabled(true); } // set as wallpaper diff --git a/src/plugins/desktop/core/ddplugin-canvas/menu/canvasmenuscene.cpp b/src/plugins/desktop/core/ddplugin-canvas/menu/canvasmenuscene.cpp index 898d2aec6f..2abe38ef26 100644 --- a/src/plugins/desktop/core/ddplugin-canvas/menu/canvasmenuscene.cpp +++ b/src/plugins/desktop/core/ddplugin-canvas/menu/canvasmenuscene.cpp @@ -22,6 +22,8 @@ #include #include +#include +#include #include @@ -78,6 +80,11 @@ void CanvasMenuScenePrivate::filterDisableAction(QMenu *menu) else disableActions = &normalDisableActions; + bool renameEnabled = true; + if (focusFileInfo && FileUtils::isDesktopFileInfo(focusFileInfo) + && !focusFileInfo->canAttributes(CanableInfoType::kCanRename)) + renameEnabled = false; + if (!disableActions->isEmpty()) { for (auto action : actions) { if (action->isSeparator()) @@ -94,6 +101,8 @@ void CanvasMenuScenePrivate::filterDisableAction(QMenu *menu) // disable,remove it. menu->removeAction(action); } + if (actionId == dfmplugin_menu::ActionID::kRename) + action->setEnabled(renameEnabled); } } } @@ -144,8 +153,10 @@ bool CanvasMenuScene::initialize(const QVariantHash ¶ms) { d->currentDir = params.value(MenuParamKey::kCurrentDir).toUrl(); d->selectFiles = params.value(MenuParamKey::kSelectFiles).value>(); - if (!d->selectFiles.isEmpty()) + if (!d->selectFiles.isEmpty()) { d->focusFile = d->selectFiles.first(); + d->focusFileInfo = InfoFactory::create(d->focusFile); + } d->onDesktop = params.value(MenuParamKey::kOnDesktop).toBool(); d->isEmptyArea = params.value(MenuParamKey::kIsEmptyArea).toBool(); d->indexFlags = params.value(MenuParamKey::kIndexFlags).value(); diff --git a/src/plugins/filemanager/core/dfmplugin-workspace/menus/workspacemenuscene.cpp b/src/plugins/filemanager/core/dfmplugin-workspace/menus/workspacemenuscene.cpp index 48d6abbffb..f352c25961 100644 --- a/src/plugins/filemanager/core/dfmplugin-workspace/menus/workspacemenuscene.cpp +++ b/src/plugins/filemanager/core/dfmplugin-workspace/menus/workspacemenuscene.cpp @@ -170,12 +170,19 @@ bool WorkspaceMenuScene::create(DMenu *parent) void WorkspaceMenuScene::updateState(DMenu *parent) { auto currentWidget = WorkspaceHelper::instance()->findWorkspaceByWindowId(d->windowId); + bool renameEnabled = true; + if (d->focusFileInfo && FileUtils::isDesktopFileInfo(d->focusFileInfo) + && !d->focusFileInfo->canAttributes(CanableInfoType::kCanRename)) + renameEnabled = false; if (currentWidget && !currentWidget->canAddNewTab()) { auto actions = parent->actions(); for (auto act : actions) { const auto &actId = act->property(ActionPropertyKey::kActionID); - if (dfmplugin_menu::ActionID::kOpenInNewTab == actId) + if (dfmplugin_menu::ActionID::kOpenInNewTab == actId) { act->setEnabled(false); + } else if (!renameEnabled && dfmplugin_menu::ActionID::kRename == actId){ + act->setEnabled(renameEnabled); + } } }