当前位置: 首页 > news >正文

deepinV23文件管理器改造

目录

  • 1. 概述
  • 2. 过程
    • 2.1 下载源码
    • 2.2 安装依赖
    • 2.3 环境配置
    • 2.4 修改代码
      • 2.4.1 文件管理器增加ctrl+d删除文件
      • 2.4.2 桌面增加ctrl+d删除文件
      • 2.4.3 桌面增加ctrl+shift+n创建目录
      • 2.4.4 恢复悬浮和选中配色到v20.9
      • 2.4.5 去掉回收站清空挂件
    • 2.5 编译安装
    • 2.6 重登录测试
  • 3. 总结
  • 4. 不定期更新内容

1. 概述

从dde-file-manager 6.0.43以后,这些特性已经增加到主线,并且修复了回收站清空文件时,文件停留一秒的bug

本篇博客主要介绍在deepinV23和deepinV20.9上改造编译安装dde-file-manager的过程。

其中编译的过程,主要参考了:Deepin深度操作系统中编译和安装dde-file-manager-CSDN博客,感谢这位大佬的分享

自己改造的部分,主要是:

  • 增加文件管理器和桌面通过ctrl+d删除文件或目录
  • 增加桌面通过ctrl+shift+n创建目录

没有实现ctrl+shift+d彻底删除文件,因为这个自己不常用。有需要的同学可以根据本篇博客自行处理

2. 过程

2.1 下载源码

需要下载的源码包括三部分

  • dde-file-manager

    可以直接从github下载源码,也可以通过apt source dde-file-manager的方式

  • deepin-pdfium

    git clone https://github.com/linuxdeepin/deepin-pdfium.git

  • util-dfm

    git clone https://github.com/linuxdeepin/util-dfm.git

2.2 安装依赖

首先参考源码包提供的README.zh_CN.md,执行sudo apt build-dep ./安装依赖

然后执行以下命令,安装其他依赖:

sudo apt install liblcms2-dev libopenjp2-7-dev libchardet-dev libudisks2-dev libisoburn-dev libmediainfo-dev fakeroot build-essential libfreetype6-dev libglibmm-2.4-dev

编译deepin-pdfium和util-dfm

# cd deepin-pdfinum dpkg-buildpackage -us -uc sudo dpkg -i ../libdeepin-pdfium*.deb # cd ../util-dfm dpkg-buildpackage -us -uc sudo dpkg -i ../libdfm*.deb

编译过程中,缺少依赖环境会提示,继续安装即可

2.3 环境配置

首先修复qmake和lrelease路径问题

通过sudo find / -name qmake查找工具的真实路径,不然编译时qmake和lrelease会报错

我本机环境如下

sudo ln -fs /usr/lib/x86_64-linux-gnu/qt5/bin/qmake /usr/bin/qmake sudo ln -fs /usr/lib/x86_64-linux-gnu/qt5/bin/lrelease /usr/bin/lreleases

然后设置不编译保险箱:vim src/plugins/filemanager/CMakeLists.txt,注释add_subdirectory(dfmplugin-vault),如下

cmake_minimum_required(VERSION 3.10) # add sub dir for business plugins add_subdirectory(core/dfmplugin-core) add_subdirectory(core/dfmplugin-recent) add_subdirectory(core/dfmplugin-sidebar) add_subdirectory(core/dfmplugin-titlebar) add_subdirectory(core/dfmplugin-workspace) add_subdirectory(core/dfmplugin-detailspace) add_subdirectory(core/dfmplugin-computer) add_subdirectory(core/dfmplugin-trash) add_subdirectory(dfmplugin-search) add_subdirectory(dfmplugin-optical) #add_subdirectory(dfmplugin-vault) add_subdirectory(dfmplugin-myshares) add_subdirectory(dfmplugin-smbbrowser) add_subdirectory(dfmplugin-avfsbrowser)

这个在20.9上需要配置,否则就会编译出来保险箱,23好像不用

假如编译出来保险箱,采用:sudo mv /usr/lib/x86_64-linux-gnu/dde-file-manager/plugins/filemanager-edge/ libdfmplugin-vault.so /usr/lib/x86_64-linux-gnu/dde-file-manager/plugins/filemanager-edge/ libdfmplugin-vault 即可

处理编译报错问题:

vim docs/CMakeLists.txt,注释最后一行。

