[ Content contribution] deepin V23 文件管理器改造
Tofloor
poster avatar
liwl
deepin
2024-03-05 14:51
Author
  • 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. 总结

1. 概述

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

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

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

  • 增加文件管理器和桌面通过ctrl+d删除文件或目录
  • 增加桌面通过ctrl+shift+n创建目录
  • 恢复文件选中或者悬浮配色到v20.9
  • 去掉回收站清空挂件

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,注释最后一行

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 
#include 

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 -j8,拉升编译速度
sudo cmake --build build --target install

2.6 重登录测试

3. 总结

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

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

不喜欢的文管特性:

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

    自己已经修改

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

Reply Favorite View the author
All Replies
神末shenmo
Moderator
Spark-App
2024-03-05 14:58
#1

有一个问题就是,dde-file-manager最新的版本在打开方式中不显示 NoDisplay=True的desktop了怎么破

Reply View the author
liwl
deepin
2024-03-05 15:29
#2
神末shenmo

有一个问题就是,dde-file-manager最新的版本在打开方式中不显示 NoDisplay=True的desktop了怎么破

官方版本吗?是bug?

手动选择一下desktop呢

Reply View the author
兆兆嘟嘟嘟
deepin
2024-03-05 19:39
#3

彻底删除用快捷键shift+delete。

Reply View the author
liwl
deepin
2024-03-05 20:21
#4
It has been deleted!
兆兆嘟嘟嘟
deepin
2024-03-05 20:52
#5
liwl It has been deleted!

厉害,在windows上我都不知道这个。

Reply View the author
liwl
deepin
2024-03-06 08:40
#6
兆兆嘟嘟嘟

厉害,在windows上我都不知道这个。

  • 我试了win10,好像不行,记错了可能sad
Reply View the author
sammy-621
deepin
2024-03-12 21:05
#7

最新的版本的V23,安装依赖时没成功:

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

提示如下:

下列软件包有未满足的依赖关系:
libfreetype-dev : 依赖: libfreetype6 (= 2.11.0+dfsg-1) 但是 2.12.1+dfsg-3 正要被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

有没有遇到这个问题?如何解决的?@liwl

Reply View the author
liwl
deepin
2024-03-12 21:08
#8
sammy-621

最新的版本的V23,安装依赖时没成功:

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

提示如下:

下列软件包有未满足的依赖关系:
libfreetype-dev : 依赖: libfreetype6 (= 2.11.0+dfsg-1) 但是 2.12.1+dfsg-3 正要被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

有没有遇到这个问题?如何解决的?@liwl

你是内测源吗?

我编译的时候,没有开启内测源的,用的是正式源

这个报错也没有遇到哈

Reply View the author
sammy-621
deepin
2024-03-12 21:17
#9
liwl

你是内测源吗?

我编译的时候,没有开启内测源的,用的是正式源

这个报错也没有遇到哈

我是内测源编译

Reply View the author
liwl
deepin
2024-03-12 21:27
#10
sammy-621

我是内测源编译

找个虚拟机,用正式源试试看

Reply View the author
sammy-621
deepin
2024-03-12 22:03
#11
liwl

找个虚拟机,用正式源试试看

嗯,有空再折腾

Reply View the author
liwl
deepin
2024-03-28 13:33
#12

相关功能,官方已经集成

也修复了回收站的问题

like

Reply View the author