diff --git a/debian/changelog b/debian/changelog index 47f0fa6193..48cab4a5b0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +dde-file-manager (6.0.42) unstable; urgency=medium + + * update file manager baseline version to V6.0.42 + + -- liuyangming Wed, 27 Mar 2024 16:56:00 +0800 + dde-file-manager (6.0.41) unstable; urgency=medium * update file manager baseline version to V6.0.41 diff --git a/src/plugins/filemanager/core/dfmplugin-workspace/events/workspaceeventreceiver.cpp b/src/plugins/filemanager/core/dfmplugin-workspace/events/workspaceeventreceiver.cpp index 7aef81ff9c..bc38fa170e 100644 --- a/src/plugins/filemanager/core/dfmplugin-workspace/events/workspaceeventreceiver.cpp +++ b/src/plugins/filemanager/core/dfmplugin-workspace/events/workspaceeventreceiver.cpp @@ -258,7 +258,10 @@ void WorkspaceEventReceiver::handlePasteFileResult(const QList &srcUrls, c Q_UNUSED(ok) Q_UNUSED(errMsg) - if (!destUrls.isEmpty()) + // if paste files from revocation operate, these files should not be selected. + QList filterUrls = WorkspaceHelper::instance()->filterUndoFiles(destUrls); + + if (!filterUrls.isEmpty()) WorkspaceHelper::instance()->laterRequestSelectFiles(destUrls); } diff --git a/src/plugins/filemanager/core/dfmplugin-workspace/utils/fileoperatorhelper.cpp b/src/plugins/filemanager/core/dfmplugin-workspace/utils/fileoperatorhelper.cpp index 1eaf5f0475..44ca06fced 100644 --- a/src/plugins/filemanager/core/dfmplugin-workspace/utils/fileoperatorhelper.cpp +++ b/src/plugins/filemanager/core/dfmplugin-workspace/utils/fileoperatorhelper.cpp @@ -241,7 +241,7 @@ void FileOperatorHelper::undoFiles(const FileView *view) auto windowId = WorkspaceHelper::instance()->windowId(view); dpfSignalDispatcher->publish(GlobalEventType::kRevocation, - windowId, nullptr); + windowId, undoCallBack); } void FileOperatorHelper::moveToTrash(const FileView *view) @@ -415,6 +415,7 @@ FileOperatorHelper::FileOperatorHelper(QObject *parent) : QObject(parent) { callBack = std::bind(&FileOperatorHelper::callBackFunction, this, std::placeholders::_1); + undoCallBack = std::bind(&FileOperatorHelper::undoCallBackFunction, this, std::placeholders::_1); } void FileOperatorHelper::callBackFunction(const AbstractJobHandler::CallbackArgus args) @@ -457,3 +458,18 @@ void FileOperatorHelper::callBackFunction(const AbstractJobHandler::CallbackArgu break; } } + +void FileOperatorHelper::undoCallBackFunction(QSharedPointer handler) +{ + connect(handler.data(), &AbstractJobHandler::finishedNotify, this, [ = ](const JobInfoPointer jobInfo){ + AbstractJobHandler::JobType type = static_cast(jobInfo->value(AbstractJobHandler::kJobtypeKey).toInt()); + if (type == AbstractJobHandler::JobType::kCutType) { + QList targetUrls(jobInfo->value(AbstractJobHandler::kCompleteTargetFilesKey).value>()); + WorkspaceHelper::instance()->setUndoFiles(targetUrls); + } + }); + + connect(handler.data(), &AbstractJobHandler::workerFinish, this, [ = ](){ + WorkspaceHelper::instance()->setUndoFiles({}); + }); +} diff --git a/src/plugins/filemanager/core/dfmplugin-workspace/utils/fileoperatorhelper.h b/src/plugins/filemanager/core/dfmplugin-workspace/utils/fileoperatorhelper.h index d52d37b2c9..281ebb7960 100644 --- a/src/plugins/filemanager/core/dfmplugin-workspace/utils/fileoperatorhelper.h +++ b/src/plugins/filemanager/core/dfmplugin-workspace/utils/fileoperatorhelper.h @@ -50,8 +50,10 @@ class FileOperatorHelper : public QObject private: explicit FileOperatorHelper(QObject *parent = nullptr); void callBackFunction(const DFMBASE_NAMESPACE::AbstractJobHandler::CallbackArgus args); + void undoCallBackFunction(QSharedPointer handler); DFMBASE_NAMESPACE::AbstractJobHandler::OperatorCallback callBack; + DFMBASE_NAMESPACE::AbstractJobHandler::OperatorHandleCallback undoCallBack; }; #define FileOperatorHelperIns \ diff --git a/src/plugins/filemanager/core/dfmplugin-workspace/utils/workspacehelper.cpp b/src/plugins/filemanager/core/dfmplugin-workspace/utils/workspacehelper.cpp index 858031848e..89a3c83380 100644 --- a/src/plugins/filemanager/core/dfmplugin-workspace/utils/workspacehelper.cpp +++ b/src/plugins/filemanager/core/dfmplugin-workspace/utils/workspacehelper.cpp @@ -402,6 +402,26 @@ bool WorkspaceHelper::supportTreeView(const QString &scheme) const return !notSupportTreeView.contains(scheme); } +void WorkspaceHelper::setUndoFiles(const QList &files) +{ + undoFiles = files; +} + +QList WorkspaceHelper::filterUndoFiles(const QList &urlList) const +{ + QList urls(urlList); + for (auto url : urlList) { + for (auto undoFile : undoFiles) { + if (UniversalUtils::urlEquals(url, undoFile)) { + urls.removeAll(url); + break; + } + } + } + + return urls; +} + void WorkspaceHelper::installWorkspaceWidgetToWindow(const quint64 windowID) { WorkspaceWidget *widget = nullptr; diff --git a/src/plugins/filemanager/core/dfmplugin-workspace/utils/workspacehelper.h b/src/plugins/filemanager/core/dfmplugin-workspace/utils/workspacehelper.h index 9179eee08c..1c0d40d1c3 100644 --- a/src/plugins/filemanager/core/dfmplugin-workspace/utils/workspacehelper.h +++ b/src/plugins/filemanager/core/dfmplugin-workspace/utils/workspacehelper.h @@ -97,6 +97,9 @@ class WorkspaceHelper : public QObject void setNotSupportTreeView(const QString &scheme); bool supportTreeView(const QString &scheme) const; + void setUndoFiles(const QList &files); + QList filterUndoFiles(const QList &urlList) const; + static QMap> kSelectionAndRenameFile; //###: for creating new file. static QMap> kSelectionFile; //###: rename a file which must be existance. @@ -125,6 +128,8 @@ public Q_SLOTS: QList registeredFileViewScheme {}; QList notSupportTreeView{}; + QList undoFiles {}; + Q_DISABLE_COPY(WorkspaceHelper) }; diff --git a/src/plugins/filemanager/core/dfmplugin-workspace/views/baseitemdelegate.cpp b/src/plugins/filemanager/core/dfmplugin-workspace/views/baseitemdelegate.cpp index 1d6d599e9b..5c584e8ff2 100644 --- a/src/plugins/filemanager/core/dfmplugin-workspace/views/baseitemdelegate.cpp +++ b/src/plugins/filemanager/core/dfmplugin-workspace/views/baseitemdelegate.cpp @@ -161,6 +161,21 @@ QRect BaseItemDelegate::getRectOfItem(RectOfItemType type, const QModelIndex &in return QRect(); } +bool BaseItemDelegate::itemExpanded() +{ + return false; +} + +QRect BaseItemDelegate::expandItemRect() +{ + return QRect(); +} + +QModelIndex BaseItemDelegate::expandedIndex() +{ + return QModelIndex(); +} + FileViewHelper *BaseItemDelegate::parent() const { return dynamic_cast(QStyledItemDelegate::parent()); diff --git a/src/plugins/filemanager/core/dfmplugin-workspace/views/baseitemdelegate.h b/src/plugins/filemanager/core/dfmplugin-workspace/views/baseitemdelegate.h index fc83873a3f..3bab1950a3 100644 --- a/src/plugins/filemanager/core/dfmplugin-workspace/views/baseitemdelegate.h +++ b/src/plugins/filemanager/core/dfmplugin-workspace/views/baseitemdelegate.h @@ -108,6 +108,10 @@ class BaseItemDelegate : public QStyledItemDelegate virtual QRect getRectOfItem(RectOfItemType type, const QModelIndex &index) const; + virtual bool itemExpanded(); + virtual QRect expandItemRect(); + virtual QModelIndex expandedIndex(); + QModelIndex editingIndex() const; QWidget *editingIndexWidget() const; diff --git a/src/plugins/filemanager/core/dfmplugin-workspace/views/fileview.cpp b/src/plugins/filemanager/core/dfmplugin-workspace/views/fileview.cpp index 638dced2cf..62e53676b5 100644 --- a/src/plugins/filemanager/core/dfmplugin-workspace/views/fileview.cpp +++ b/src/plugins/filemanager/core/dfmplugin-workspace/views/fileview.cpp @@ -1034,6 +1034,10 @@ QModelIndex FileView::iconIndexAt(const QPoint &pos, const QSize &itemSize) cons iconVerticalTopMargin = DSizeModeHelper::element(kCompactIconVerticalTopMargin, kIconVerticalTopMargin); #endif + if (itemDelegate()->itemExpanded() && itemDelegate()->expandItemRect().contains(pos)) { + return itemDelegate()->expandedIndex(); + } + QPoint actualPos = QPoint(pos.x() + horizontalOffset(), pos.y() + verticalOffset() - iconVerticalTopMargin); auto index = FileViewHelper::caculateIconItemIndex(this, itemSize, actualPos); diff --git a/src/plugins/filemanager/core/dfmplugin-workspace/views/iconitemdelegate.cpp b/src/plugins/filemanager/core/dfmplugin-workspace/views/iconitemdelegate.cpp index 4e5e8c6e30..b9ce937b56 100644 --- a/src/plugins/filemanager/core/dfmplugin-workspace/views/iconitemdelegate.cpp +++ b/src/plugins/filemanager/core/dfmplugin-workspace/views/iconitemdelegate.cpp @@ -350,6 +350,34 @@ QList IconItemDelegate::itemGeomertys(const QStyleOptionViewItem &opt, co return geometries; } +bool IconItemDelegate::itemExpanded() +{ + Q_D(IconItemDelegate); + + return d->expandedIndex.isValid() && d->expandedItem->isVisible(); +} + +QRect IconItemDelegate::expandItemRect() +{ + Q_D(IconItemDelegate); + + if (d->expandedIndex.isValid() && d->expandedItem->isVisible()) { + QRect itemRect = d->expandedItem->getOption().rect; + QRect textRect = d->expandedItem->textGeometry().toRect(); + textRect.moveTopLeft(itemRect.topLeft() + textRect.topLeft()); + return textRect; + } + + return QRect(); +} + +QModelIndex IconItemDelegate::expandedIndex() +{ + Q_D(IconItemDelegate); + + return d->expandedIndex; +} + QString IconItemDelegate::displayFileName(const QModelIndex &index) const { bool showSuffix { Application::instance()->genericAttribute(Application::kShowedFileSuffix).toBool() }; diff --git a/src/plugins/filemanager/core/dfmplugin-workspace/views/iconitemdelegate.h b/src/plugins/filemanager/core/dfmplugin-workspace/views/iconitemdelegate.h index f5cd303480..a951568d48 100644 --- a/src/plugins/filemanager/core/dfmplugin-workspace/views/iconitemdelegate.h +++ b/src/plugins/filemanager/core/dfmplugin-workspace/views/iconitemdelegate.h @@ -51,6 +51,10 @@ class IconItemDelegate : public BaseItemDelegate QRectF itemIconRect(const QRectF &itemRect) const override; QList itemGeomertys(const QStyleOptionViewItem &opt, const QModelIndex &index) const override; + bool itemExpanded() override; + QRect expandItemRect() override; + QModelIndex expandedIndex() override; + QString displayFileName(const QModelIndex &index) const; QList calFileNameRect(const QString &name, const QRectF &rect, Qt::TextElideMode elideMode) const;