首页 > 其他分享 >deepin20.9文件管理器改造

deepin20.9文件管理器改造

时间:2024-03-24 10:12:15浏览次数:19  
标签:管理器 Qt 改造 deepin20.9 desktop manager file dde

1. 概述

本篇博客主要介绍在deepin20.9上改造deepin20.9自带版本(5.9.2)文件管理器,与《deepinV23编译文件管理器改造》不同的是,那个是6.0.40的版本,代码重构过,架构清晰。

主要实现的功能:

  • 文件管理器可以通过ctrl+d快捷键删除文件
  • 桌面可以通过ctrl+d快捷键删除文件
  • 桌面可以通过ctrl+shift+n创建目录

2. 操作过程

建议先在deepinv20.9虚拟机操作,确认一切都正常以后,可以用于正式环境。

2.1 获取deepin文件管理器代码

取消仓库里面对源码源的注释:sudo vim /etc/apt/sources.list,内容如下

## Generated by deepin-installer
deb https://community-packages.deepin.com/deepin/ apricot main contrib non-free
deb-src https://community-packages.deepin.com/deepin/ apricot main contrib non-free

终端执行:

cd ~/Documents
apt source dde-file-manager
cd dde-file-manager-5.9.2/
sudo apt build-dep .

至此,已经下载到源代码,以及编译需要的环境

2.2 修改代码

2.2.1 文件管理器实现ctrl+d删除文件

找到源码位置:vim ./src/dde-file-manager-lib/views/dfileview.cpp,大概在如下代码块下,增加代码

