deepin20.9文件管理器改造

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
#註銷生效
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章