From eac1aafb1d78f629583282e5433b459d8ac54444 Mon Sep 17 00:00:00 2001 From: reionwong Date: Sat, 29 Aug 2026 21:31:56 -0400 Subject: [PATCH] fix(filemanager): port file manager to Qt6 --- CMakeLists.txt | 36 +++++++++++++++-------------- desktop/desktopview.cpp | 6 ++--- dialogs/filepropertiesdialog.cpp | 7 +++--- draganddrop/declarativemimedata.cpp | 4 ++-- helper/datehelper.cpp | 3 ++- model/dirlister.cpp | 10 -------- model/dirlister.h | 2 -- model/foldermodel.cpp | 26 ++++++++++----------- model/foldermodel.h | 3 ++- qml/Desktop/Main.qml | 2 +- qml/Desktop/Wallpaper.qml | 2 +- qml/Dialogs/OpenWithDialog.qml | 2 +- qml/FolderGridItem.qml | 2 +- qml/FolderListItem.qml | 2 +- qml/FolderPage.qml | 2 +- qml/PathBar.qml | 2 +- qml/SideBar.qml | 2 +- thumbnailer/thumbnailcache.cpp | 2 +- widgets/rubberband.cpp | 4 ++-- widgets/rubberband.h | 2 +- 20 files changed, 57 insertions(+), 64 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bfcc52e..f340712 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -11,15 +11,16 @@ set(CMAKE_AUTORCC ON) set(CMAKE_CXX_STANDARD 11) set(CMAKE_CXX_STANDARD_REQUIRED ON) -find_package(Qt5 COMPONENTS Core DBus Quick LinguistTools REQUIRED) +find_package(Qt6 COMPONENTS Core DBus Quick LinguistTools REQUIRED) # find_package(FishUI REQUIRED) -find_package(KF5KIO) -find_package(KF5Solid) -find_package(KF5WindowSystem) -find_package(KF5Config) +find_package(KF6KIO) +find_package(KF6Solid) +find_package(KF6WindowSystem) +find_package(KF6Config) +find_package(KF6XmlGui REQUIRED) -qt5_add_dbus_adaptor(DBUS_SOURCES +qt6_add_dbus_adaptor(DBUS_SOURCES com.cutefish.FileManager.xml application.h Application) @@ -76,22 +77,23 @@ add_executable(cutefish-filemanager target_link_libraries(cutefish-filemanager PRIVATE - Qt5::Core - Qt5::DBus - Qt5::Quick - - KF5::KIOCore - KF5::KIOFileWidgets - KF5::KIOWidgets - KF5::Solid - KF5::WindowSystem - KF5::ConfigCore + Qt6::Core + Qt6::DBus + Qt6::Quick + + KF6::KIOCore + KF6::KIOFileWidgets + KF6::KIOWidgets + KF6::Solid + KF6::WindowSystem + KF6::ConfigCore + KF6::XmlGui # FishUI ) file(GLOB TS_FILES translations/*.ts) -qt5_add_translation(QM_FILES ${TS_FILES}) +qt6_add_translation(QM_FILES ${TS_FILES}) add_custom_target(translations DEPENDS ${QM_FILES} SOURCES ${TS_FILES}) add_dependencies(cutefish-filemanager translations) diff --git a/desktop/desktopview.cpp b/desktop/desktopview.cpp index e1791b1..eb7bb24 100644 --- a/desktop/desktopview.cpp +++ b/desktop/desktopview.cpp @@ -28,7 +28,7 @@ #include #include -#include +#include DesktopView::DesktopView(QScreen *screen, QQuickView *parent) : QQuickView(parent) @@ -37,8 +37,8 @@ DesktopView::DesktopView(QScreen *screen, QQuickView *parent) m_screenRect = m_screen->geometry(); this->setFlag(Qt::FramelessWindowHint); this->setColor(QColor(Qt::transparent)); - KWindowSystem::setType(winId(), NET::Desktop); - KWindowSystem::setState(winId(), NET::KeepBelow); + KX11Extras::setType(winId(), NET::Desktop); + KX11Extras::setState(winId(), NET::KeepBelow); engine()->rootContext()->setContextProperty("desktopView", this); engine()->rootContext()->setContextProperty("Dock", DockDBusInterface::self()); diff --git a/dialogs/filepropertiesdialog.cpp b/dialogs/filepropertiesdialog.cpp index cdf3db4..309cf1b 100644 --- a/dialogs/filepropertiesdialog.cpp +++ b/dialogs/filepropertiesdialog.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -223,9 +224,9 @@ void FilePropertiesDialog::init() m_size = KIO::convertSize(m_items.first().size()); m_location = info.dir().path(); - m_creationTime = info.birthTime().toString(Qt::SystemLocaleLongDate); - m_modifiedTime = info.lastModified().toString(Qt::SystemLocaleLongDate); - m_accessedTime = info.lastRead().toString(Qt::SystemLocaleLongDate); + m_creationTime = QLocale().toString(info.birthTime(), QLocale::LongFormat); + m_modifiedTime = QLocale().toString(info.lastModified(), QLocale::LongFormat); + m_accessedTime = QLocale().toString(info.lastRead(), QLocale::LongFormat); // m_creationTime = item.time(KFileItem::CreationTime).toString(); // m_modifiedTime = item.time(KFileItem::ModificationTime).toString(); diff --git a/draganddrop/declarativemimedata.cpp b/draganddrop/declarativemimedata.cpp index 138b156..45904ae 100644 --- a/draganddrop/declarativemimedata.cpp +++ b/draganddrop/declarativemimedata.cpp @@ -87,8 +87,8 @@ void DeclarativeMimeData::setUrls(const QJsonArray &urls) { QList urlList; urlList.reserve(urls.size()); - for (const QVariant &varUrl : urls) { - urlList << varUrl.toUrl(); + for (const QJsonValue &varUrl : urls) { + urlList << varUrl.toVariant().toUrl(); } QMimeData::setUrls(urlList); Q_EMIT urlsChanged(); diff --git a/helper/datehelper.cpp b/helper/datehelper.cpp index 396fd01..92bed57 100644 --- a/helper/datehelper.cpp +++ b/helper/datehelper.cpp @@ -1,4 +1,5 @@ #include "datehelper.h" +#include #include DateHelper::DateHelper(QObject *parent) : QObject(parent) @@ -30,5 +31,5 @@ QString DateHelper::friendlyTime(const QDateTime &time) else if (days <= 10) return tr("%1 days ago").arg(days); - return time.toString(Qt::DefaultLocaleShortDate); + return QLocale().toString(time, QLocale::ShortFormat); } diff --git a/model/dirlister.cpp b/model/dirlister.cpp index d8ac4a7..7e90ee9 100644 --- a/model/dirlister.cpp +++ b/model/dirlister.cpp @@ -27,13 +27,3 @@ DirLister::DirLister(QObject *parent) DirLister::~DirLister() { } - -void DirLister::handleError(KIO::Job *job) -{ - if (!autoErrorHandlingEnabled()) { - emit error(job->errorString()); - return; - } - - KDirLister::handleError(job); -} diff --git a/model/dirlister.h b/model/dirlister.h index 3b711ca..d732a7a 100644 --- a/model/dirlister.h +++ b/model/dirlister.h @@ -34,8 +34,6 @@ public: Q_SIGNALS: void error(const QString &string); -protected: - void handleError(KIO::Job *job) override; }; #endif // DIRLISTER_H diff --git a/model/foldermodel.cpp b/model/foldermodel.cpp index fd060a3..6be2fdc 100644 --- a/model/foldermodel.cpp +++ b/model/foldermodel.cpp @@ -46,7 +46,6 @@ #include #include #include -#include #include #include #include @@ -65,11 +64,13 @@ // KIO #include #include +#include #include #include #include #include #include +#include #include #include #include @@ -118,9 +119,9 @@ FolderModel::FolderModel(QObject *parent) m_dirLister = new DirLister(this); m_dirLister->setDelayedMimeTypes(true); - m_dirLister->setAutoErrorHandlingEnabled(false, nullptr); + m_dirLister->setAutoErrorHandlingEnabled(false); m_dirLister->setAutoUpdate(true); - m_dirLister->setShowingDotFiles(m_showHiddenFiles); + m_dirLister->setShowHiddenFiles(m_showHiddenFiles); // connect(dirLister, &DirLister::error, this, &FolderModel::notification); connect(m_dirLister, &KCoreDirLister::started, this, std::bind(&FolderModel::setStatus, this, Status::Listing)); @@ -542,10 +543,7 @@ void FolderModel::setFilterPattern(const QString &pattern) m_regExps.reserve(patterns.count()); foreach (const QString &pattern, patterns) { - QRegExp rx(pattern); - rx.setPatternSyntax(QRegExp::Wildcard); - rx.setCaseSensitivity(Qt::CaseInsensitive); - m_regExps.append(rx); + m_regExps.append(QRegularExpression::fromWildcard(pattern, Qt::CaseInsensitive)); } invalidateFilterIfComplete(); @@ -736,7 +734,7 @@ void FolderModel::refresh() void FolderModel::undo() { - if (KIO::FileUndoManager::self()->undoAvailable()) { + if (KIO::FileUndoManager::self()->isUndoAvailable()) { KIO::FileUndoManager::self()->undo(); } } @@ -1108,13 +1106,15 @@ void FolderModel::moveSelectedToTrash() } const QList urls = selectedUrls(); - KIO::JobUiDelegate uiDelegate; + KJobUiDelegate *baseUiDelegate = KIO::createDefaultJobUiDelegate(KJobUiDelegate::AutoHandlingDisabled, nullptr); + auto *uiDelegate = dynamic_cast(baseUiDelegate); - if (uiDelegate.askDeleteConfirmation(urls, KIO::JobUiDelegate::Trash, KIO::JobUiDelegate::DefaultConfirmation)) { + if (uiDelegate && uiDelegate->askDeleteConfirmation(urls, KIO::JobUiDelegate::Trash, KIO::JobUiDelegate::DefaultConfirmation)) { KIO::Job *job = KIO::trash(urls); job->uiDelegate()->setAutoErrorHandlingEnabled(true); KIO::FileUndoManager::self()->recordJob(KIO::FileUndoManager::Trash, urls, QUrl(QStringLiteral("trash:/")), job); } + delete baseUiDelegate; } void FolderModel::emptyTrash() @@ -1694,9 +1694,9 @@ bool FolderModel::matchPattern(const KFileItem &item) const } const QString name = item.name(); - QListIterator i(m_regExps); + QListIterator i(m_regExps); while (i.hasNext()) { - if (i.next().exactMatch(name)) { + if (i.next().match(name).hasMatch()) { return true; } } @@ -1714,7 +1714,7 @@ void FolderModel::setShowHiddenFiles(bool showHiddenFiles) if (m_showHiddenFiles != showHiddenFiles) { m_showHiddenFiles = showHiddenFiles; - m_dirLister->setShowingDotFiles(m_showHiddenFiles); + m_dirLister->setShowHiddenFiles(m_showHiddenFiles); m_dirLister->emitChanges(); QSettings settings("cutefishos", qApp->applicationName()); diff --git a/model/foldermodel.h b/model/foldermodel.h index 351a827..a4fb1af 100644 --- a/model/foldermodel.h +++ b/model/foldermodel.h @@ -30,6 +30,7 @@ #include "../mimetype/mimeappmanager.h" #include +#include #include #include #include @@ -300,7 +301,7 @@ private: QString m_filterPattern; bool m_filterPatternMatchAll; QSet m_mimeSet; - QList m_regExps; + QList m_regExps; bool m_complete; bool m_isDesktop; diff --git a/qml/Desktop/Main.qml b/qml/Desktop/Main.qml index e722aad..83fedcd 100644 --- a/qml/Desktop/Main.qml +++ b/qml/Desktop/Main.qml @@ -21,7 +21,7 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 import QtQuick.Window 2.12 -import QtGraphicalEffects 1.0 +import Qt5Compat.GraphicalEffects import Cutefish.FileManager 1.0 as FM import FishUI 1.0 as FishUI diff --git a/qml/Desktop/Wallpaper.qml b/qml/Desktop/Wallpaper.qml index 182c59b..640e300 100644 --- a/qml/Desktop/Wallpaper.qml +++ b/qml/Desktop/Wallpaper.qml @@ -2,7 +2,7 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 import QtQuick.Window 2.12 -import QtGraphicalEffects 1.0 +import Qt5Compat.GraphicalEffects import Cutefish.FileManager 1.0 as FM import FishUI 1.0 as FishUI diff --git a/qml/Dialogs/OpenWithDialog.qml b/qml/Dialogs/OpenWithDialog.qml index d577321..e5da64b 100644 --- a/qml/Dialogs/OpenWithDialog.qml +++ b/qml/Dialogs/OpenWithDialog.qml @@ -20,7 +20,7 @@ import QtQuick 2.12 import QtQuick.Controls 2.4 import QtQuick.Layouts 1.3 -import QtGraphicalEffects 1.0 +import Qt5Compat.GraphicalEffects import FishUI 1.0 as FishUI Item { diff --git a/qml/FolderGridItem.qml b/qml/FolderGridItem.qml index a31614d..2a1a23c 100644 --- a/qml/FolderGridItem.qml +++ b/qml/FolderGridItem.qml @@ -20,7 +20,7 @@ import QtQuick 2.12 import QtQuick.Layouts 1.12 import QtQuick.Controls 2.12 -import QtGraphicalEffects 1.0 +import Qt5Compat.GraphicalEffects import Cutefish.FileManager 1.0 import FishUI 1.0 as FishUI diff --git a/qml/FolderListItem.qml b/qml/FolderListItem.qml index a9c09bc..91db673 100644 --- a/qml/FolderListItem.qml +++ b/qml/FolderListItem.qml @@ -20,7 +20,7 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 -import QtGraphicalEffects 1.0 +import Qt5Compat.GraphicalEffects import FishUI 1.0 as FishUI import Cutefish.FileManager 1.0 diff --git a/qml/FolderPage.qml b/qml/FolderPage.qml index 82d4900..d3cfdf7 100644 --- a/qml/FolderPage.qml +++ b/qml/FolderPage.qml @@ -20,7 +20,7 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 import QtQuick.Layouts 1.12 -import QtGraphicalEffects 1.0 +import Qt5Compat.GraphicalEffects import Qt.labs.platform 1.0 import Cutefish.FileManager 1.0 as FM diff --git a/qml/PathBar.qml b/qml/PathBar.qml index 4ad68a2..78f370f 100644 --- a/qml/PathBar.qml +++ b/qml/PathBar.qml @@ -19,7 +19,7 @@ import QtQuick 2.12 import QtQuick.Controls 2.12 -import QtGraphicalEffects 1.0 +import Qt5Compat.GraphicalEffects import Cutefish.FileManager 1.0 import FishUI 1.0 as FishUI diff --git a/qml/SideBar.qml b/qml/SideBar.qml index c2c574d..720f726 100644 --- a/qml/SideBar.qml +++ b/qml/SideBar.qml @@ -21,7 +21,7 @@ import QtQuick 2.12 import QtQuick.Layouts 1.12 import QtQuick.Controls 2.12 import QtQuick.Window 2.12 -import QtGraphicalEffects 1.0 +import Qt5Compat.GraphicalEffects import FishUI 1.0 as FishUI import Cutefish.FileManager 1.0 diff --git a/thumbnailer/thumbnailcache.cpp b/thumbnailer/thumbnailcache.cpp index d7d4c20..147eb90 100644 --- a/thumbnailer/thumbnailcache.cpp +++ b/thumbnailer/thumbnailcache.cpp @@ -123,7 +123,7 @@ QString ThumbnailCache::requestThumbnail(const QString &filePath, const QSize &r md5.addData(QString::number(width).toStdString().c_str()); md5.addData(QString::number(height).toStdString().c_str()); // Time - md5.addData(QString::number(info.lastModified().toTime_t()).toStdString().c_str()); + md5.addData(QByteArray::number(info.lastModified().toSecsSinceEpoch())); QString thumbnailsName = QString::fromLatin1(md5.result().toHex()) + QLatin1String(".png"); QString thumbnailsPath = m_thumbnailsDir + thumbDir + thumbnailsName; diff --git a/widgets/rubberband.cpp b/widgets/rubberband.cpp index be540c3..5f8c120 100644 --- a/widgets/rubberband.cpp +++ b/widgets/rubberband.cpp @@ -71,7 +71,7 @@ void RubberBand::setColor(QColor color) } } -void RubberBand::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) +void RubberBand::geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) { Q_UNUSED(oldGeometry); @@ -79,5 +79,5 @@ void RubberBand::geometryChanged(const QRectF &newGeometry, const QRectF &oldGeo update(); - QQuickItem::geometryChanged(newGeometry, oldGeometry); + QQuickItem::geometryChange(newGeometry, oldGeometry); } diff --git a/widgets/rubberband.h b/widgets/rubberband.h index 3996b34..0723b20 100644 --- a/widgets/rubberband.h +++ b/widgets/rubberband.h @@ -42,7 +42,7 @@ signals: void colorChanged(); protected: - void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) override; + void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override; private: QRectF m_geometry;