case Qt::ControlModifier:
    switch (event->key()) {
    case Qt::Key_N: {
        DUrlList list;

        for (const DUrl &url : urls) {
            const DAbstractFileInfoPointer &info = DFileService::instance()->createFileInfo(this, url);

            if (info && info->canFetch())
                list << url; 
        }    

        appController->actionNewWindow(dMakeEventPointer<DFMUrlListBaseEvent>(this, list.isEmpty() ? DUrlList() << DUrl() : list));
        return;
    } 
     //liwl,2024/03/22,begin。以下这部分代码,直接拷贝本文件中case Qt::Key_Delete: 部分代码即可
    case Qt::Key_D:{
        QString rootPath = rootUrl().toLocalFile();
        if (FileUtils::isGvfsMountFile(rootPath) || deviceListener->isInRemovableDeviceFolder(rootPath) || VaultController::isVaultFile(rootPath)) {
            appController->actionCompleteDeletion(dMakeEventPointer<DFMUrlListBaseEvent>(this, urls));
        } else {
            if (urls.size() > 0) { 
                QString filepath = urls.front().toLocalFile();
                if (VaultController::isVaultFile(filepath) && !d->isVaultDelSigConnected) {
                d->isVaultDelSigConnected = true;
            }
        }
        if (rootUrl().isTrashFile() && rootUrl() != DUrl::fromTrashFile("/"))
            break;
        appController->actionDelete(dMakeEventPointer<DFMUrlListBaseEvent>(this, urls));
    }
    break;
    }
    //end

2.2.2 桌面实现ctrl+d删除文件

找到源码位置:vim ./src/dde-desktop/view/canvasgridview.cpp,大概在如下代码块下,增加代码

case Qt::ControlModifier:
    switch (event->key()) {
    case Qt::Key_Minus:
        decreaseIcon();
        return;
    case Qt::Key_Equal:
        increaseIcon();
        return;
    //liwl,2024/03/22,begin,同样拷贝case Qt::Key_Delete:内容即可
    case Qt::Key_D: {
        if (canDeleted && !selectUrlsMap.contains(rootUrl.toString()) && !selectUrls.isEmpty()) {
            DFileService::instance()->moveToTrash(this, selectUrls);
        }    
        return;
    }    
    //end
    case Qt::Key_H: {
        //更改显示隐藏状态
        bool whetherShowHiddenFiles{ GridManager::instance()->getWhetherShowHiddenFiles() };
        GridManager::instance()->setWhetherShowHiddenFiles(!whetherShowHiddenFiles);

        //同步刷新,交由GridViewManager调用updateHiddenItems
        emit GridManager::instance()->sigSyncOperation(GridManager::soHidenSwitch);
        return;
    }

2.2.3 桌面实现ctrl+shift+n创建目录

找到源码位置:vim ./src/dde-desktop/view/canvasgridview.cpp,大概在如下代码块下,增加代码

case Qt::ControlModifier | Qt::ShiftModifier:

    if (event->key() == Qt::Key_N) {
        if (itemDelegate()->editingIndex().isValid()) {
            return;
        }    
        //liwl,2024/03/23,begin,这部分代码是个人研究所写,水平有限
        auto dirUrl = currentUrl();
        clearSelection();
        appController->actionNewFolder(dMakeEventPointer<DFMUrlBaseEvent>(this, dirUrl));
        // end
        return;
    }    

    if (event->key() == Qt::Key_Question) {
//            appController->actionShowHotkeyHelp(fmevent);
        return;
    }    
    if (event->key() == Qt::Key_Plus) {
        increaseIcon();
        return;
    }    
    break;

2.3 编译安装

完成上面代码修改以后,开始进行编译安装,具体操作,参考源码目录下的README.md

$ cd dde-file-manager
$ mkdir build
$ cd build
$ qmake ../filemanager.pro
$ make
$ sudo make install 

2.4 移植使用

编译完成后的build/./src/dde-file-manager-lib/libdde-file-manager.so文件,是实现了上述代码修改的功能的库

需要文件管理器能够实现ctrl+d功能,需要用这个库替换掉之前的库即可

sudo cp /usr/lib/x86_64-linux-gnu/libdde-file-manager.so.1.8.2 /usr/lib/x86_64-linux-gnu/libdde-file-manager.so.1.8.2.bak
sudo cp libdde-file-manager.so /usr/lib/x86_64-linux-gnu/libdde-file-manager.so.1.8.2
#不注销就可以生效

编译完成后的build/src/dde-desktop/dde-desktop文件,是实现 代码修改后,功能增加的二进制文件

需要桌面实现上述2个更能的,需要用此文件替换之前的二进制文件

sudo cp /usr/bin/dde-desktop /usr/bin/dde-desktop.bak
sudo cp dde-desktop /usr/bin/dde-desktop.new
sudo ln -fs /usr/bin/dde-desktop.new /usr/bin/dde-desktop
#注销生效

标签:管理器,Qt,改造,deepin20.9,desktop,manager,file,dde
From: https://www.cnblogs.com/liwanliangblog/p/18092121

相关文章

  • 游戏开发:阶段排期管理器
    常有的业务需求场景是一个配置自然时间的多阶段玩法。这里讨论阶段管理逻辑的实现方案。实现一个排期管理模块,应该解决的问题有:stateobject:抽象出object原型描述单个阶段的属性,提供[query,set]API;localobject={_st, --阶段号_bt, --阶段开启时间戳......
  • shell脚本基础改造
    一、基础的shell脚本格式#!/bin/bash2#3#********************************************************************4#Author:LJH5#QQ:......
  • 询问ChatGPT4,改造TodoList:把本地存储的localStorage修改成PHP+Redis
    这里照搬的是:免费极简设计网页版Todo  https://www.ricocc.com/todo/非常感谢原作者Rico。我很喜欢这个设计和风格,但是可惜只能本地存储,我又不想使用微软的TODO,登录倒无所谓,但是数据同步问题很大,实在头痛,所以放弃。我是菜鸟,只是刚好前段时间安装了Apache、PHP的一键安装包和......
  • 对上次的自动扫描进行改造
    1、现在有多个程序集lib1、lib2、lib3、lib4每个程序集都有类标注了特性ScanningAttribute特性的代码是[AttributeUsage(AttributeTargets.Class,Inherited=false)]publicclassScanningAttribute:Attribute{publicstringRegisterType{get;set;}}l......
  • 新的Date类改造
    1)替换原来的newDate()和Calendar.getInstance().getTime()原来的方式:Date nowDate = new Date();Date nowCalendarDate = Calendar.getInstance().getTime();使用 java.time 改造后:// 使用Instant代表一个时间点,这与Date类似Instant nowInstant = Instant.now......
  • 【Java】迷你DVD管理器
    Java:迷你DVD管理器系统概述开发计划系统开发步骤编码顺序界面交互设计的原则理解业务设计阶段1、初始化DVD信息2、实现菜单切换3、实现查看DVD信息4、实现新增DVD信息5、实现删除DVD信息6、实现借出DVD业务处理7、实现归还DVD业务处理代码阶段1、菜单模块2、初始化模......
  • Jmeter —— jmeter设置HTTP信息头管理器模拟请求头
    HTTP信息头管理器HTTP信息头管理器是在有需要模拟请求头部的时候进行设置的,添加方式是右击线程组--配置元件--HTTP信息头管理器​可以通过抓包工具或者F12获取http请求的header头部信息;如下图:​复制并点击jmeter中的从剪贴板添加,就会自动添加到http信息头管理器的列表......
  • fastjson改造
    背景fastjson太过于侧重性能,对于部分高级特性支持不够,而且部分自定义特性完全偏离了json和js规范导致和其他框架不兼容;fastjson文档缺失较多,部分Feature甚至没有文档,而且代码缺少注释较为晦涩;fastjson的CVEbug监测较弱,很多CVE数据库网站上有关fastjson的CVE寥寥无几,例如近......
  • Lbtorch版本分为release和debug,要对应自己的配置管理器
    1.libtorch版本必须和pytorch版本一致例如libtorch版本1.8.2,而pytorch版本为1.8.0,这两个版本就是一致的,只要保持版本号前两位相同即可libtorch资源:[LibTorch&Win]各版本LibTorch下载_linux下libtorch的gpu版本下载-CSDN博客2.libtorch安装LibTorch的安装、配置与使用-CSD......
  • VS2022 Android 设备管理器 添加 虚拟操作系统
      1、首先必须先挂上代理并且配置操作系统环境。  2、以管理员的权限运行vs2022。3、打开“C:\ProgramFiles\MicrosoftVisualStudio\2022\Enterprise\Common7\IDE”,修改devenv.exe.config文件。4、原来<system.net>     <settings>       <ipv6e......