注意:如果后续需要打包为deb,这一行在打包的时候,要取消注释。可能还要安装qt5-doc等相关依赖

2.4 修改代码

2.4.1 文件管理器增加ctrl+d删除文件

vim ./src/plugins/filemanager/core/dfmplugin-workspace/utils/shortcuthelper.cpp

case Qt::Key_H上面加上一个case语句

case Qt::Key_D: { moveToTrash(); return true; }

2.4.2 桌面增加ctrl+d删除文件

vim ./src/plugins/desktop/core/ddplugin-canvas/view/operator/shortcutoper.cpp

case Qt::Key_ H上面加上一个case语句:

case Qt::Key_D: FileOperatorPorxyIns->moveToTrash(view); return true;

2.4.3 桌面增加ctrl+shift+n创建目录

vim ./src/plugins/desktop/core/ddplugin-canvas/view/operator/shortcutoper.cpp

大概在155行左右的modifiers = (Qt::ControlModifier | Qt::ShiftModifiler)语句模块下修改,增加ctrl+shift+n的操作选项

if (key == Qt::Key_I) { view->d->keySelector->toggleSelect(); return ture; } if (key == Qt::Key_N) { QPoint mousePos = QCursor::pos(); QPoint localPos = view->mapFromGlobal(mousePos); auto gridPos = view->d->gridAt(localPos); FileOperatorProxyIns->touchFolder(view, gridPos); return true; }

这部分代码自己写的,专业不专业不知道,但是能用

要注意,需要在这个cpp文件开始添加头文件

#include <QPoint> #include <QCursor>

2.4.4 恢复悬浮和选中配色到v20.9

vim ./src/plugins/filemanager/core/dfmplugin-workspace/views/iconitemdelegate.cpp

大概410-420行左右,修改如下:

if (isDropTarget && !isSelected) { backgroundColor.setAlpha(20); // DropTarg背景设置透明度为15% (40/255);//liwl,原来40 } else if (option.state & QStyle::StateFlag::State_Selected) { backgroundColor.setAlpha(backgroundColor.alpha() + 30);//liwl,原来40 } else if (isHover) { DGuiApplicationHelper::ColorType ct = DGuiApplicationHelper::toColorType(baseColor); if (ct == DGuiApplicationHelper::DarkType && !isUpshow) { baseColor = DGuiApplicationHelper::adjustColor(baseColor, 0, 0, +5, 0, 0, 0, 0); backgroundColor = baseColor; } else { backgroundColor = backgroundColor.lighter(); backgroundColor.setAlpha(7); // Hover背景设置透明度为8% (22/255);//liwl,原来22 } } else { backgroundColor = baseColor; } ... ... ... if (isDropTarget || isSelected || isHover) { // 只有选中和mouseover才绘制背景 painter->setRenderHint(QPainter::Antialiasing, true); painter->fillPath(path, backgroundColor); if (isHover) { QRectF outLineRect = backgroundRect; outLineRect.setSize(outLineRect.size() - QSizeF(1.5, 1.5)); outLineRect.moveCenter(backgroundRect.center()); QPainterPath outLinePath; outLinePath.addRoundedRect(outLineRect, kIconModeBackRadius, kIconModeBackRadius); backgroundColor.setAlpha(7); // Hover背景边框设置透明度为16% (40/255);//liwl,原来40 painter->setPen(backgroundColor); painter->drawPath(outLinePath); } painter->setRenderHint(QPainter::Antialiasing, false); }

2.4.5 去掉回收站清空挂件

当回收站有垃圾时,回收站上方会显示【回收站】和【清空】按钮。当点击【清空】按钮时,回收站会被清空,当回收站没有文件时,这两个挂件不显示

这个功能在v23上有些问题:点击清空以后,这两个挂件里面消失,然后文件还在,随后文件才被清理。

猜测是按钮的事件触发跟文件清空未做好同步导致。

我个人觉得直接使用右键【清空回收站】或者再次全选删除,比较适合自己的使用习惯。所以直接在代码中去掉这些挂件。

vim src/plugins/filemanager/core/dfmplugin-trash/trash.cpp,大约在55行,注释掉:addCustomTopWidget();,如下:

bool Trash::start() { // show first window when all plugin initialized dfmplugin_menu_util::menuSceneRegisterScene(TrashMenuCreator::name(), new TrashMenuCreator()); dpfSlotChannel->push("dfmplugin_workspace", "slot_RegisterFileView", TrashHelper::scheme()); dpfSlotChannel->push("dfmplugin_workspace", "slot_RegisterMenuScene", TrashHelper::scheme(), TrashMenuCreator::name()); //addCustomTopWidget(); addFileOperations(); return true; }

2.5 编译安装

环境准备好,代码修改完成,准备编译安装。此时可以参考README.zh_CN.md依次执行

cmake -B build -DCMAKE_INSTALL_PREFIX=/usr cmake --build build #可以cmake --build build -j8,拉升编译速度 sudo cmake --build build --target install

如果改动了翻译文件,需要执行src/目录下的脚本,生成翻译文件,再把翻译文件拷贝到系统路径下:/usr/share/dde-file-manager/translations/

2.6 重登录测试

3. 总结

v23beta3集成的文件管理版本为:dde-file-manager-6.0.40。版本有很多特性我和喜欢的

  • 通过shift+t,直接从终端打开当前路径
  • 增加了列表模式下显示子目录的特性
  • 修复了点击标记时,标记的文档角标颜色延迟出现的问题
  • 可定制的左侧栏
  • 代码更加整洁美观了

不喜欢的文管特性:

  • 点击选中以后的阴影有些重了,还是喜欢v20.9的清淡一些的

    自己已经修改

目前来说,deepinv23还不是我喜欢的样子,所以我把v23的文件管理拿到20.9上使用,同时增加了自己想要的功能,呜呼爽哉

4. 不定期更新内容


【2024/03/29,更新】

dde-file-manager更新到6.0.43时,已经新增了上述的特性,并且修复了一些bug:

新增特性和部分问题修复:

  1. ctrl+d删除文件(在文管和桌面同时生效)

  2. ctrl+shift+n,可在桌面创建目录(跟随光标)

  3. 修复快捷键预览中没有shift+t,从终端打开当前目录的内容

  4. 修复文件或目录属性框,编辑文件名时非dtk样式

  5. 更改文件或者目录属性框,标签内容栏的宽度,调整为一行

  6. 修复回收站清空文件时,文件停留一秒的问题

  7. 修复编译安装后,默认从【计算机】启动时,不显示磁盘列表问题

这些更新,使得文件管理器更加的高效。

我个人不喜欢【计算机】界面的大圆角,于是硬编码修改为【中圆角】。

修改src/plugins/filemanager/core/dfmplugin-computer/delegate/computeritemdelegate.cpp,共2处

painter->drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 8, 8); //liwl,2024/03/29,圆角从大变为中:18-> 8

如果在deepin 20.9编译,如何创建可以直接用于安装的deb呢?

  1. 下载最新版本的dde-file-manager到本地

  2. 下载deepin-pdfium到本地

  3. 下载util-dfm到本地

分别编译,然后执行dpkg-buildpackage -us -uc分别打包

最后把上面3个仓库生成的deb包,放在一起,拷贝到20.9以后,执行:sudo dpkg -i xxx.deb即可


【2024/04/03 更新】

把【计算机】界面的【我的目录】下面的改成正方形(原来是矩形)

修改代码:vim ./src/plugins/filemanager/core/dfmplugin-computer/delegate/computeritemdelegate.cpp

.... const int kSmallItemWidth { 108 }; //liwl const int kSmallItemHeight { 108 }; //liwl,这里之前是138,修改未108 ... void ComputerItemDelegate::paintSmallItem(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { prepareColor(painter, option, index); // draw round rect painter->drawRoundedRect(option.rect.adjusted(1, 1, -1, -1), 8, 8); //liwl const int IconSize = view->iconSize().width(); const int TopMargin = 8; //liwl,这里之前是16,修改为8 const int LeftMargin = 22; //liwl const auto &icon = index.data(Qt::ItemDataRole::DecorationRole).value<QIcon>(); auto tl = option.rect.topLeft() + QPoint(LeftMargin, TopMargin); const auto &&pm = icon.pixmap(IconSize); // const int ShadowBlurRadisu = 4; // painter->drawPixmap(tl + QPoint(-ShadowBlurRadisu, -ShadowBlurRadisu + 2), renderBlurShadow(pm, ShadowBlurRadisu)); painter->drawPixmap(tl, pm); QFont fnt(view->font()); fnt.setPixelSize(QFontInfo(fnt).pixelSize()); fnt.setWeight(QFont::Medium); painter->setFont(fnt); QFontMetrics fm(fnt); const int TextMaxWidth = option.rect.width() - 20; const QString &ElidedText = fm.elidedText(index.data(Qt::DisplayRole).toString(), Qt::ElideMiddle, TextMaxWidth); const int LabelWidth = fm.horizontalAdvance(ElidedText); const int LabelTopMargin = 10; auto labelRect = QRect(option.rect.x() + (option.rect.width() - LabelWidth) / 2, option.rect.y() + TopMargin + IconSize + LabelTopMargin, LabelWidth, 40); painter->setPen(qApp->palette().color(/*(option.state & QStyle::StateFlag::State_Selected) ? QPalette::ColorRole::BrightText : */ QPalette::ColorRole::Text)); // PO: no highlight painter->drawText(labelRect, Qt::AlignTop, ElidedText); }

标签: deepin

http://www.jsqmd.com/news/346850/

相关文章:

  • ‌2026年软件测试热度趋势与生物计算伦理融合报告
  • 高原缺氧环境下的AI压力测试:拉萨样本实战与爆款密码
  • 2026年机械真空泵厂家最新推荐:罗茨真空泵/螺杆式真空泵/螺杆泵真空泵/干式无油螺杆真空泵/干式真空泵/干式螺杆真空泵/选择指南 - 优质品牌商家
  • 从码农到太空农场AI设计师:我的跨域实验与2026公众号热度洞察
  • 基于 .NET Framework 4.8 开发的 WinForms 绑定工具,以极简的代码量实现了完整的双向绑定与数据持久化能力,大幅缩减开发周期与重复编码工作,是桌面工具类项目的高效解决方案。
  • 免费写论文AI工具测评:文献综述一键生成+真实文献交叉引用,这7款神器让论文写作效率翻倍! - 麟书学长
  • 50岁更抢手:2026年太空开发经验资本化术
  • 进程间通信IPC(3)system V标准下基于责任链模式的消息队列,基于建造者模式的信号量
  • 从文献梳理到论文定稿:2026 全流程 AI 写作软件深度推荐
  • 你太久没关注自己了,太久没好好心疼自己了
  • 职业跨界手册:医疗开发者转型基因编辑实战
  • 计算机毕业设计springbootJavaWeb的美食街摊位管理系统 基于SpringBoot框架的集市商铺数字化运营平台设计与实现 智慧夜市摊位资源调度与租赁服务平台开发
  • modbus学习第5天
  • 别再用“雌竞变现”去曲解女性的出片行为了
  • 计算机毕业设计springboot租房数据可视化系统 基于SpringBoot的房屋租赁信息智能分析与展示平台 Java Web驱动的城市租房数据挖掘与可视化管理系统
  • SQLite并发锁问题解决方案
  • PCIe的中断机制
  • 提示工程架构师必备:制定实施计划的6个法律合规要点,避免踩红线
  • azerothCode-更改任务语言显示
  • PWA 渐进式Web应用(Progressive Web App)快应用、离线应用(用Web技术构建原生应用体验网站)manifest.json、Service Worker、Instant App
  • ue 不同版本兼容性测试总结
  • 学术写作效率革命!2026 高精准度 AI 论文写作工具推荐指南
  • SameSite=Lax属性(前端Set-Cookie属性)(跨站链接跳转保留登录态、防御跨站请求POST CSRF、防御跨站请求资源CSRF)子资源请求、安全铁三角HttpOnlySecure
  • 价值投资者如何看待并购和分拆
  • 如何用AR虚拟形象打造开发者IP?2026元宇宙营销
  • CSRF(Cross-site Request Forgery)跨站请求伪造攻击(浏览器自动携带同源Cookie机制)与XSS攻击区别、现代网站安全模板、sameSite、Referer校验
  • 端小白也能搞定:CSS文字横向无缝滚动+悬停暂停(附实测代码)
  • 【后端】【工具】从 “Vibe PPT“ 到 “蕉幻“:一个原生 AI PPT 生成应用的深度解析 - 教程
  • 2025四川最新合同纠纷/经济纠纷律所TOP10推荐:优质律师事务所权威榜单发布,精准解决各类商事争议 - 品牌推荐2026
  • 题解:CF251D Two Sets