From: Nicolas Fella Date: Tue, 24 Oct 2023 21:12:22 +0000 (+0200) Subject: Merge branch 'master' into kf6 X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/1826f905d706925456763394de17294bcb6d1c35?hp=ef59e42c40df5e873a1a1b6c2173d5b55641a783 Merge branch 'master' into kf6 --- diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs index b8bdaf61a..f7df1a33b 100644 --- a/.git-blame-ignore-revs +++ b/.git-blame-ignore-revs @@ -1,2 +1 @@ -#clang-format -38c34eeca315c7be58e65d4d3fb72aaf7b866719 +b58a346be96f7d0973ed96e52c4cf95463ba244d diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 8c7d812ef..6c54587fa 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,5 +1,4 @@ include: - - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/linux.yml - - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/freebsd.yml - - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/windows.yml - - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/flatpak.yml + - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/linux-qt6.yml + - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/freebsd-qt6.yml + - https://invent.kde.org/sysadmin/ci-utilities/raw/master/gitlab-templates/windows-qt6.yml diff --git a/.kde-ci.yml b/.kde-ci.yml index a3ecb8099..2cbc8de11 100644 --- a/.kde-ci.yml +++ b/.kde-ci.yml @@ -2,36 +2,40 @@ # SPDX-License-Identifier: CC0-1.0 Dependencies: -- 'on': ['@all'] +- 'on': ['Linux/Qt6', 'FreeBSD/Qt6', 'Windows/Qt6', 'macOS/Qt6'] 'require': - 'frameworks/extra-cmake-modules': '@stable' - 'frameworks/kcoreaddons': '@stable' - 'frameworks/kcmutils': '@stable' - 'frameworks/knewstuff': '@stable' - 'frameworks/ki18n': '@stable' - 'frameworks/kdbusaddons': '@stable' - 'frameworks/kbookmarks': '@stable' - 'frameworks/kconfig': '@stable' - 'frameworks/kio': '@stable' - 'frameworks/kparts': '@stable' - 'frameworks/solid': '@stable' - 'frameworks/kiconthemes': '@stable' - 'frameworks/kcompletion': '@stable' - 'frameworks/ktextwidgets': '@stable' - 'frameworks/knotifications': '@stable' - 'frameworks/kcrash': '@stable' - 'frameworks/kwindowsystem': '@stable' - 'frameworks/kactivities': '@stable' - 'frameworks/kdoctools': '@stable' - 'frameworks/kwindowsystem': '@stable' - 'frameworks/kfilemetadata': '@stable' - 'frameworks/kcodecs': '@stable' - 'libraries/kuserfeedback': '@stable' - 'libraries/phonon': '@stable' + 'frameworks/extra-cmake-modules': '@latest-kf6' + 'frameworks/kcoreaddons': '@latest-kf6' + 'frameworks/kcmutils': '@latest-kf6' + 'frameworks/knewstuff': '@latest-kf6' + 'frameworks/ki18n': '@latest-kf6' + 'frameworks/kdbusaddons': '@latest-kf6' + 'frameworks/kbookmarks': '@latest-kf6' + 'frameworks/kconfig': '@latest-kf6' + 'frameworks/kio': '@latest-kf6' + 'frameworks/kparts': '@latest-kf6' + 'frameworks/solid': '@latest-kf6' + 'frameworks/kiconthemes': '@latest-kf6' + 'frameworks/kcompletion': '@latest-kf6' + 'frameworks/ktextwidgets': '@latest-kf6' + 'frameworks/knotifications': '@latest-kf6' + 'frameworks/kcrash': '@latest-kf6' + 'frameworks/kwindowsystem': '@latest-kf6' + 'frameworks/kactivities': '@latest-kf6' + 'frameworks/kdoctools': '@latest-kf6' + 'frameworks/kwindowsystem': '@latest-kf6' + 'frameworks/kfilemetadata': '@latest-kf6' + 'frameworks/kcodecs': '@latest-kf6' + 'libraries/kuserfeedback': '@latest-kf6' + 'libraries/phonon': '@latest-kf6' + 'libraries/kmoretools': '@latest-kf6' -- 'on': ['Linux', 'FreeBSD'] +- 'on': ['Linux/Qt6', 'FreeBSD/Qt6'] 'require': - 'frameworks/baloo': '@stable' - 'libraries/baloo-widgets': '@same' + 'frameworks/baloo': '@latest-kf6' + 'libraries/baloo-widgets': '@latest-kf6' 'third-party/packagekit-qt': '@latest' +- 'on': ['Linux/Qt6', 'Windows/Qt6', 'macOS/Qt6'] + 'require': + 'network/kio-extras': '@latest-kf6' diff --git a/CMakeLists.txt b/CMakeLists.txt index 57dc3ae11..0a655babb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,11 +7,11 @@ set (RELEASE_SERVICE_VERSION_MICRO "70") set (RELEASE_SERVICE_VERSION "${RELEASE_SERVICE_VERSION_MAJOR}.${RELEASE_SERVICE_VERSION_MINOR}.${RELEASE_SERVICE_VERSION_MICRO}") project(Dolphin VERSION ${RELEASE_SERVICE_VERSION}) -set(QT_MIN_VERSION "5.15.2") -set(KF5_MIN_VERSION "5.101.0") +set(QT_MIN_VERSION "6.4.0") +set(KF6_MIN_VERSION "5.240.0") # ECM setup -find_package(ECM ${KF5_MIN_VERSION} CONFIG REQUIRED) +find_package(ECM ${KF6_MIN_VERSION} CONFIG REQUIRED) set(CMAKE_MODULE_PATH ${ECM_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake) include(KDEInstallDirs) @@ -27,19 +27,21 @@ include(GenerateExportHeader) include(FeatureSummary) include(ECMQtDeclareLoggingCategory) include(ECMDeprecationSettings) +include(CheckIncludeFiles) +include(CheckLibraryExists) ecm_setup_version(${RELEASE_SERVICE_VERSION} VARIABLE_PREFIX DOLPHIN VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/src/dolphin_version.h" ) -ecm_setup_version("5.0.0" VARIABLE_PREFIX DOLPHINVCS +ecm_setup_version(${RELEASE_SERVICE_VERSION} VARIABLE_PREFIX DOLPHINVCS VERSION_HEADER "${CMAKE_CURRENT_BINARY_DIR}/dolphinvcs_version.h" PACKAGE_VERSION_FILE "${CMAKE_CURRENT_BINARY_DIR}/DolphinVcsConfigVersion.cmake" - SOVERSION 5 + SOVERSION ${QT_MAJOR_VERSION} ) -ecm_setup_version("5.0.0" VARIABLE_PREFIX DOLPHINPRIVATE - SOVERSION 5 +ecm_setup_version(${RELEASE_SERVICE_VERSION} VARIABLE_PREFIX DOLPHINPRIVATE + SOVERSION ${QT_MAJOR_VERSION} ) find_package(Qt${QT_MAJOR_VERSION} ${QT_MIN_VERSION} CONFIG REQUIRED COMPONENTS @@ -58,7 +60,7 @@ if (UNIX AND NOT APPLE) endif() endif() -find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS +find_package(KF6 ${KF6_MIN_VERSION} REQUIRED COMPONENTS KCMUtils NewStuff CoreAddons @@ -77,23 +79,24 @@ find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS WindowSystem WidgetsAddons Codecs + MoreTools ) -find_package(KUserFeedback 1.2.0) -set_package_properties(KUserFeedback +find_package(KUserFeedbackQt6 1.2.1) +set_package_properties(KUserFeedbackQt6 PROPERTIES TYPE OPTIONAL PURPOSE "Used for submission of telemetry data" ) -if(KUserFeedback_FOUND) +if(KUserFeedbackQt6_FOUND) set(HAVE_KUSERFEEDBACK TRUE) endif() -find_package(KF5 ${KF5_MIN_VERSION} OPTIONAL_COMPONENTS +find_package(KF6 ${KF6_MIN_VERSION} OPTIONAL_COMPONENTS Activities DocTools ) -set_package_properties(KF5Activities PROPERTIES DESCRIPTION "KActivities libraries" +set_package_properties(KF6Activities PROPERTIES DESCRIPTION "KActivities libraries" URL "https://www.kde.org" TYPE OPTIONAL PURPOSE "For tracking which folders are frequently accessed on a Plasma desktop" @@ -111,31 +114,31 @@ if(PackageKitQt${QT_MAJOR_VERSION}_FOUND) set(HAVE_PACKAGEKIT TRUE) endif() -find_package(KF5Baloo ${KF5_MIN_VERSION}) -set_package_properties(KF5Baloo PROPERTIES DESCRIPTION "Baloo Core libraries" +find_package(KF6Baloo ${KF6_MIN_VERSION}) +set_package_properties(KF6Baloo PROPERTIES DESCRIPTION "Baloo Core libraries" URL "https://www.kde.org" TYPE OPTIONAL PURPOSE "For adding desktop-wide search and tagging support to dolphin" ) -find_package(KF5BalooWidgets 19.07.70) -set_package_properties(KF5BalooWidgets PROPERTIES DESCRIPTION "Baloos Widgets" +find_package(KF6BalooWidgets ${RELEASE_SERVICE_VERSION}) +set_package_properties(KF6BalooWidgets PROPERTIES DESCRIPTION "Baloos Widgets" URL "https://www.kde.org" TYPE OPTIONAL ) -find_package(KF5FileMetaData ${KF5_MIN_VERSION}) -set_package_properties(KF5FileMetaData PROPERTIES +find_package(KF6FileMetaData ${KF6_MIN_VERSION}) +set_package_properties(KF6FileMetaData PROPERTIES URL "https://projects.kde.org/kfilemetadata" TYPE OPTIONAL PURPOSE "For accessing file metadata labels" ) -if (KF5Activities_FOUND) +if (KF6Activities_FOUND) set(HAVE_KACTIVITIES TRUE) endif() -if (KF5Baloo_FOUND AND KF5BalooWidgets_FOUND AND KF5FileMetaData_FOUND) +if (KF6Baloo_FOUND AND KF6BalooWidgets_FOUND AND KF6FileMetaData_FOUND) message(STATUS "Baloo packages are found") set(HAVE_BALOO TRUE) else() @@ -149,11 +152,20 @@ else() set(HAVE_TERMINAL TRUE) endif() -ecm_set_disabled_deprecation_versions( - QT 5.15 - KF 5.90 - KSERVICE 5.89 # We use KServiceTypeTrader in a compat code path -) +# Compatibility with platforms without native fts (e.g. musl) +check_include_files("sys/types.h;sys/stat.h;fts.h" HAVE_FTS_H) +if(HAVE_FTS_H) + check_function_exists(fts_open HAVE_FTS_OPEN) + if(NOT HAVE_FTS_OPEN) + check_library_exists(fts fts_open "" HAVE_LIB_FTS) + endif() +endif() + +if(HAVE_LIB_FTS) + set(FTS_LIB fts) +else() + set(FTS_LIB "") +endif() add_subdirectory(src) add_subdirectory(doc) @@ -211,7 +223,7 @@ ecm_qt_install_logging_categories( ) ki18n_install(po) -if(KF5DocTools_FOUND) +if(KF6DocTools_FOUND) kdoctools_install(po) endif() diff --git a/DolphinVcsConfig.cmake.in b/DolphinVcsConfig.cmake.in index b6e3d42f6..c73d093ed 100644 --- a/DolphinVcsConfig.cmake.in +++ b/DolphinVcsConfig.cmake.in @@ -3,6 +3,6 @@ include(CMakeFindDependencyMacro) find_dependency(Qt@QT_MAJOR_VERSION@Widgets) -find_dependency(KF5KIO) +find_dependency(KF6KIO) include("${CMAKE_CURRENT_LIST_DIR}/DolphinVcsTargets.cmake") diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 934f7a9ff..7527bbfa9 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -1,4 +1,4 @@ -if (KF5DocTools_FOUND) +if (KF6DocTools_FOUND) kdoctools_create_handbook(index.docbook INSTALL_DESTINATION ${KDE_INSTALL_DOCBUNDLEDIR}/en SUBDIR dolphin) endif() diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index cd9abec81..d78b05f91 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -39,6 +39,7 @@ ecm_generate_headers(dolphinvcs_LIB_HEADERS RELATIVE "views/versioncontrol" REQUIRED_HEADERS dolphinvcs_LIB_HEADERS ) +target_include_directories(dolphinvcs INTERFACE "$") install(TARGETS dolphinvcs EXPORT DolphinVcsTargets ${KDE_INSTALL_TARGETS_DEFAULT_ARGS}) @@ -196,28 +197,32 @@ target_link_libraries( dolphinvcs Qt${QT_MAJOR_VERSION}::Concurrent Qt${QT_MAJOR_VERSION}::Gui - KF5::I18n - KF5::IconThemes - KF5::KIOCore - KF5::KIOWidgets - KF5::KIOFileWidgets - KF5::Completion - KF5::TextWidgets - KF5::ConfigCore - KF5::NewStuff - KF5::NewStuffWidgets # KNSWidgets::Button - KF5::Parts - KF5::WindowSystem - KF5::WidgetsAddons - KF5::Codecs + KF6::I18n + KF6::IconThemes + KF6::KIOCore + KF6::KIOWidgets + KF6::KIOFileWidgets + KF6::Completion + KF6::TextWidgets + KF6::ConfigCore + KF6::NewStuffWidgets # KNSWidgets::Button + KF6::Parts + KF6::WindowSystem + KF6::WidgetsAddons + KF6::Codecs + KF6::KCMUtils + + KF6::MoreTools + + ${FTS_LIB} ) if(HAVE_BALOO) target_link_libraries( dolphinprivate PUBLIC - KF5::FileMetaData - KF5::Baloo - KF5::BalooWidgets + KF6::FileMetaData + KF6::Baloo + KF6::BalooWidgets ) endif() @@ -290,14 +295,12 @@ target_sources(dolphinstatic PRIVATE selectionmode/topbar.cpp settings/interface/folderstabssettingspage.cpp settings/interface/statusandlocationbarssettingspage.cpp - settings/interface/configurepreviewplugindialog.cpp settings/interface/confirmationssettingspage.cpp settings/interface/interfacesettingspage.cpp settings/interface/previewssettingspage.cpp settings/dolphinsettingsdialog.cpp settings/contextmenu/contextmenusettingspage.cpp settings/settingspagebase.cpp - settings/serviceitemdelegate.cpp settings/servicemodel.cpp settings/trash/trashsettingspage.cpp settings/viewmodes/dolphinfontrequester.cpp @@ -349,14 +352,12 @@ target_sources(dolphinstatic PRIVATE selectionmode/topbar.h settings/interface/folderstabssettingspage.h settings/interface/statusandlocationbarssettingspage.h - settings/interface/configurepreviewplugindialog.h settings/interface/confirmationssettingspage.h settings/interface/interfacesettingspage.h settings/interface/previewssettingspage.h settings/dolphinsettingsdialog.h settings/contextmenu/contextmenusettingspage.h settings/settingspagebase.h - settings/serviceitemdelegate.h settings/servicemodel.h settings/trash/trashsettingspage.h settings/viewmodes/dolphinfontrequester.h @@ -429,25 +430,26 @@ target_sources(dolphinstatic PRIVATE target_include_directories(dolphinstatic SYSTEM PRIVATE ${PHONON_INCLUDES}) target_link_libraries(dolphinstatic dolphinprivate - KF5::CoreAddons - KF5::KCMUtils - KF5::DBusAddons - KF5::Notifications + KF6::CoreAddons + KF6::KCMUtils + KF6::DBusAddons + KF6::Notifications + KF6::BookmarksWidgets Phonon::phonon4qt${QT_MAJOR_VERSION} ) if (HAVE_KACTIVITIES) target_link_libraries( dolphinstatic - KF5::Activities + KF6::Activities ) endif() if (HAVE_KUSERFEEDBACK) target_link_libraries( dolphinstatic - KUserFeedbackCore - KUserFeedbackWidgets + KUserFeedbackCoreQt6 + KUserFeedbackWidgetsQt6 ) endif() @@ -471,12 +473,12 @@ target_link_libraries(dolphin PRIVATE dolphinprivate dolphinstatic - KF5::Crash + KF6::Crash ) if (HAVE_X11) if (QT_MAJOR_VERSION STREQUAL "5") - target_link_libraries(dolphin PRIVATE Qt5::X11Extras) + target_link_libraries(dolphin PRIVATE Qt{QT_MAJOR_VERSION}::X11Extras) else() target_link_libraries(dolphin PRIVATE Qt::GuiPrivate) endif() @@ -518,10 +520,8 @@ if(NOT WIN32) settings/interface/folderstabssettingspage.cpp settings/interface/statusandlocationbarssettingspage.cpp settings/interface/previewssettingspage.cpp - settings/interface/configurepreviewplugindialog.cpp settings/interface/confirmationssettingspage.cpp settings/settingspagebase.cpp - settings/serviceitemdelegate.cpp settings/servicemodel.cpp dolphin_generalsettings.cpp dolphindebug.cpp @@ -533,10 +533,8 @@ if(NOT WIN32) settings/interface/folderstabssettingspage.h settings/interface/statusandlocationbarssettingspage.h settings/interface/previewssettingspage.h - settings/interface/configurepreviewplugindialog.h settings/interface/confirmationssettingspage.h settings/settingspagebase.h - settings/serviceitemdelegate.h settings/servicemodel.h dolphin_generalsettings.h dolphindebug.h diff --git a/src/dolphinbookmarkhandler.cpp b/src/dolphinbookmarkhandler.cpp index 2264ca5a5..9f04e7421 100644 --- a/src/dolphinbookmarkhandler.cpp +++ b/src/dolphinbookmarkhandler.cpp @@ -28,9 +28,9 @@ DolphinBookmarkHandler::DolphinBookmarkHandler(DolphinMainWindow *mainWindow, KA QDir().mkpath(bookmarksFile); bookmarksFile += QLatin1String("/bookmarks.xml"); } - m_bookmarkManager = KBookmarkManager::managerForFile(bookmarksFile, QStringLiteral("dolphin")); + m_bookmarkManager = std::make_unique(bookmarksFile); m_bookmarkManager->setUpdate(true); - m_bookmarkMenu.reset(new KBookmarkMenu(m_bookmarkManager, this, menu)); + m_bookmarkMenu.reset(new KBookmarkMenu(m_bookmarkManager.get(), this, menu)); collection->addAction(QStringLiteral("add_bookmark"), m_bookmarkMenu->addBookmarkAction()); collection->addAction(QStringLiteral("edit_bookmarks"), m_bookmarkMenu->editBookmarksAction()); diff --git a/src/dolphinbookmarkhandler.h b/src/dolphinbookmarkhandler.h index a40c02675..ceb172fdc 100644 --- a/src/dolphinbookmarkhandler.h +++ b/src/dolphinbookmarkhandler.h @@ -41,7 +41,7 @@ private: private: DolphinMainWindow *m_mainWindow; - KBookmarkManager *m_bookmarkManager; + std::unique_ptr m_bookmarkManager; QScopedPointer m_bookmarkMenu; }; diff --git a/src/dolphincontextmenu.cpp b/src/dolphincontextmenu.cpp index 4dc54946f..34d2102ef 100644 --- a/src/dolphincontextmenu.cpp +++ b/src/dolphincontextmenu.cpp @@ -27,7 +27,6 @@ #include #include #include -#include #include #include @@ -138,7 +137,7 @@ void DolphinContextMenu::addTrashItemContextMenu() addAction(QIcon::fromTheme("restoration"), i18nc("@action:inmenu", "Restore"), [this]() { QList selectedUrls; selectedUrls.reserve(m_selectedItems.count()); - for (const KFileItem &item : qAsConst(m_selectedItems)) { + for (const KFileItem &item : std::as_const(m_selectedItems)) { selectedUrls.append(item.url()); } @@ -173,7 +172,7 @@ void DolphinContextMenu::addDirectoryItemContextMenu() addOpenWithActions(); // set up 'Create New' menu - DolphinNewFileMenu *newFileMenu = new DolphinNewFileMenu(m_mainWindow->actionCollection(), m_mainWindow); + DolphinNewFileMenu *newFileMenu = new DolphinNewFileMenu(m_mainWindow->actionCollection()->action(QStringLiteral("create_dir")), m_mainWindow); newFileMenu->checkUpToDate(); newFileMenu->setWorkingDirectory(m_fileInfo.url()); newFileMenu->setEnabled(selectedItemsProps.supportsWriting()); @@ -236,7 +235,7 @@ void DolphinContextMenu::addItemContextMenu() } else { // multiple files bool selectionHasOnlyDirs = true; - for (const auto &item : qAsConst(m_selectedItems)) { + for (const auto &item : std::as_const(m_selectedItems)) { const QUrl &url = DolphinView::openItemAsFolderUrl(item); if (url.isEmpty()) { selectionHasOnlyDirs = false; diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index ca0038586..27e4d2381 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -54,7 +54,6 @@ #include #include #include -#include #include #include #include @@ -64,7 +63,8 @@ #include #include #include -#include + +#include #include #include @@ -83,6 +83,10 @@ #include +#if HAVE_X11 +#include +#endif + namespace { // Used for GeneralSettings::version() to determine whether @@ -158,6 +162,9 @@ DolphinMainWindow::DolphinMainWindow() connect(m_actionHandler, &DolphinViewActionHandler::createDirectoryTriggered, this, &DolphinMainWindow::createDirectory); connect(m_actionHandler, &DolphinViewActionHandler::selectionModeChangeTriggered, this, &DolphinMainWindow::slotSetSelectionMode); + Q_CHECK_PTR(actionCollection()->action(QStringLiteral("create_dir"))); + m_newFileMenu->setNewFolderShortcutAction(actionCollection()->action(QStringLiteral("create_dir"))); + m_remoteEncoding = new DolphinRemoteEncoding(this, m_actionHandler); connect(this, &DolphinMainWindow::urlChanged, m_remoteEncoding, &DolphinRemoteEncoding::slotAboutToOpenUrl); @@ -276,8 +283,10 @@ void DolphinMainWindow::activateWindow(const QString &activationToken) if (KWindowSystem::isPlatformWayland()) { KWindowSystem::setCurrentXdgActivationToken(activationToken); - } else { + } else if (KWindowSystem::isPlatformX11()) { +#if HAVE_X11 KStartupInfo::setNewStartupId(window()->windowHandle(), activationToken.toUtf8()); +#endif } KWindowSystem::activateWindow(window()->windowHandle()); @@ -528,7 +537,7 @@ void DolphinMainWindow::showTarget() const KFileItem link = m_activeViewContainer->view()->selectedItems().at(0); const QUrl destinationUrl = link.url().resolved(QUrl(link.linkDest())); - auto job = KIO::statDetails(destinationUrl, KIO::StatJob::SourceSide, KIO::StatNoDetails); + auto job = KIO::stat(destinationUrl, KIO::StatJob::SourceSide, KIO::StatNoDetails); connect(job, &KJob::finished, this, [this, destinationUrl](KJob *job) { KIO::StatJob *statJob = static_cast(job); @@ -835,10 +844,11 @@ void DolphinMainWindow::slotAboutToShowBackPopupMenu() { const KUrlNavigator *urlNavigator = m_activeViewContainer->urlNavigatorInternalWithHistory(); int entries = 0; - m_backAction->menu()->clear(); + QMenu *menu = m_backAction->popupMenu(); + menu->clear(); for (int i = urlNavigator->historyIndex() + 1; i < urlNavigator->historySize() && entries < MaxNumberOfNavigationentries; ++i, ++entries) { - QAction *action = urlNavigatorHistoryAction(urlNavigator, i, m_backAction->menu()); - m_backAction->menu()->addAction(action); + QAction *action = urlNavigatorHistoryAction(urlNavigator, i, menu); + menu->addAction(action); } } @@ -863,10 +873,10 @@ void DolphinMainWindow::slotAboutToShowForwardPopupMenu() { const KUrlNavigator *urlNavigator = m_activeViewContainer->urlNavigatorInternalWithHistory(); int entries = 0; - m_forwardAction->menu()->clear(); + QMenu *menu = m_forwardAction->popupMenu(); for (int i = urlNavigator->historyIndex() - 1; i >= 0 && entries < MaxNumberOfNavigationentries; --i, ++entries) { - QAction *action = urlNavigatorHistoryAction(urlNavigator, i, m_forwardAction->menu()); - m_forwardAction->menu()->addAction(action); + QAction *action = urlNavigatorHistoryAction(urlNavigator, i, menu); + menu->addAction(action); } } @@ -1539,7 +1549,8 @@ void DolphinMainWindow::setupActions() auto hamburgerMenuAction = KStandardAction::hamburgerMenu(nullptr, nullptr, actionCollection()); // setup 'File' menu - m_newFileMenu = new DolphinNewFileMenu(actionCollection(), this); + m_newFileMenu = new DolphinNewFileMenu(nullptr, this); + actionCollection()->addAction(QStringLiteral("new_menu"), m_newFileMenu); QMenu *menu = m_newFileMenu->menu(); menu->setTitle(i18nc("@title:menu Create new folder, file, link, etc.", "Create New")); menu->setIcon(QIcon::fromTheme(QStringLiteral("list-add"))); @@ -1563,7 +1574,7 @@ void DolphinMainWindow::setupActions() "Tab with the current location and view." "A tab is an additional view within this window. " "You can drag and drop items between tabs.")); - actionCollection()->setDefaultShortcuts(newTab, {Qt::CTRL | Qt::Key_T, Qt::CTRL | Qt::SHIFT | Qt::Key_N}); + actionCollection()->setDefaultShortcut(newTab, Qt::CTRL | Qt::Key_T); connect(newTab, &QAction::triggered, this, &DolphinMainWindow::openNewActivatedTab); QAction *addToPlaces = actionCollection()->addAction(QStringLiteral("add_to_places")); @@ -1718,7 +1729,7 @@ void DolphinMainWindow::setupActions() toggleSelectionModeToolBarAction->setWhatsThis(toggleSelectionModeAction->whatsThis()); actionCollection()->addAction(QStringLiteral("toggle_selection_mode_tool_bar"), toggleSelectionModeToolBarAction); toggleSelectionModeToolBarAction->setCheckable(true); - toggleSelectionModeToolBarAction->setPopupMode(QToolButton::DelayedPopup); + toggleSelectionModeToolBarAction->setPopupMode(KToolBarPopupAction::DelayedPopup); connect(toggleSelectionModeToolBarAction, &QAction::triggered, toggleSelectionModeAction, &QAction::trigger); connect(toggleSelectionModeAction, &QAction::toggled, toggleSelectionModeToolBarAction, &QAction::setChecked); @@ -1807,10 +1818,10 @@ void DolphinMainWindow::setupActions() m_backAction->setObjectName(backAction->objectName()); m_backAction->setShortcuts(backAction->shortcuts()); } - m_backAction->setPopupMode(QToolButton::DelayedPopup); + m_backAction->setPopupMode(KToolBarPopupAction::DelayedPopup); connect(m_backAction, &QAction::triggered, this, &DolphinMainWindow::goBack); - connect(m_backAction->menu(), &QMenu::aboutToShow, this, &DolphinMainWindow::slotAboutToShowBackPopupMenu); - connect(m_backAction->menu(), &QMenu::triggered, this, &DolphinMainWindow::slotGoBack); + connect(m_backAction->popupMenu(), &QMenu::aboutToShow, this, &DolphinMainWindow::slotAboutToShowBackPopupMenu); + connect(m_backAction->popupMenu(), &QMenu::triggered, this, &DolphinMainWindow::slotGoBack); actionCollection()->addAction(m_backAction->objectName(), m_backAction); auto backShortcuts = m_backAction->shortcuts(); @@ -1848,18 +1859,18 @@ void DolphinMainWindow::setupActions() m_forwardAction->setObjectName(forwardAction->objectName()); m_forwardAction->setShortcuts(forwardAction->shortcuts()); } - m_forwardAction->setPopupMode(QToolButton::DelayedPopup); + m_forwardAction->setPopupMode(KToolBarPopupAction::DelayedPopup); connect(m_forwardAction, &QAction::triggered, this, &DolphinMainWindow::goForward); - connect(m_forwardAction->menu(), &QMenu::aboutToShow, this, &DolphinMainWindow::slotAboutToShowForwardPopupMenu); - connect(m_forwardAction->menu(), &QMenu::triggered, this, &DolphinMainWindow::slotGoForward); + connect(m_forwardAction->popupMenu(), &QMenu::aboutToShow, this, &DolphinMainWindow::slotAboutToShowForwardPopupMenu); + connect(m_forwardAction->popupMenu(), &QMenu::triggered, this, &DolphinMainWindow::slotGoForward); actionCollection()->addAction(m_forwardAction->objectName(), m_forwardAction); actionCollection()->setDefaultShortcuts(m_forwardAction, m_forwardAction->shortcuts()); // enable middle-click to open in a new tab auto *middleClickEventFilter = new MiddleClickActionEventFilter(this); connect(middleClickEventFilter, &MiddleClickActionEventFilter::actionMiddleClicked, this, &DolphinMainWindow::slotBackForwardActionMiddleClicked); - m_backAction->menu()->installEventFilter(middleClickEventFilter); - m_forwardAction->menu()->installEventFilter(middleClickEventFilter); + m_backAction->popupMenu()->installEventFilter(middleClickEventFilter); + m_forwardAction->popupMenu()->installEventFilter(middleClickEventFilter); KStandardAction::up(this, &DolphinMainWindow::goUp, actionCollection()); QAction *homeAction = KStandardAction::home(this, &DolphinMainWindow::goHome, actionCollection()); homeAction->setWhatsThis(xi18nc("@info:whatsthis", @@ -2487,6 +2498,7 @@ void DolphinMainWindow::createPanelAction(const QIcon &icon, const QKeySequence panelAction->setText(dockAction->text()); panelAction->setIcon(icon); dockAction->setIcon(icon); + dockAction->setEnabled(true); actionCollection()->setDefaultShortcut(panelAction, shortcut); connect(panelAction, &QAction::triggered, dockAction, &QAction::trigger); diff --git a/src/dolphinnavigatorswidgetaction.cpp b/src/dolphinnavigatorswidgetaction.cpp index cadfbe941..7dc44f59d 100644 --- a/src/dolphinnavigatorswidgetaction.cpp +++ b/src/dolphinnavigatorswidgetaction.cpp @@ -42,7 +42,7 @@ DolphinNavigatorsWidgetAction::DolphinNavigatorsWidgetAction(QWidget *parent) void DolphinNavigatorsWidgetAction::adjustSpacing() { - m_previousWindowWidth = parentWidget()->window()->width(); + m_previousWindowWidth = qobject_cast(parent())->window()->width(); auto viewGeometries = m_viewGeometriesHelper.viewGeometries(); const int widthOfSplitterPrimary = viewGeometries.globalXOfPrimary + viewGeometries.widthOfPrimary - viewGeometries.globalXOfNavigatorsWidget; const QList splitterSizes = {widthOfSplitterPrimary, m_splitter->width() - widthOfSplitterPrimary}; @@ -298,7 +298,7 @@ DolphinNavigatorsWidgetAction::ViewGeometriesHelper::ViewGeometriesHelper(QWidge bool DolphinNavigatorsWidgetAction::ViewGeometriesHelper::eventFilter(QObject *watched, QEvent *event) { if (event->type() == QEvent::Resize) { - if (m_navigatorsWidgetAction->parentWidget()->window()->width() != m_navigatorsWidgetAction->m_previousWindowWidth) { + if (qobject_cast(m_navigatorsWidgetAction->parent())->window()->width() != m_navigatorsWidgetAction->m_previousWindowWidth) { // The window is being resized which means not all widgets have gotten their new sizes yet. // Let's wait a bit so the sizes of the navigatorsWidget and the viewContainers have all // had a chance to be updated. diff --git a/src/dolphinnewfilemenu.cpp b/src/dolphinnewfilemenu.cpp index ec2f19d6e..a64cf3def 100644 --- a/src/dolphinnewfilemenu.cpp +++ b/src/dolphinnewfilemenu.cpp @@ -8,12 +8,14 @@ #include "views/dolphinnewfilemenuobserver.h" -#include #include -DolphinNewFileMenu::DolphinNewFileMenu(KActionCollection *collection, QObject *parent) - : KNewFileMenu(collection, QStringLiteral("new_menu"), parent) +#include + +DolphinNewFileMenu::DolphinNewFileMenu(QAction *createDirAction, QObject *parent) + : KNewFileMenu(parent) { + setNewFolderShortcutAction(createDirAction); DolphinNewFileMenuObserver::instance().attach(this); } diff --git a/src/dolphinnewfilemenu.h b/src/dolphinnewfilemenu.h index 4fa173ef9..5538c9265 100644 --- a/src/dolphinnewfilemenu.h +++ b/src/dolphinnewfilemenu.h @@ -25,7 +25,7 @@ class DOLPHIN_EXPORT DolphinNewFileMenu : public KNewFileMenu Q_OBJECT public: - DolphinNewFileMenu(KActionCollection *collection, QObject *parent); + DolphinNewFileMenu(QAction *createDirAction, QObject *parent); ~DolphinNewFileMenu() override; Q_SIGNALS: diff --git a/src/dolphinpart.cpp b/src/dolphinpart.cpp index aac278035..a3856de6a 100644 --- a/src/dolphinpart.cpp +++ b/src/dolphinpart.cpp @@ -33,7 +33,6 @@ #include #include #include -#include #include #include @@ -46,15 +45,16 @@ #include #include +#include + K_PLUGIN_CLASS_WITH_JSON(DolphinPart, "dolphinpart.json") DolphinPart::DolphinPart(QWidget *parentWidget, QObject *parent, const KPluginMetaData &metaData, const QVariantList &args) - : KParts::ReadOnlyPart(parent) + : KParts::ReadOnlyPart(parent, metaData) , m_openTerminalAction(nullptr) , m_removeAction(nullptr) { Q_UNUSED(args) - setMetaData(metaData); m_extension = new DolphinPartBrowserExtension(this); @@ -85,7 +85,7 @@ DolphinPart::DolphinPart(QWidget *parentWidget, QObject *parent, const KPluginMe }); connect(m_view, &DolphinView::tabRequested, this, &DolphinPart::createNewWindow); connect(m_view, &DolphinView::requestContextMenu, this, &DolphinPart::slotOpenContextMenu); - connect(m_view, &DolphinView::selectionChanged, m_extension, &KParts::BrowserExtension::selectionInfo); + connect(m_view, &DolphinView::selectionChanged, m_extension, &KParts::NavigationExtension::selectionInfo); connect(m_view, &DolphinView::selectionChanged, this, &DolphinPart::slotSelectionChanged); connect(m_view, &DolphinView::requestItemInfo, this, &DolphinPart::slotRequestItemInfo); connect(m_view, &DolphinView::modeChanged, this, &DolphinPart::viewModeChanged); // relay signal @@ -141,7 +141,7 @@ void DolphinPart::createActions() { // Edit menu - m_newFileMenu = new DolphinNewFileMenu(actionCollection(), this); + m_newFileMenu = new DolphinNewFileMenu(actionCollection()->action(QStringLiteral("create_dir")), this); m_newFileMenu->setParentWidget(widget()); connect(m_newFileMenu->menu(), &QMenu::aboutToShow, this, &DolphinPart::updateNewMenu); @@ -362,8 +362,8 @@ void DolphinPart::createNewWindow(const QUrl &url) void DolphinPart::slotOpenContextMenu(const QPoint &pos, const KFileItem &_item, const KFileItemList &selectedItems, const QUrl &) { - KParts::BrowserExtension::PopupFlags popupFlags = - KParts::BrowserExtension::DefaultPopupItems | KParts::BrowserExtension::ShowProperties | KParts::BrowserExtension::ShowUrlOperations; + KParts::NavigationExtension::PopupFlags popupFlags = + KParts::NavigationExtension::DefaultPopupItems | KParts::NavigationExtension::ShowProperties | KParts::NavigationExtension::ShowUrlOperations; KFileItem item(_item); @@ -384,7 +384,7 @@ void DolphinPart::slotOpenContextMenu(const QPoint &pos, const KFileItem &_item, KFileItemListProperties capabilities(items); - KParts::BrowserExtension::ActionGroupMap actionGroups; + KParts::NavigationExtension::ActionGroupMap actionGroups; QList editActions; editActions += m_view->versionControlActions(m_view->selectedItems()); @@ -409,7 +409,7 @@ void DolphinPart::slotOpenContextMenu(const QPoint &pos, const KFileItem &_item, m_removeAction->update(); } } else { - popupFlags |= KParts::BrowserExtension::NoDeletion; + popupFlags |= KParts::NavigationExtension::NoDeletion; } if (supportsMoving) { @@ -420,7 +420,7 @@ void DolphinPart::slotOpenContextMenu(const QPoint &pos, const KFileItem &_item, // since otherwise the created file would not be visible. // But in treeview mode we should allow it. if (m_view->itemsExpandable()) - popupFlags |= KParts::BrowserExtension::ShowCreateDirectory; + popupFlags |= KParts::NavigationExtension::ShowCreateDirectory; } actionGroups.insert(QStringLiteral("editactions"), editActions); diff --git a/src/dolphinpart_ext.cpp b/src/dolphinpart_ext.cpp index 0bb016ea9..5d4845485 100644 --- a/src/dolphinpart_ext.cpp +++ b/src/dolphinpart_ext.cpp @@ -10,20 +10,20 @@ #include "views/dolphinview.h" DolphinPartBrowserExtension::DolphinPartBrowserExtension(DolphinPart *part) - : KParts::BrowserExtension(part) + : KParts::NavigationExtension(part) , m_part(part) { } void DolphinPartBrowserExtension::restoreState(QDataStream &stream) { - KParts::BrowserExtension::restoreState(stream); + KParts::NavigationExtension::restoreState(stream); m_part->view()->restoreState(stream); } void DolphinPartBrowserExtension::saveState(QDataStream &stream) { - KParts::BrowserExtension::saveState(stream); + KParts::NavigationExtension::saveState(stream); m_part->view()->saveState(stream); } diff --git a/src/dolphinpart_ext.h b/src/dolphinpart_ext.h index 615f14252..7f8792fbb 100644 --- a/src/dolphinpart_ext.h +++ b/src/dolphinpart_ext.h @@ -7,16 +7,16 @@ #ifndef DOLPHINPART_EXT_H #define DOLPHINPART_EXT_H -#include -#include -#include -#include +#include +#include +#include +#include #include class DolphinPart; -class DolphinPartBrowserExtension : public KParts::BrowserExtension +class DolphinPartBrowserExtension : public KParts::NavigationExtension { Q_OBJECT public: diff --git a/src/dolphintabbar.cpp b/src/dolphintabbar.cpp index a7799a669..c70089223 100644 --- a/src/dolphintabbar.cpp +++ b/src/dolphintabbar.cpp @@ -32,7 +32,7 @@ DolphinTabBar::DolphinTabBar(QWidget *parent) void DolphinTabBar::dragEnterEvent(QDragEnterEvent *event) { const QMimeData *mimeData = event->mimeData(); - const int index = tabAt(event->pos()); + const int index = tabAt(event->position().toPoint()); if (mimeData->hasUrls()) { event->acceptProposedAction(); @@ -52,7 +52,7 @@ void DolphinTabBar::dragLeaveEvent(QDragLeaveEvent *event) void DolphinTabBar::dragMoveEvent(QDragMoveEvent *event) { const QMimeData *mimeData = event->mimeData(); - const int index = tabAt(event->pos()); + const int index = tabAt(event->position().toPoint()); if (mimeData->hasUrls()) { updateAutoActivationTimer(index); @@ -67,7 +67,7 @@ void DolphinTabBar::dropEvent(QDropEvent *event) updateAutoActivationTimer(-1); const QMimeData *mimeData = event->mimeData(); - const int index = tabAt(event->pos()); + const int index = tabAt(event->position().toPoint()); if (mimeData->hasUrls()) { Q_EMIT tabDropEvent(index, event); diff --git a/src/dolphintabwidget.cpp b/src/dolphintabwidget.cpp index 89dd9feba..edc1cb7d8 100644 --- a/src/dolphintabwidget.cpp +++ b/src/dolphintabwidget.cpp @@ -393,7 +393,7 @@ void DolphinTabWidget::tabDropEvent(int index, QDropEvent *event) const auto urls = event->mimeData()->urls(); for (const QUrl &url : urls) { - auto *job = KIO::statDetails(url, KIO::StatJob::SourceSide, KIO::StatDetail::StatBasic, KIO::JobFlag::HideProgressInfo); + auto *job = KIO::stat(url, KIO::StatJob::SourceSide, KIO::StatDetail::StatBasic, KIO::JobFlag::HideProgressInfo); connect(job, &KJob::result, this, [this, job]() { if (!job->error() && job->statResult().isDir()) { openNewTab(job->url(), QUrl(), NewTabPosition::AtEnd); diff --git a/src/dolphinviewcontainer.cpp b/src/dolphinviewcontainer.cpp index 5b2a318d6..076551e5d 100644 --- a/src/dolphinviewcontainer.cpp +++ b/src/dolphinviewcontainer.cpp @@ -728,7 +728,8 @@ void DolphinViewContainer::slotItemActivated(const KFileItem &item) } KIO::OpenUrlJob *job = new KIO::OpenUrlJob(item.targetUrl(), item.mimetype()); - job->setUiDelegate(KIO::createDefaultJobUiDelegate(KJobUiDelegate::AutoHandlingEnabled, this)); + // Auto*Warning*Handling, errors are put in a KMessageWidget by us in slotOpenUrlFinished. + job->setUiDelegate(KIO::createDefaultJobUiDelegate(KJobUiDelegate::AutoWarningHandlingEnabled, this)); job->setShowOpenOrExecuteDialog(true); connect(job, &KIO::OpenUrlJob::finished, this, &DolphinViewContainer::slotOpenUrlFinished); job->start(); @@ -842,7 +843,11 @@ void DolphinViewContainer::slotUrlNavigatorLocationChanged(const QUrl &url) QDesktopServices::openUrl(url); redirect(QUrl(), m_urlNavigator->locationUrl(1)); } else { - showMessage(i18nc("@info:status", "Invalid protocol"), Error); + if (!url.scheme().isEmpty()) { + showMessage(i18nc("@info:status", "Invalid protocol '%1'", url.scheme()), Error); + } else { + showMessage(i18nc("@info:status", "Invalid protocol"), Error); + } m_urlNavigator->goBack(); } } diff --git a/src/global.cpp b/src/global.cpp index fa2b8e98a..c91046efb 100644 --- a/src/global.cpp +++ b/src/global.cpp @@ -75,7 +75,7 @@ bool Dolphin::attachToExistingInstance(const QList &inputUrls, } int activeWindowIndex = -1; - for (const auto &interface : qAsConst(dolphinInterfaces)) { + for (const auto &interface : std::as_const(dolphinInterfaces)) { ++activeWindowIndex; auto isActiveWindowReply = interface.first->isActiveWindow(); @@ -116,7 +116,7 @@ bool Dolphin::attachToExistingInstance(const QList &inputUrls, } } - for (const auto &interface : qAsConst(dolphinInterfaces)) { + for (const auto &interface : std::as_const(dolphinInterfaces)) { if (interface.second.isEmpty()) { continue; } diff --git a/src/kitemviews/kfileitemmodel.cpp b/src/kitemviews/kfileitemmodel.cpp index f42f2c193..77d5a319c 100644 --- a/src/kitemviews/kfileitemmodel.cpp +++ b/src/kitemviews/kfileitemmodel.cpp @@ -17,7 +17,6 @@ #include #include #include -#include #include #include @@ -982,7 +981,7 @@ void KFileItemModel::resortAllItems() // been moved because of the resorting. QList oldUrls; oldUrls.reserve(itemCount); - for (const ItemData *itemData : qAsConst(m_itemData)) { + for (const ItemData *itemData : std::as_const(m_itemData)) { oldUrls.append(itemData->item.url()); } @@ -1232,7 +1231,7 @@ void KFileItemModel::slotItemsDeleted(const KFileItemList &items) indexesToRemoveWithChildren.reserve(m_itemData.count()); const int itemCount = m_itemData.count(); - for (int index : qAsConst(indexesToRemove)) { + for (int index : std::as_const(indexesToRemove)) { indexesToRemoveWithChildren.append(index); const int parentLevel = expandedParentsCount(index); @@ -1650,7 +1649,7 @@ void KFileItemModel::prepareItemsForSorting(QList &itemDataList) case DeletionTimeRole: // These roles can be determined with retrieveData, and they have to be stored // in the QHash "values" for the sorting. - for (ItemData *itemData : qAsConst(itemDataList)) { + for (ItemData *itemData : std::as_const(itemDataList)) { if (itemData->values.isEmpty()) { itemData->values = retrieveData(itemData->item, itemData->parent); } @@ -1659,7 +1658,7 @@ void KFileItemModel::prepareItemsForSorting(QList &itemDataList) case TypeRole: // At least store the data including the file type for items with known MIME type. - for (ItemData *itemData : qAsConst(itemDataList)) { + for (ItemData *itemData : std::as_const(itemDataList)) { if (itemData->values.isEmpty()) { const KFileItem item = itemData->item; if (item.isDir() || item.isMimeTypeKnown()) { @@ -2599,7 +2598,7 @@ QList> KFileItemModel::permissionRoleGroups() const if (info.permission(QFile::ExeUser)) { user += i18nc("@item:intext Access permission, concatenated", "Execute, "); } - user = user.isEmpty() ? i18nc("@item:intext Access permission, concatenated", "Forbidden") : user.mid(0, user.count() - 2); + user = user.isEmpty() ? i18nc("@item:intext Access permission, concatenated", "Forbidden") : user.mid(0, user.length() - 2); // Set group string QString group; @@ -2612,7 +2611,7 @@ QList> KFileItemModel::permissionRoleGroups() const if (info.permission(QFile::ExeGroup)) { group += i18nc("@item:intext Access permission, concatenated", "Execute, "); } - group = group.isEmpty() ? i18nc("@item:intext Access permission, concatenated", "Forbidden") : group.mid(0, group.count() - 2); + group = group.isEmpty() ? i18nc("@item:intext Access permission, concatenated", "Forbidden") : group.mid(0, group.length() - 2); // Set others string QString others; @@ -2625,7 +2624,7 @@ QList> KFileItemModel::permissionRoleGroups() const if (info.permission(QFile::ExeOther)) { others += i18nc("@item:intext Access permission, concatenated", "Execute, "); } - others = others.isEmpty() ? i18nc("@item:intext Access permission, concatenated", "Forbidden") : others.mid(0, others.count() - 2); + others = others.isEmpty() ? i18nc("@item:intext Access permission, concatenated", "Forbidden") : others.mid(0, others.length() - 2); const QString newGroupValue = i18nc("@title:group Files and folders by permissions", "User: %1 | Group: %2 | Others: %3", user, group, others); if (newGroupValue != groupValue) { diff --git a/src/kitemviews/kfileitemmodelrolesupdater.cpp b/src/kitemviews/kfileitemmodelrolesupdater.cpp index 09894f13d..795b85a44 100644 --- a/src/kitemviews/kfileitemmodelrolesupdater.cpp +++ b/src/kitemviews/kfileitemmodelrolesupdater.cpp @@ -119,8 +119,7 @@ KFileItemModelRolesUpdater::KFileItemModelRolesUpdater(KFileItemModel *model, QO m_directoryContentsCounter = new KDirectoryContentsCounter(m_model, this); connect(m_directoryContentsCounter, &KDirectoryContentsCounter::result, this, &KFileItemModelRolesUpdater::slotDirectoryContentsCountReceived); - const QString pluginNamespace = QStringLiteral("kf" QT_STRINGIFY(QT_VERSION_MAJOR)) + QStringLiteral("/overlayicon"); - const auto plugins = KPluginMetaData::findPlugins(pluginNamespace, {}, KPluginMetaData::AllowEmptyMetaData); + const auto plugins = KPluginMetaData::findPlugins(QStringLiteral("kf6/overlayicon"), {}, KPluginMetaData::AllowEmptyMetaData); for (const KPluginMetaData &data : plugins) { auto instance = QPluginLoader(data.fileName()).instance(); auto plugin = qobject_cast(instance); @@ -906,7 +905,7 @@ void KFileItemModelRolesUpdater::startUpdating() m_pendingPreviewItems.clear(); m_pendingPreviewItems.reserve(indexes.count()); - for (int index : qAsConst(indexes)) { + for (int index : std::as_const(indexes)) { const KFileItem item = m_model->fileItem(index); if (!m_finishedItems.contains(item)) { m_pendingPreviewItems.append(item); @@ -1171,11 +1170,11 @@ void KFileItemModelRolesUpdater::updateChangedItems() std::sort(visibleChangedIndexes.begin(), visibleChangedIndexes.end()); if (m_previewShown) { - for (int index : qAsConst(visibleChangedIndexes)) { + for (int index : std::as_const(visibleChangedIndexes)) { m_pendingPreviewItems.append(m_model->fileItem(index)); } - for (int index : qAsConst(invisibleChangedIndexes)) { + for (int index : std::as_const(invisibleChangedIndexes)) { m_pendingPreviewItems.append(m_model->fileItem(index)); } @@ -1360,7 +1359,7 @@ QHash KFileItemModelRolesUpdater::rolesData(const KFileIte } QStringList overlays = item.overlays(); - for (KOverlayIconPlugin *it : qAsConst(m_overlayIconsPlugin)) { + for (KOverlayIconPlugin *it : std::as_const(m_overlayIconsPlugin)) { overlays.append(it->getOverlays(item.url())); } if (!overlays.isEmpty()) { @@ -1385,7 +1384,7 @@ void KFileItemModelRolesUpdater::slotOverlaysChanged(const QUrl &url, const QStr const int index = m_model->index(item); QHash data = m_model->data(index); QStringList overlays = item.overlays(); - for (KOverlayIconPlugin *it : qAsConst(m_overlayIconsPlugin)) { + for (KOverlayIconPlugin *it : std::as_const(m_overlayIconsPlugin)) { overlays.append(it->getOverlays(url)); } data.insert("iconOverlays", overlays); diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp index be22b91cc..cf1483659 100644 --- a/src/kitemviews/kitemlistview.cpp +++ b/src/kitemviews/kitemlistview.cpp @@ -236,7 +236,7 @@ void KItemListView::setVisibleRoles(const QList &roles) if (!m_headerWidget->automaticColumnResizing()) { // The column-width of new roles are still 0. Apply the preferred // column-width as default with. - for (const QByteArray &role : qAsConst(m_visibleRoles)) { + for (const QByteArray &role : std::as_const(m_visibleRoles)) { if (m_headerWidget->columnWidth(role) == 0) { const qreal width = m_headerWidget->preferredColumnWidth(role); m_headerWidget->setColumnWidth(role, width); @@ -723,7 +723,7 @@ void KItemListView::paint(QPainter *painter, const QStyleOptionGraphicsItem *opt { QGraphicsWidget::paint(painter, option, widget); - for (auto animation : qAsConst(m_rubberBandAnimations)) { + for (auto animation : std::as_const(m_rubberBandAnimations)) { QRectF rubberBandRect = animation->property(RubberPropertyName).toRectF(); const QPointF topLeft = rubberBandRect.topLeft(); @@ -1100,12 +1100,9 @@ void KItemListView::updateFont() void KItemListView::updatePalette() { - if (scene() && !scene()->views().isEmpty()) { - KItemListStyleOption option = styleOption(); - option.palette = scene()->views().first()->palette(); - - setStyleOption(option); - } + KItemListStyleOption option = styleOption(); + option.palette = palette(); + setStyleOption(option); } void KItemListView::slotItemsInserted(const KItemRangeList &itemRanges) @@ -1289,7 +1286,7 @@ void KItemListView::slotItemsRemoved(const KItemRangeList &itemRanges) // after the deleted items. It is important to update them in ascending // order to prevent overlaps when setting the new index. std::sort(itemsToMove.begin(), itemsToMove.end()); - for (int i : qAsConst(itemsToMove)) { + for (int i : std::as_const(itemsToMove)) { KItemListWidget *widget = m_visibleItems.value(i); Q_ASSERT(widget); const int newIndex = i - count; @@ -1915,7 +1912,7 @@ void KItemListView::doLayout(LayoutAnimationHint hint, int changedIndex, int cha } // Delete invisible KItemListWidget instances that have not been reused - for (int index : qAsConst(reusableItems)) { + for (int index : std::as_const(reusableItems)) { recycleWidget(m_visibleItems.value(index)); } @@ -2291,7 +2288,7 @@ QHash KItemListView::preferredColumnWidths(const KItemRangeLi const QFontMetricsF fontMetrics(m_headerWidget->font()); const int gripMargin = m_headerWidget->style()->pixelMetric(QStyle::PM_HeaderGripMargin); const int headerMargin = m_headerWidget->style()->pixelMetric(QStyle::PM_HeaderMargin); - for (const QByteArray &visibleRole : qAsConst(m_visibleRoles)) { + for (const QByteArray &visibleRole : std::as_const(m_visibleRoles)) { const QString headerText = m_model->roleDescription(visibleRole); const qreal headerWidth = fontMetrics.horizontalAdvance(headerText) + gripMargin + headerMargin * 2; widths.insert(visibleRole, headerWidth); @@ -2307,7 +2304,7 @@ QHash KItemListView::preferredColumnWidths(const KItemRangeLi const int endIndex = startIndex + itemRange.count - 1; for (int i = startIndex; i <= endIndex; ++i) { - for (const QByteArray &visibleRole : qAsConst(m_visibleRoles)) { + for (const QByteArray &visibleRole : std::as_const(m_visibleRoles)) { qreal maxWidth = widths.value(visibleRole, 0); const qreal width = creator->preferredRoleColumnWidth(visibleRole, i, this); maxWidth = qMax(width, maxWidth); @@ -2348,7 +2345,7 @@ void KItemListView::applyColumnWidthsFromHeader() void KItemListView::updateWidgetColumnWidths(KItemListWidget *widget) { - for (const QByteArray &role : qAsConst(m_visibleRoles)) { + for (const QByteArray &role : std::as_const(m_visibleRoles)) { widget->setColumnWidth(role, m_headerWidget->columnWidth(role)); } widget->setSidePadding(m_headerWidget->sidePadding()); @@ -2365,7 +2362,7 @@ void KItemListView::updatePreferredColumnWidths(const KItemRangeList &itemRanges if (itemCount == rangesItemCount) { const QHash preferredWidths = preferredColumnWidths(itemRanges); - for (const QByteArray &role : qAsConst(m_visibleRoles)) { + for (const QByteArray &role : std::as_const(m_visibleRoles)) { m_headerWidget->setPreferredColumnWidth(role, preferredWidths.value(role)); } } else { @@ -2420,7 +2417,7 @@ void KItemListView::applyAutomaticColumnWidths() // size does not use the available view-size the size of the // first role will get stretched. - for (const QByteArray &role : qAsConst(m_visibleRoles)) { + for (const QByteArray &role : std::as_const(m_visibleRoles)) { const qreal preferredWidth = m_headerWidget->preferredColumnWidth(role); m_headerWidget->setColumnWidth(role, preferredWidth); } @@ -2469,7 +2466,7 @@ void KItemListView::applyAutomaticColumnWidths() qreal KItemListView::columnWidthsSum() const { qreal widthsSum = 0; - for (const QByteArray &role : qAsConst(m_visibleRoles)) { + for (const QByteArray &role : std::as_const(m_visibleRoles)) { widthsSum += m_headerWidget->columnWidth(role); } return widthsSum; diff --git a/src/kitemviews/kitemlistviewaccessible.cpp b/src/kitemviews/kitemlistviewaccessible.cpp index 38c883efe..a8d80ab52 100644 --- a/src/kitemviews/kitemlistviewaccessible.cpp +++ b/src/kitemviews/kitemlistviewaccessible.cpp @@ -32,7 +32,7 @@ KItemListViewAccessible::KItemListViewAccessible(KItemListView *view_, KItemList KItemListViewAccessible::~KItemListViewAccessible() { - for (AccessibleIdWrapper idWrapper : qAsConst(m_cells)) { + for (AccessibleIdWrapper idWrapper : std::as_const(m_cells)) { if (idWrapper.isValid) { QAccessible::deleteAccessibleInterface(idWrapper.id); } diff --git a/src/kitemviews/kitemset.cpp b/src/kitemviews/kitemset.cpp index b3a9909af..c8c1ff076 100644 --- a/src/kitemviews/kitemset.cpp +++ b/src/kitemviews/kitemset.cpp @@ -195,14 +195,14 @@ KItemSet KItemSet::operator^(const KItemSet &other) const const QVector::iterator end = rangeBoundaries.end(); QVector::iterator it = begin; - for (const KItemRange &range : qAsConst(m_itemRanges)) { + for (const KItemRange &range : std::as_const(m_itemRanges)) { *it++ = range.index; *it++ = range.index + range.count; } const QVector::iterator middle = it; - for (const KItemRange &range : qAsConst(other.m_itemRanges)) { + for (const KItemRange &range : std::as_const(other.m_itemRanges)) { *it++ = range.index; *it++ = range.index + range.count; } diff --git a/src/kitemviews/kitemset.h b/src/kitemviews/kitemset.h index b8ab6864d..d3562aca4 100644 --- a/src/kitemviews/kitemset.h +++ b/src/kitemviews/kitemset.h @@ -368,7 +368,7 @@ inline KItemSet &KItemSet::operator=(const KItemSet &other) inline int KItemSet::count() const { int result = 0; - for (const KItemRange &range : qAsConst(m_itemRanges)) { + for (const KItemRange &range : std::as_const(m_itemRanges)) { result += range.count; } return result; diff --git a/src/kitemviews/kstandarditemlistwidget.cpp b/src/kitemviews/kstandarditemlistwidget.cpp index 0088e4116..e37013f95 100644 --- a/src/kitemviews/kstandarditemlistwidget.cpp +++ b/src/kitemviews/kstandarditemlistwidget.cpp @@ -1291,7 +1291,7 @@ void KStandardItemListWidget::updateIconsLayoutTextCache() // Calculate the position for each additional information qreal y = nameTextInfo->pos.y() + nameHeight; - for (const QByteArray &role : qAsConst(m_sortedVisibleRoles)) { + for (const QByteArray &role : std::as_const(m_sortedVisibleRoles)) { if (role == "text") { continue; } @@ -1357,7 +1357,7 @@ void KStandardItemListWidget::updateCompactLayoutTextCache() const qreal x = option.padding * 3 + iconSize(); qreal y = qRound((widgetHeight - textLinesHeight) / 2); const qreal maxWidth = size().width() - x - option.padding; - for (const QByteArray &role : qAsConst(m_sortedVisibleRoles)) { + for (const QByteArray &role : std::as_const(m_sortedVisibleRoles)) { const QString text = escapeString(roleText(role, values)); TextInfo *textInfo = m_textInfo.value(role); textInfo->staticText.setText(text); @@ -1407,7 +1407,7 @@ void KStandardItemListWidget::updateDetailsLayoutTextCache() qreal x = firstColumnInc; const qreal y = qMax(qreal(option.padding), (widgetHeight - fontHeight) / 2); - for (const QByteArray &role : qAsConst(m_sortedVisibleRoles)) { + for (const QByteArray &role : std::as_const(m_sortedVisibleRoles)) { QString text = roleText(role, values); // Elide the text in case it does not fit into the available column-width @@ -1555,13 +1555,18 @@ void KStandardItemListWidget::closeRoleEditor() m_roleEditor = nullptr; } -QPixmap KStandardItemListWidget::pixmapForIcon(const QString &name, const QStringList &overlays, int size, QIcon::Mode mode) +QPixmap KStandardItemListWidget::pixmapForIcon(const QString &name, const QStringList &overlays, int size, QIcon::Mode mode) const { static const QIcon fallbackIcon = QIcon::fromTheme(QStringLiteral("unknown")); + qreal dpr = qApp->devicePixelRatio(); + if (scene() && !scene()->views().isEmpty()) { + dpr = scene()->views().constFirst()->devicePixelRatioF(); + } - size *= qApp->devicePixelRatio(); + size *= dpr; - const QString key = "KStandardItemListWidget:" % name % ":" % overlays.join(QLatin1Char(':')) % ":" % QString::number(size) % ":" % QString::number(mode); + const QString key = "KStandardItemListWidget:" % name % ":" % overlays.join(QLatin1Char(':')) % ":" % QString::number(size) % "@" % QString::number(dpr) + % ":" % QString::number(mode); QPixmap pixmap; if (!QPixmapCache::find(key, &pixmap)) { @@ -1569,11 +1574,11 @@ QPixmap KStandardItemListWidget::pixmapForIcon(const QString &name, const QStrin if (icon.isNull()) { icon = QIcon(name); } - if (icon.isNull() || icon.pixmap(size / qApp->devicePixelRatio(), size / qApp->devicePixelRatio(), mode).isNull()) { + if (icon.isNull() || icon.pixmap(size / dpr, size / dpr, mode).isNull()) { icon = fallbackIcon; } - pixmap = icon.pixmap(size / qApp->devicePixelRatio(), size / qApp->devicePixelRatio(), mode); + pixmap = icon.pixmap(QSize(size / dpr, size / dpr), dpr, mode); if (pixmap.width() != size || pixmap.height() != size) { KPixmapModifier::scale(pixmap, QSize(size, size)); } @@ -1610,7 +1615,7 @@ QPixmap KStandardItemListWidget::pixmapForIcon(const QString &name, const QStrin QPixmapCache::insert(key, pixmap); } - pixmap.setDevicePixelRatio(qApp->devicePixelRatio()); + pixmap.setDevicePixelRatio(dpr); return pixmap; } diff --git a/src/kitemviews/kstandarditemlistwidget.h b/src/kitemviews/kstandarditemlistwidget.h index 52cde1423..a09f0c7a8 100644 --- a/src/kitemviews/kstandarditemlistwidget.h +++ b/src/kitemviews/kstandarditemlistwidget.h @@ -221,7 +221,7 @@ private: */ void closeRoleEditor(); - static QPixmap pixmapForIcon(const QString &name, const QStringList &overlays, int size, QIcon::Mode mode); + QPixmap pixmapForIcon(const QString &name, const QStringList &overlays, int size, QIcon::Mode mode) const; /** * @return Preferred size of the rating-image based on the given diff --git a/src/kitemviews/private/kbaloorolesprovider.cpp b/src/kitemviews/private/kbaloorolesprovider.cpp index 4cf36eb2d..d0632e2c5 100644 --- a/src/kitemviews/private/kbaloorolesprovider.cpp +++ b/src/kitemviews/private/kbaloorolesprovider.cpp @@ -112,7 +112,7 @@ QHash KBalooRolesProvider::roleValues(const Baloo::File &f }); values.insert(role, propertyInfo.formatAsDisplayString(list)); } else { - if (propertyInfo.valueType() == QVariant::DateTime) { + if (propertyInfo.valueType() == QMetaType::Type::QDateTime) { // Let dolphin format later Dates values.insert(role, (*rangeBegin).second); } else { diff --git a/src/kitemviews/private/kdirectorycontentscounter.cpp b/src/kitemviews/private/kdirectorycontentscounter.cpp index 47f538447..dcf7247a9 100644 --- a/src/kitemviews/private/kdirectorycontentscounter.cpp +++ b/src/kitemviews/private/kdirectorycontentscounter.cpp @@ -166,7 +166,7 @@ void KDirectoryContentsCounter::slotItemsRemoved() if (!m_watchedDirs.isEmpty()) { // Don't let KDirWatch watch for removed items if (allItemsRemoved) { - for (const QString &path : qAsConst(m_watchedDirs)) { + for (const QString &path : std::as_const(m_watchedDirs)) { m_dirWatcher->removeDir(path); } m_watchedDirs.clear(); diff --git a/src/kitemviews/private/kitemlistheaderwidget.cpp b/src/kitemviews/private/kitemlistheaderwidget.cpp index 82e5dde97..02a4f939d 100644 --- a/src/kitemviews/private/kitemlistheaderwidget.cpp +++ b/src/kitemviews/private/kitemlistheaderwidget.cpp @@ -167,7 +167,7 @@ void KItemListHeaderWidget::paint(QPainter *painter, const QStyleOptionGraphicsI qreal x = -m_offset + m_sidePadding; int orderIndex = 0; - for (const QByteArray &role : qAsConst(m_columns)) { + for (const QByteArray &role : std::as_const(m_columns)) { const qreal roleWidth = m_columnWidths.value(role); const QRectF rect(x, 0, roleWidth, size().height()); paintRole(painter, role, rect, orderIndex, widget); @@ -507,7 +507,7 @@ int KItemListHeaderWidget::roleIndexAt(const QPointF &pos) const int index = -1; qreal x = -m_offset + m_sidePadding; - for (const QByteArray &role : qAsConst(m_columns)) { + for (const QByteArray &role : std::as_const(m_columns)) { ++index; x += m_columnWidths.value(role); if (pos.x() <= x) { @@ -540,7 +540,7 @@ bool KItemListHeaderWidget::isAbovePaddingGrip(const QPointF &pos, PaddingGrip p return pos.x() >= (lx - grip) && pos.x() <= lx; case Trailing: { qreal rx = lx; - for (const QByteArray &role : qAsConst(m_columns)) { + for (const QByteArray &role : std::as_const(m_columns)) { rx += m_columnWidths.value(role); } return pos.x() >= (rx - grip) && pos.x() <= rx; @@ -604,7 +604,7 @@ int KItemListHeaderWidget::targetOfMovingRole() const qreal KItemListHeaderWidget::roleXPosition(const QByteArray &role) const { qreal x = -m_offset + m_sidePadding; - for (const QByteArray &visibleRole : qAsConst(m_columns)) { + for (const QByteArray &visibleRole : std::as_const(m_columns)) { if (visibleRole == role) { return x; } diff --git a/src/panels/folders/treeviewcontextmenu.cpp b/src/panels/folders/treeviewcontextmenu.cpp index 45e146a2e..419d174e9 100644 --- a/src/panels/folders/treeviewcontextmenu.cpp +++ b/src/panels/folders/treeviewcontextmenu.cpp @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include #include #include @@ -22,9 +22,6 @@ #include #include -#include -#include - #include #include #include diff --git a/src/panels/information/informationpanel.cpp b/src/panels/information/informationpanel.cpp index 7367f1d13..9d1e5b971 100644 --- a/src/panels/information/informationpanel.cpp +++ b/src/panels/information/informationpanel.cpp @@ -244,7 +244,7 @@ void InformationPanel::showItemInfo() // No item is hovered and no selection has been done: provide // an item for the currently shown directory. m_shownUrl = url(); - m_folderStatJob = KIO::statDetails(m_shownUrl, KIO::StatJob::SourceSide, KIO::StatDefaultDetails | KIO::StatRecursiveSize, KIO::HideProgressInfo); + m_folderStatJob = KIO::stat(m_shownUrl, KIO::StatJob::SourceSide, KIO::StatDefaultDetails | KIO::StatRecursiveSize, KIO::HideProgressInfo); if (m_folderStatJob->uiDelegate()) { KJobWidgets::setWindow(m_folderStatJob, this); } diff --git a/src/panels/information/informationpanelcontent.cpp b/src/panels/information/informationpanelcontent.cpp index d93457b27..62f25b24b 100644 --- a/src/panels/information/informationpanelcontent.cpp +++ b/src/panels/information/informationpanelcontent.cpp @@ -23,8 +23,8 @@ #include -#include -#include +#include +#include #include #include diff --git a/src/panels/information/phononwidget.cpp b/src/panels/information/phononwidget.cpp index 77d55da8b..3365998f4 100644 --- a/src/panels/information/phononwidget.cpp +++ b/src/panels/information/phononwidget.cpp @@ -7,10 +7,10 @@ #include "phononwidget.h" #include -#include -#include -#include -#include +#include +#include +#include +#include #include #include diff --git a/src/panels/information/phononwidget.h b/src/panels/information/phononwidget.h index 4662e47af..a0a913b4f 100644 --- a/src/panels/information/phononwidget.h +++ b/src/panels/information/phononwidget.h @@ -7,7 +7,7 @@ #ifndef PHONONWIDGET_H #define PHONONWIDGET_H -#include +#include #include #include diff --git a/src/panels/places/placespanel.cpp b/src/panels/places/placespanel.cpp index e3d133ff0..8bdb18ba2 100644 --- a/src/panels/places/placespanel.cpp +++ b/src/panels/places/placespanel.cpp @@ -150,7 +150,7 @@ static bool isInternalDrag(const QMimeData *mimeData) void PlacesPanel::dragMoveEvent(QDragMoveEvent *event) { - const QModelIndex index = indexAt(event->pos()); + const QModelIndex index = indexAt(event->position().toPoint()); if (index.isValid()) { auto *placesModel = static_cast(model()); diff --git a/src/panels/terminal/terminalpanel.cpp b/src/panels/terminal/terminalpanel.cpp index 72886c2e9..0e79a475d 100644 --- a/src/panels/terminal/terminalpanel.cpp +++ b/src/panels/terminal/terminalpanel.cpp @@ -47,6 +47,11 @@ TerminalPanel::TerminalPanel(QWidget *parent) TerminalPanel::~TerminalPanel() { + if (m_konsolePart) { + // Avoid when QObject cleanup, which comes after our destructor, deletes the konsolePart + // and subsequently calls back into our slot when the destructor has already run. + disconnect(m_konsolePart, &KParts::ReadOnlyPart::destroyed, this, &TerminalPanel::terminalExited); + } } void TerminalPanel::goHome() @@ -144,7 +149,7 @@ void TerminalPanel::showEvent(QShowEvent *event) if (!m_terminal) { m_clearTerminal = true; - KPluginFactory *factory = KPluginFactory::loadFactory(KPluginMetaData(QStringLiteral("konsolepart"))).plugin; + KPluginFactory *factory = KPluginFactory::loadFactory(KPluginMetaData(QStringLiteral("kf6/parts/konsolepart"))).plugin; m_konsolePart = factory ? (factory->create(this)) : nullptr; if (m_konsolePart) { connect(m_konsolePart, &KParts::ReadOnlyPart::destroyed, this, &TerminalPanel::terminalExited); diff --git a/src/search/dolphinfacetswidget.cpp b/src/search/dolphinfacetswidget.cpp index 31f8cb800..da36caa36 100644 --- a/src/search/dolphinfacetswidget.cpp +++ b/src/search/dolphinfacetswidget.cpp @@ -282,7 +282,7 @@ void DolphinFacetsWidget::updateTagsMenuItems(const QUrl &, const KFileItemList const bool onlyOneTag = allTags.count() == 1; - for (const QString &tagName : qAsConst(allTags)) { + for (const QString &tagName : std::as_const(allTags)) { QAction *action = tagsMenu->addAction(QIcon::fromTheme(QStringLiteral("tag")), tagName); action->setCheckable(true); action->setChecked(m_searchTags.contains(tagName)); diff --git a/src/settings/contextmenu/contextmenusettingspage.cpp b/src/settings/contextmenu/contextmenusettingspage.cpp index c81078095..a1fada2ad 100644 --- a/src/settings/contextmenu/contextmenusettingspage.cpp +++ b/src/settings/contextmenu/contextmenusettingspage.cpp @@ -9,18 +9,14 @@ #include "dolphin_contextmenusettings.h" #include "dolphin_versioncontrolsettings.h" #include "global.h" -#include "settings/serviceitemdelegate.h" #include "settings/servicemodel.h" #include -#include #include #include #include #include #include -#include -#include #include #include #include @@ -73,7 +69,6 @@ ContextMenuSettingsPage::ContextMenuSettingsPage(QWidget *parent, const KActionC m_listView = new QListView(this); QScroller::grabGesture(m_listView->viewport(), QScroller::TouchGesture); - auto *delegate = new ServiceItemDelegate(m_listView, m_listView); m_serviceModel = new ServiceModel(this); m_sortModel = new QSortFilterProxyModel(this); m_sortModel->setSourceModel(m_serviceModel); @@ -82,7 +77,6 @@ ContextMenuSettingsPage::ContextMenuSettingsPage(QWidget *parent, const KActionC m_sortModel->setFilterRole(Qt::DisplayRole); m_sortModel->setFilterCaseSensitivity(Qt::CaseInsensitive); m_listView->setModel(m_sortModel); - m_listView->setItemDelegate(delegate); m_listView->setVerticalScrollMode(QListView::ScrollPerPixel); connect(m_listView, &QListView::clicked, this, &ContextMenuSettingsPage::changed); @@ -179,7 +173,7 @@ void ContextMenuSettingsPage::applySettings() for (int i = 0; i < m_serviceModel->rowCount(); ++i) { const QModelIndex index = m_serviceModel->index(i, 0); const QString service = m_serviceModel->data(index, ServiceModel::DesktopEntryNameRole).toString(); - const bool checked = m_serviceModel->data(index, Qt::CheckStateRole).toBool(); + const bool checked = m_serviceModel->data(index, Qt::CheckStateRole).value() == Qt::Checked; if (service.startsWith(VersionControlServicePrefix)) { if (checked) { @@ -234,7 +228,7 @@ void ContextMenuSettingsPage::restoreDefaults() const bool checked = !service.startsWith(VersionControlServicePrefix) && service != QLatin1String(DeleteService) && service != QLatin1String(CopyToMoveToService); - m_serviceModel->setData(index, checked, Qt::CheckStateRole); + m_serviceModel->setData(index, checked ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); } } @@ -261,7 +255,7 @@ void ContextMenuSettingsPage::showEvent(QShowEvent *event) for (const QString &id : m_actionIds) { const QAction *action = m_actions->action(id); if (action) { - addRow(action->icon().name(), action->text(), id, entryVisible(id)); + addRow(action->icon().name(), KLocalizedString::removeAcceleratorMarker(action->text()), id, entryVisible(id)); } } } @@ -282,15 +276,8 @@ void ContextMenuSettingsPage::loadServices() const auto locations = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QStringLiteral("kio/servicemenus"), QStandardPaths::LocateDirectory); QStringList files = KFileUtils::findAllUniqueFiles(locations); -#if KIOWIDGETS_BUILD_DEPRECATED_SINCE(5, 90) - const KService::List services = KServiceTypeTrader::self()->query(QStringLiteral("KonqPopupMenu/Plugin")); - for (const KService::Ptr &service : services) { - files << QStandardPaths::locate(QStandardPaths::GenericDataLocation, "kservices5/" % service->entryPath()); - } -#endif - - for (const auto &file : qAsConst(files)) { - const QList serviceActions = KDesktopFileActions::userDefinedServices(KService(file), true); + for (const auto &file : std::as_const(files)) { + const QList serviceActions = KService(file).actions(); const KDesktopFile desktopFile(file); const QString subMenuName = desktopFile.desktopGroup().readEntry("X-KDE-Submenu"); @@ -307,20 +294,8 @@ void ContextMenuSettingsPage::loadServices() } } - // Load service plugins, this is deprecated in KIO 5.82 -#if KIOCORE_BUILD_DEPRECATED_SINCE(5, 82) - const KService::List pluginServices = KServiceTypeTrader::self()->query(QStringLiteral("KFileItemAction/Plugin")); - for (const KService::Ptr &service : pluginServices) { - const QString desktopEntryName = service->desktopEntryName(); - if (!isInServicesList(desktopEntryName)) { - const bool checked = showGroup.readEntry(desktopEntryName, true); - addRow(service->icon(), service->name(), desktopEntryName, checked); - } - } -#endif - // Load JSON-based plugins that implement the KFileItemActionPlugin interface - const auto jsonPlugins = KPluginMetaData::findPlugins(QStringLiteral("kf" QT_STRINGIFY(QT_VERSION_MAJOR)) + QStringLiteral("/kfileitemaction")); + const auto jsonPlugins = KPluginMetaData::findPlugins(QStringLiteral("kf6/kfileitemaction")); for (const auto &jsonMetadata : jsonPlugins) { const QString desktopEntryName = jsonMetadata.pluginId(); @@ -370,7 +345,7 @@ void ContextMenuSettingsPage::addRow(const QString &icon, const QString &text, c m_serviceModel->setData(index, icon, Qt::DecorationRole); m_serviceModel->setData(index, text, Qt::DisplayRole); m_serviceModel->setData(index, value, ServiceModel::DesktopEntryNameRole); - m_serviceModel->setData(index, checked, Qt::CheckStateRole); + m_serviceModel->setData(index, checked ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); } #include "moc_contextmenusettingspage.cpp" diff --git a/src/settings/contextmenu/servicemenuinstaller/CMakeLists.txt b/src/settings/contextmenu/servicemenuinstaller/CMakeLists.txt index 74576ad20..603e5c2e5 100644 --- a/src/settings/contextmenu/servicemenuinstaller/CMakeLists.txt +++ b/src/settings/contextmenu/servicemenuinstaller/CMakeLists.txt @@ -5,8 +5,8 @@ add_executable(servicemenuinstaller servicemenuinstaller.cpp) target_link_libraries(servicemenuinstaller PRIVATE Qt${QT_MAJOR_VERSION}::Core Qt${QT_MAJOR_VERSION}::Gui - KF5::I18n - KF5::CoreAddons + KF6::I18n + KF6::CoreAddons ) if(HAVE_PACKAGEKIT) diff --git a/src/settings/contextmenu/servicemenuinstaller/servicemenuinstaller.cpp b/src/settings/contextmenu/servicemenuinstaller/servicemenuinstaller.cpp index acee97cf1..fa7369e06 100644 --- a/src/settings/contextmenu/servicemenuinstaller/servicemenuinstaller.cpp +++ b/src/settings/contextmenu/servicemenuinstaller/servicemenuinstaller.cpp @@ -172,7 +172,7 @@ void runUncompress(const QString &inputPath, const QString &outputPath) const auto mime = QMimeDatabase().mimeTypeForFile(inputPath).name(); UncompressCommand command{}; - for (const auto &pair : qAsConst(mimeTypeToCommand)) { + for (const auto &pair : std::as_const(mimeTypeToCommand)) { if (pair.first.contains(mime)) { command = pair.second; break; diff --git a/src/settings/dolphinsettingsdialog.cpp b/src/settings/dolphinsettingsdialog.cpp index d05d5a814..8c41794e9 100644 --- a/src/settings/dolphinsettingsdialog.cpp +++ b/src/settings/dolphinsettingsdialog.cpp @@ -130,7 +130,7 @@ void DolphinSettingsDialog::enableApply() void DolphinSettingsDialog::applySettings() { - for (SettingsPageBase *page : qAsConst(m_pages)) { + for (SettingsPageBase *page : std::as_const(m_pages)) { page->applySettings(); } @@ -149,7 +149,7 @@ void DolphinSettingsDialog::applySettings() void DolphinSettingsDialog::restoreDefaults() { - for (SettingsPageBase *page : qAsConst(m_pages)) { + for (SettingsPageBase *page : std::as_const(m_pages)) { page->restoreDefaults(); } } diff --git a/src/settings/interface/configurepreviewplugindialog.cpp b/src/settings/interface/configurepreviewplugindialog.cpp deleted file mode 100644 index 8846d8261..000000000 --- a/src/settings/interface/configurepreviewplugindialog.cpp +++ /dev/null @@ -1,73 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2011 Peter Penz - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ - -#include "configurepreviewplugindialog.h" - -#if KIOWIDGETS_BUILD_DEPRECATED_SINCE(5, 87) - -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include - -ConfigurePreviewPluginDialog::ConfigurePreviewPluginDialog(const QString &pluginName, const QString &desktopEntryName, QWidget *parent) - : QDialog(parent) -{ - QSharedPointer previewPlugin; - const QString pluginPath = QPluginLoader(desktopEntryName).fileName(); - if (!pluginPath.isEmpty()) { - newCreator create = (newCreator)QLibrary::resolve(pluginPath, "new_creator"); - if (create) { - previewPlugin.reset(dynamic_cast(create())); - } - } - - setWindowTitle(i18nc("@title:window", "Configure Preview for %1", pluginName)); - setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Minimum); - setMinimumWidth(400); - - auto layout = new QVBoxLayout(this); - - if (previewPlugin) { - auto configurationWidget = previewPlugin->createConfigurationWidget(); - configurationWidget->setParent(this); - layout->addWidget(configurationWidget); - - layout->addStretch(); - - connect(this, &ConfigurePreviewPluginDialog::accepted, this, [=] { - // TODO: It would be great having a mechanism to tell PreviewJob that only previews - // for a specific MIME-type should be regenerated. As this is not available yet we - // delete the whole thumbnails directory. - previewPlugin->writeConfiguration(configurationWidget); - - // https://specifications.freedesktop.org/thumbnail-spec/thumbnail-spec-latest.html#DIRECTORY - const QString thumbnailsPath = QStandardPaths::writableLocation(QStandardPaths::GenericCacheLocation) + QLatin1String("/thumbnails/"); - KIO::del(QUrl::fromLocalFile(thumbnailsPath), KIO::HideProgressInfo); - }); - } - - auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this); - connect(buttonBox, &QDialogButtonBox::accepted, this, &ConfigurePreviewPluginDialog::accept); - connect(buttonBox, &QDialogButtonBox::rejected, this, &ConfigurePreviewPluginDialog::reject); - layout->addWidget(buttonBox); - - auto okButton = buttonBox->button(QDialogButtonBox::Ok); - okButton->setShortcut(Qt::CTRL | Qt::Key_Return); - okButton->setDefault(true); -} - -#include "moc_configurepreviewplugindialog.cpp" - -#endif // KIO_VERSION diff --git a/src/settings/interface/configurepreviewplugindialog.h b/src/settings/interface/configurepreviewplugindialog.h deleted file mode 100644 index 66504cce2..000000000 --- a/src/settings/interface/configurepreviewplugindialog.h +++ /dev/null @@ -1,36 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2011 Peter Penz - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ - -#ifndef CONFIGUREPREVIEWPLUGINDIALOG_H -#define CONFIGUREPREVIEWPLUGINDIALOG_H - -#include - -#if KIOWIDGETS_BUILD_DEPRECATED_SINCE(5, 87) - -#include - -/** - * @brief Dialog for configuring preview-plugins. - */ -class ConfigurePreviewPluginDialog : public QDialog -{ - Q_OBJECT - -public: - /** - * @param pluginName User visible name of the plugin - * @param desktopEntryName The name of the plugin that is noted in the desktopentry. - * Is used to instantiate the plugin to get the configuration - * widget. - * @param parent Parent widget. - */ - ConfigurePreviewPluginDialog(const QString &pluginName, const QString &desktopEntryName, QWidget *parent); - ~ConfigurePreviewPluginDialog() override = default; -}; -#endif // KIOWIDGETS_BUILD_DEPRECATED_SINCE - -#endif diff --git a/src/settings/interface/folderstabssettingspage.cpp b/src/settings/interface/folderstabssettingspage.cpp index d71ad2d96..85a0e8e13 100644 --- a/src/settings/interface/folderstabssettingspage.cpp +++ b/src/settings/interface/folderstabssettingspage.cpp @@ -160,7 +160,7 @@ void FoldersTabsSettingsPage::applySettings() settings->setCloseActiveSplitView(m_closeActiveSplitView->isChecked()); const QUrl url(QUrl::fromUserInput(m_homeUrl->text(), QString(), QUrl::AssumeLocalFile)); if (url.isValid() && KProtocolManager::supportsListing(url)) { - KIO::StatJob *job = KIO::statDetails(url, KIO::StatJob::SourceSide, KIO::StatDetail::StatBasic, KIO::JobFlag::HideProgressInfo); + KIO::StatJob *job = KIO::stat(url, KIO::StatJob::SourceSide, KIO::StatDetail::StatBasic, KIO::JobFlag::HideProgressInfo); connect(job, &KJob::result, this, [this, settings, url](KJob *job) { if (job->error() == 0 && qobject_cast(job)->statResult().isDir()) { settings->setHomeUrl(url.toDisplayString(QUrl::PreferLocalFile)); diff --git a/src/settings/interface/interfacesettingspage.cpp b/src/settings/interface/interfacesettingspage.cpp index e941cf467..6a3fc8c90 100644 --- a/src/settings/interface/interfacesettingspage.cpp +++ b/src/settings/interface/interfacesettingspage.cpp @@ -59,14 +59,14 @@ InterfaceSettingsPage::~InterfaceSettingsPage() void InterfaceSettingsPage::applySettings() { - for (SettingsPageBase *page : qAsConst(m_pages)) { + for (SettingsPageBase *page : std::as_const(m_pages)) { page->applySettings(); } } void InterfaceSettingsPage::restoreDefaults() { - for (SettingsPageBase *page : qAsConst(m_pages)) { + for (SettingsPageBase *page : std::as_const(m_pages)) { page->restoreDefaults(); } } diff --git a/src/settings/interface/previewssettingspage.cpp b/src/settings/interface/previewssettingspage.cpp index ef98d0f8d..dd1ce942e 100644 --- a/src/settings/interface/previewssettingspage.cpp +++ b/src/settings/interface/previewssettingspage.cpp @@ -6,9 +6,7 @@ #include "previewssettingspage.h" -#include "configurepreviewplugindialog.h" #include "dolphin_generalsettings.h" -#include "settings/serviceitemdelegate.h" #include "settings/servicemodel.h" #include @@ -45,12 +43,6 @@ PreviewsSettingsPage::PreviewsSettingsPage(QWidget *parent) m_listView = new QListView(this); QScroller::grabGesture(m_listView->viewport(), QScroller::TouchGesture); -#if KIOWIDGETS_BUILD_DEPRECATED_SINCE(5, 87) - ServiceItemDelegate *delegate = new ServiceItemDelegate(m_listView, m_listView); - connect(delegate, &ServiceItemDelegate::requestServiceConfiguration, this, &PreviewsSettingsPage::configureService); - m_listView->setItemDelegate(delegate); -#endif - ServiceModel *serviceModel = new ServiceModel(this); QSortFilterProxyModel *proxyModel = new QSortFilterProxyModel(this); proxyModel->setSourceModel(serviceModel); @@ -111,7 +103,7 @@ void PreviewsSettingsPage::applySettings() m_enabledPreviewPlugins.clear(); for (int i = 0; i < rowCount; ++i) { const QModelIndex index = model->index(i, 0); - const bool checked = model->data(index, Qt::CheckStateRole).toBool(); + const bool checked = model->data(index, Qt::CheckStateRole).value() == Qt::Checked; if (checked) { const QString enabledPlugin = model->data(index, Qt::UserRole).toString(); m_enabledPreviewPlugins.append(enabledPlugin); @@ -150,19 +142,6 @@ void PreviewsSettingsPage::showEvent(QShowEvent *event) SettingsPageBase::showEvent(event); } -#if KIOWIDGETS_BUILD_DEPRECATED_SINCE(5, 87) -void PreviewsSettingsPage::configureService(const QModelIndex &index) -{ - const QAbstractItemModel *model = index.model(); - const QString pluginName = model->data(index).toString(); - const QString desktopEntryName = model->data(index, ServiceModel::DesktopEntryNameRole).toString(); - - ConfigurePreviewPluginDialog *dialog = new ConfigurePreviewPluginDialog(pluginName, desktopEntryName, this); - dialog->setAttribute(Qt::WA_DeleteOnClose); - dialog->show(); -} -#endif - void PreviewsSettingsPage::loadPreviewPlugins() { QAbstractItemModel *model = m_listView->model(); @@ -173,14 +152,9 @@ void PreviewsSettingsPage::loadPreviewPlugins() model->insertRow(0); const QModelIndex index = model->index(0, 0); - model->setData(index, show, Qt::CheckStateRole); + model->setData(index, show ? Qt::Checked : Qt::Unchecked, Qt::CheckStateRole); model->setData(index, plugin.name(), Qt::DisplayRole); model->setData(index, plugin.pluginId(), ServiceModel::DesktopEntryNameRole); - -#if KIOWIDGETS_BUILD_DEPRECATED_SINCE(5, 87) - const bool configurable = plugin.value(QStringLiteral("Configurable"), false); - model->setData(index, configurable, ServiceModel::ConfigurableRole); -#endif } model->sort(Qt::DisplayRole); diff --git a/src/settings/interface/previewssettingspage.h b/src/settings/interface/previewssettingspage.h index 2c3e4dfef..d6d22ae21 100644 --- a/src/settings/interface/previewssettingspage.h +++ b/src/settings/interface/previewssettingspage.h @@ -40,9 +40,6 @@ protected: void showEvent(QShowEvent *event) override; private Q_SLOTS: -#if KIOWIDGETS_BUILD_DEPRECATED_SINCE(5, 87) - void configureService(const QModelIndex &index); -#endif private: void loadPreviewPlugins(); diff --git a/src/settings/kcm/kcmdolphingeneral.cpp b/src/settings/kcm/kcmdolphingeneral.cpp index 32241d112..b98eb86a1 100644 --- a/src/settings/kcm/kcmdolphingeneral.cpp +++ b/src/settings/kcm/kcmdolphingeneral.cpp @@ -20,16 +20,16 @@ K_PLUGIN_CLASS_WITH_JSON(DolphinGeneralConfigModule, "kcmdolphingeneral.json") -DolphinGeneralConfigModule::DolphinGeneralConfigModule(QWidget *parent, const QVariantList &args) - : KCModule(parent, args) +DolphinGeneralConfigModule::DolphinGeneralConfigModule(QObject *parent, const KPluginMetaData &data) + : KCModule(parent, data) , m_pages() { setButtons(KCModule::Default | KCModule::Help | KCModule::Apply); - QVBoxLayout *topLayout = new QVBoxLayout(this); + QVBoxLayout *topLayout = new QVBoxLayout(widget()); topLayout->setContentsMargins(0, 0, 0, 0); - QTabWidget *tabWidget = new QTabWidget(this); + QTabWidget *tabWidget = new QTabWidget(widget()); // initialize 'Folders & Tabs' tab FoldersTabsSettingsPage *foldersTabsPage = new FoldersTabsSettingsPage(tabWidget); @@ -58,14 +58,14 @@ DolphinGeneralConfigModule::~DolphinGeneralConfigModule() void DolphinGeneralConfigModule::save() { - for (SettingsPageBase *page : qAsConst(m_pages)) { + for (SettingsPageBase *page : std::as_const(m_pages)) { page->applySettings(); } } void DolphinGeneralConfigModule::defaults() { - for (SettingsPageBase *page : qAsConst(m_pages)) { + for (SettingsPageBase *page : std::as_const(m_pages)) { page->applySettings(); } } diff --git a/src/settings/kcm/kcmdolphingeneral.h b/src/settings/kcm/kcmdolphingeneral.h index 889317738..828332539 100644 --- a/src/settings/kcm/kcmdolphingeneral.h +++ b/src/settings/kcm/kcmdolphingeneral.h @@ -21,7 +21,7 @@ class DolphinGeneralConfigModule : public KCModule Q_OBJECT public: - DolphinGeneralConfigModule(QWidget *parent, const QVariantList &args); + DolphinGeneralConfigModule(QObject *parent, const KPluginMetaData &data); ~DolphinGeneralConfigModule() override; void save() override; diff --git a/src/settings/kcm/kcmdolphinnavigation.cpp b/src/settings/kcm/kcmdolphinnavigation.cpp new file mode 100644 index 000000000..6f699f82d --- /dev/null +++ b/src/settings/kcm/kcmdolphinnavigation.cpp @@ -0,0 +1,48 @@ +/* + * SPDX-FileCopyrightText: 2009 Peter Penz + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#include "kcmdolphinnavigation.h" + +#include "settings/navigation/navigationsettingspage.h" +#include + +#include + +#include + +K_PLUGIN_CLASS_WITH_JSON(DolphinNavigationConfigModule, "kcmdolphinnavigation.json") + +DolphinNavigationConfigModule::DolphinNavigationConfigModule(QObject *parent) + : KCModule(parent) + , m_navigation(nullptr) +{ + setButtons(KCModule::Default | KCModule::Help | KCModule::Apply); + + QVBoxLayout *topLayout = new QVBoxLayout(widget()); + topLayout->setContentsMargins(0, 0, 0, 0); + + m_navigation = new NavigationSettingsPage(widget()); + connect(m_navigation, &NavigationSettingsPage::changed, this, &DolphinNavigationConfigModule::markAsChanged); + topLayout->addWidget(m_navigation, 0, {}); +} + +DolphinNavigationConfigModule::~DolphinNavigationConfigModule() +{ +} + +void DolphinNavigationConfigModule::save() +{ + m_navigation->applySettings(); +} + +void DolphinNavigationConfigModule::defaults() +{ + m_navigation->restoreDefaults(); +} + +#include "kcmdolphinnavigation.moc" + +#include "moc_kcmdolphinnavigation.cpp" diff --git a/src/settings/kcm/kcmdolphinnavigation.h b/src/settings/kcm/kcmdolphinnavigation.h new file mode 100644 index 000000000..a25405155 --- /dev/null +++ b/src/settings/kcm/kcmdolphinnavigation.h @@ -0,0 +1,32 @@ +/* + * SPDX-FileCopyrightText: 2009 Peter Penz + * + * SPDX-License-Identifier: GPL-2.0-or-later + */ + +#ifndef KCMDOLPHINNAVIGATION_H +#define KCMDOLPHINNAVIGATION_H + +#include + +class NavigationSettingsPage; + +/** + * @brief Allow to configure the Dolphin navigation. + */ +class DolphinNavigationConfigModule : public KCModule +{ + Q_OBJECT + +public: + DolphinNavigationConfigModule(QObject *parent); + ~DolphinNavigationConfigModule() override; + + void save() override; + void defaults() override; + +private: + NavigationSettingsPage *m_navigation; +}; + +#endif diff --git a/src/settings/kcm/kcmdolphinviewmodes.cpp b/src/settings/kcm/kcmdolphinviewmodes.cpp index 962f0f112..e4755a1c5 100644 --- a/src/settings/kcm/kcmdolphinviewmodes.cpp +++ b/src/settings/kcm/kcmdolphinviewmodes.cpp @@ -8,6 +8,7 @@ #include "settings/viewmodes/viewsettingstab.h" +#include #include #include @@ -19,16 +20,16 @@ K_PLUGIN_CLASS_WITH_JSON(DolphinViewModesConfigModule, "kcmdolphinviewmodes.json") -DolphinViewModesConfigModule::DolphinViewModesConfigModule(QWidget *parent, const QVariantList &args) - : KCModule(parent, args) +DolphinViewModesConfigModule::DolphinViewModesConfigModule(QObject *parent, const KPluginMetaData &data) + : KCModule(parent, data) , m_tabs() { setButtons(KCModule::Default | KCModule::Help | KCModule::Apply); - QVBoxLayout *topLayout = new QVBoxLayout(this); + QVBoxLayout *topLayout = new QVBoxLayout(widget()); topLayout->setContentsMargins(0, 0, 0, 0); - QTabWidget *tabWidget = new QTabWidget(this); + QTabWidget *tabWidget = new QTabWidget(widget()); // Initialize 'Icons' tab ViewSettingsTab *iconsTab = new ViewSettingsTab(ViewSettingsTab::IconsMode, tabWidget); @@ -58,7 +59,7 @@ DolphinViewModesConfigModule::~DolphinViewModesConfigModule() void DolphinViewModesConfigModule::save() { - for (ViewSettingsTab *tab : qAsConst(m_tabs)) { + for (ViewSettingsTab *tab : std::as_const(m_tabs)) { tab->applySettings(); } reparseConfiguration(); @@ -66,7 +67,7 @@ void DolphinViewModesConfigModule::save() void DolphinViewModesConfigModule::defaults() { - for (ViewSettingsTab *tab : qAsConst(m_tabs)) { + for (ViewSettingsTab *tab : std::as_const(m_tabs)) { tab->restoreDefaults(); } reparseConfiguration(); diff --git a/src/settings/kcm/kcmdolphinviewmodes.h b/src/settings/kcm/kcmdolphinviewmodes.h index 33c0b77a5..59cbca314 100644 --- a/src/settings/kcm/kcmdolphinviewmodes.h +++ b/src/settings/kcm/kcmdolphinviewmodes.h @@ -19,7 +19,7 @@ class DolphinViewModesConfigModule : public KCModule Q_OBJECT public: - DolphinViewModesConfigModule(QWidget *parent, const QVariantList &args); + DolphinViewModesConfigModule(QObject *parent, const KPluginMetaData &data); ~DolphinViewModesConfigModule() override; void save() override; diff --git a/src/settings/serviceitemdelegate.cpp b/src/settings/serviceitemdelegate.cpp deleted file mode 100644 index ea3a5fe52..000000000 --- a/src/settings/serviceitemdelegate.cpp +++ /dev/null @@ -1,109 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2011 Peter Penz - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ - -#include "serviceitemdelegate.h" - -#include "servicemodel.h" - -#include -#include -#include -#include - -ServiceItemDelegate::ServiceItemDelegate(QAbstractItemView *itemView, QObject *parent) - : KWidgetItemDelegate(itemView, parent) -{ -} - -ServiceItemDelegate::~ServiceItemDelegate() -{ -} - -QSize ServiceItemDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const -{ - Q_UNUSED(index) - - const QStyle *style = itemView()->style(); - const int buttonHeight = style->pixelMetric(QStyle::PM_ButtonMargin) * 2 + style->pixelMetric(QStyle::PM_ButtonIconSize); - const int fontHeight = option.fontMetrics.height(); - return QSize(100, qMax(buttonHeight, fontHeight)); -} - -void ServiceItemDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const -{ - Q_UNUSED(index) - painter->save(); - - itemView()->style()->drawPrimitive(QStyle::PE_PanelItemViewItem, &option, painter); - - if (option.state & QStyle::State_Selected) { - painter->setPen(option.palette.highlightedText().color()); - } - - painter->restore(); -} - -QList ServiceItemDelegate::createItemWidgets(const QModelIndex &) const -{ - QCheckBox *checkBox = new QCheckBox(); - QPalette palette = checkBox->palette(); - palette.setColor(QPalette::WindowText, palette.color(QPalette::Text)); - checkBox->setPalette(palette); - connect(checkBox, &QCheckBox::clicked, this, &ServiceItemDelegate::slotCheckBoxClicked); - - QPushButton *configureButton = new QPushButton(); - connect(configureButton, &QPushButton::clicked, this, &ServiceItemDelegate::slotConfigureButtonClicked); - - return {checkBox, configureButton}; -} - -void ServiceItemDelegate::updateItemWidgets(const QList widgets, const QStyleOptionViewItem &option, const QPersistentModelIndex &index) const -{ - QCheckBox *checkBox = static_cast(widgets[0]); - QPushButton *configureButton = static_cast(widgets[1]); - - const int itemHeight = sizeHint(option, index).height(); - - // Update the checkbox showing the service name and icon - const QAbstractItemModel *model = index.model(); - checkBox->setText(model->data(index).toString()); - const QString iconName = model->data(index, Qt::DecorationRole).toString(); - if (!iconName.isEmpty()) { - checkBox->setIcon(QIcon::fromTheme(iconName)); - } - checkBox->setChecked(model->data(index, Qt::CheckStateRole).toBool()); - - const bool configurable = model->data(index, ServiceModel::ConfigurableRole).toBool(); - - int checkBoxWidth = option.rect.width(); - if (configurable) { - checkBoxWidth -= configureButton->sizeHint().width(); - } - checkBox->resize(checkBoxWidth, checkBox->sizeHint().height()); - checkBox->move(0, (itemHeight - checkBox->height()) / 2); - - // Update the configuration button - if (configurable) { - configureButton->setEnabled(checkBox->isChecked()); - configureButton->setIcon(QIcon::fromTheme(QStringLiteral("configure"))); - configureButton->resize(configureButton->sizeHint()); - configureButton->move(option.rect.right() - configureButton->width(), (itemHeight - configureButton->height()) / 2); - } - configureButton->setVisible(configurable); -} - -void ServiceItemDelegate::slotCheckBoxClicked(bool checked) -{ - QAbstractItemModel *model = const_cast(focusedIndex().model()); - model->setData(focusedIndex(), checked, Qt::CheckStateRole); -} - -void ServiceItemDelegate::slotConfigureButtonClicked() -{ - Q_EMIT requestServiceConfiguration(focusedIndex()); -} - -#include "moc_serviceitemdelegate.cpp" diff --git a/src/settings/serviceitemdelegate.h b/src/settings/serviceitemdelegate.h deleted file mode 100644 index 74f7dfd6a..000000000 --- a/src/settings/serviceitemdelegate.h +++ /dev/null @@ -1,42 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2011 Peter Penz - * - * SPDX-License-Identifier: GPL-2.0-or-later - */ - -#ifndef SERVICEITEMDELEGATE_H -#define SERVICEITEMDELEGATE_H - -#include - -/** - * @brief Widget item delegate for a service that can be enabled or disabled. - * - * Additionally it is possible to configure a service. - * @see ServiceModel - */ -class ServiceItemDelegate : public KWidgetItemDelegate -{ - Q_OBJECT - -public: - explicit ServiceItemDelegate(QAbstractItemView *itemView, QObject *parent = nullptr); - ~ServiceItemDelegate() override; - - QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override; - - void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; - - QList createItemWidgets(const QModelIndex &) const override; - - void updateItemWidgets(const QList widgets, const QStyleOptionViewItem &option, const QPersistentModelIndex &index) const override; - -Q_SIGNALS: - void requestServiceConfiguration(const QModelIndex &index); - -private Q_SLOTS: - void slotCheckBoxClicked(bool checked); - void slotConfigureButtonClicked(); -}; - -#endif diff --git a/src/settings/servicemodel.cpp b/src/settings/servicemodel.cpp index 07a804e33..c2ebda7c1 100644 --- a/src/settings/servicemodel.cpp +++ b/src/settings/servicemodel.cpp @@ -6,6 +6,8 @@ #include "servicemodel.h" +#include + ServiceModel::ServiceModel(QObject *parent) : QAbstractListModel(parent) , m_items() @@ -29,8 +31,7 @@ bool ServiceModel::insertRows(int row, int count, const QModelIndex &parent) beginInsertRows(parent, row, row + count - 1); for (int i = 0; i < count; ++i) { ServiceItem item; - item.checked = false; - item.configurable = false; + item.checked = Qt::Unchecked; m_items.insert(row, item); } endInsertRows(); @@ -47,10 +48,7 @@ bool ServiceModel::setData(const QModelIndex &index, const QVariant &value, int switch (role) { case Qt::CheckStateRole: - m_items[row].checked = value.toBool(); - break; - case ConfigurableRole: - m_items[row].configurable = value.toBool(); + m_items[row].checked = value.value(); break; case Qt::DecorationRole: m_items[row].icon = value.toString(); @@ -74,12 +72,10 @@ QVariant ServiceModel::data(const QModelIndex &index, int role) const const int row = index.row(); if (row < rowCount()) { switch (role) { - case ConfigurableRole: - return m_items[row].configurable; case Qt::CheckStateRole: return m_items[row].checked; case Qt::DecorationRole: - return m_items[row].icon; + return QIcon::fromTheme(m_items[row].icon); case Qt::DisplayRole: return m_items[row].text; case DesktopEntryNameRole: @@ -105,4 +101,9 @@ void ServiceModel::clear() endRemoveRows(); } +Qt::ItemFlags ServiceModel::flags(const QModelIndex &index) const +{ + return QAbstractListModel::flags(index) | Qt::ItemIsUserCheckable; +} + #include "moc_servicemodel.cpp" diff --git a/src/settings/servicemodel.h b/src/settings/servicemodel.h index 23c752e93..0abe1fe46 100644 --- a/src/settings/servicemodel.h +++ b/src/settings/servicemodel.h @@ -25,7 +25,7 @@ class ServiceModel : public QAbstractListModel Q_OBJECT public: - enum Role { DesktopEntryNameRole = Qt::UserRole, ConfigurableRole }; + enum Role { DesktopEntryNameRole = Qt::UserRole }; explicit ServiceModel(QObject *parent = nullptr); ~ServiceModel() override; @@ -35,11 +35,11 @@ public: QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; int rowCount(const QModelIndex &parent = QModelIndex()) const override; void clear(); + Qt::ItemFlags flags(const QModelIndex &index) const override; private: struct ServiceItem { - bool checked; - bool configurable; + Qt::CheckState checked; QString icon; QString text; QString desktopEntryName; diff --git a/src/settings/trash/trashsettingspage.cpp b/src/settings/trash/trashsettingspage.cpp index 1920cd904..38a3d0865 100644 --- a/src/settings/trash/trashsettingspage.cpp +++ b/src/settings/trash/trashsettingspage.cpp @@ -6,7 +6,8 @@ #include "trashsettingspage.h" -#include +#include +#include #include #include @@ -16,12 +17,13 @@ TrashSettingsPage::TrashSettingsPage(QWidget *parent) { QFormLayout *topLayout = new QFormLayout(this); - m_proxy = new KCModuleProxy(KPluginMetaData(QStringLiteral("kcm_trash"))); - topLayout->addRow(m_proxy); + m_kcm = KCModuleLoader::loadModule(KPluginMetaData(QStringLiteral("kcm_trash"))); + + topLayout->addRow(m_kcm->widget()); loadSettings(); - connect(m_proxy, &KCModuleProxy::changed, this, &TrashSettingsPage::changed); + connect(m_kcm, &KCModule::needsSaveChanged, this, &TrashSettingsPage::changed); } TrashSettingsPage::~TrashSettingsPage() @@ -30,17 +32,17 @@ TrashSettingsPage::~TrashSettingsPage() void TrashSettingsPage::applySettings() { - m_proxy->save(); + m_kcm->save(); } void TrashSettingsPage::restoreDefaults() { - m_proxy->defaults(); + m_kcm->defaults(); } void TrashSettingsPage::loadSettings() { - m_proxy->load(); + m_kcm->load(); } #include "moc_trashsettingspage.cpp" diff --git a/src/settings/trash/trashsettingspage.h b/src/settings/trash/trashsettingspage.h index b0e48a018..a5253774c 100644 --- a/src/settings/trash/trashsettingspage.h +++ b/src/settings/trash/trashsettingspage.h @@ -8,7 +8,7 @@ #include "settings/settingspagebase.h" -class KCModuleProxy; +class KCModule; /** * @brief Tab page for the 'Trash' settings of the Dolphin settings dialog, it uses the KCM. @@ -29,7 +29,7 @@ public: private: void loadSettings(); - KCModuleProxy *m_proxy; + KCModule *m_kcm; }; #endif diff --git a/src/settings/userfeedback/userfeedbacksettingspage.cpp b/src/settings/userfeedback/userfeedbacksettingspage.cpp index 6c205acee..7d87cb2fc 100644 --- a/src/settings/userfeedback/userfeedbacksettingspage.cpp +++ b/src/settings/userfeedback/userfeedbacksettingspage.cpp @@ -7,8 +7,8 @@ #include "userfeedbacksettingspage.h" #include "userfeedback/dolphinfeedbackprovider.h" -#include -#include +#include +#include #include diff --git a/src/settings/viewmodes/viewsettingspage.cpp b/src/settings/viewmodes/viewsettingspage.cpp index 5e740640d..7fccfc24a 100644 --- a/src/settings/viewmodes/viewsettingspage.cpp +++ b/src/settings/viewmodes/viewsettingspage.cpp @@ -65,14 +65,14 @@ ViewSettingsPage::~ViewSettingsPage() void ViewSettingsPage::applySettings() { - for (SettingsPageBase *tab : qAsConst(m_tabs)) { + for (SettingsPageBase *tab : std::as_const(m_tabs)) { tab->applySettings(); } } void ViewSettingsPage::restoreDefaults() { - for (SettingsPageBase *tab : qAsConst(m_tabs)) { + for (SettingsPageBase *tab : std::as_const(m_tabs)) { if (tabWidget->currentWidget() == tab) { tab->restoreDefaults(); return; diff --git a/src/statusbar/mountpointobserver.cpp b/src/statusbar/mountpointobserver.cpp index 660484e60..67d341b3d 100644 --- a/src/statusbar/mountpointobserver.cpp +++ b/src/statusbar/mountpointobserver.cpp @@ -29,14 +29,16 @@ void MountPointObserver::update() delete this; } else { KIO::FileSystemFreeSpaceJob *job = KIO::fileSystemFreeSpace(m_url); - connect(job, &KIO::FileSystemFreeSpaceJob::result, this, &MountPointObserver::freeSpaceResult); + connect(job, &KJob::result, this, &MountPointObserver::freeSpaceResult); } } -void MountPointObserver::freeSpaceResult(KIO::Job *job, KIO::filesize_t size, KIO::filesize_t available) +void MountPointObserver::freeSpaceResult(KJob *job) { if (!job->error()) { - Q_EMIT spaceInfoChanged(size, available); + KIO::FileSystemFreeSpaceJob *freeSpaceJob = qobject_cast(job); + Q_ASSERT(freeSpaceJob); + Q_EMIT spaceInfoChanged(freeSpaceJob->size(), freeSpaceJob->availableSize()); } else { Q_EMIT spaceInfoChanged(0, 0); } diff --git a/src/statusbar/mountpointobserver.h b/src/statusbar/mountpointobserver.h index d26a0e7de..4d1362cdb 100644 --- a/src/statusbar/mountpointobserver.h +++ b/src/statusbar/mountpointobserver.h @@ -87,7 +87,7 @@ public Q_SLOTS: void update(); private Q_SLOTS: - void freeSpaceResult(KIO::Job *job, KIO::filesize_t size, KIO::filesize_t available); + void freeSpaceResult(KJob *job); private: const QUrl m_url; diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index 8e0c6f119..6431ff3fa 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -43,14 +43,14 @@ target_link_libraries(kfileitemmodelbenchmark dolphinprivate Qt${QT_MAJOR_VERSIO ecm_add_test(kitemlistkeyboardsearchmanagertest.cpp LINK_LIBRARIES dolphinprivate Qt${QT_MAJOR_VERSION}::Test) # DolphinSearchBox -if (KF5Baloo_FOUND) +if (KF6Baloo_FOUND) ecm_add_test(dolphinsearchboxtest.cpp TEST_NAME dolphinsearchboxtest LINK_LIBRARIES dolphinprivate dolphinstatic Qt${QT_MAJOR_VERSION}::Test) endif() # DolphinQuery -if (KF5Baloo_FOUND) +if (KF6Baloo_FOUND) ecm_add_test(dolphinquerytest.cpp TEST_NAME dolphinquerytest LINK_LIBRARIES dolphinprivate dolphinstatic Qt${QT_MAJOR_VERSION}::Test) diff --git a/src/tests/kfileitemmodelbenchmark.cpp b/src/tests/kfileitemmodelbenchmark.cpp index 0daf4abd0..4eeb9ff55 100644 --- a/src/tests/kfileitemmodelbenchmark.cpp +++ b/src/tests/kfileitemmodelbenchmark.cpp @@ -74,7 +74,7 @@ void KFileItemModelBenchmark::insertAndRemoveManyItems_data() QList sizes; sizes << 100000; - for (int n : qAsConst(sizes)) { + for (int n : std::as_const(sizes)) { QStringList allStrings; for (int i = 0; i < n; ++i) { allStrings << QString::number(i); diff --git a/src/tests/kfileitemmodeltest.cpp b/src/tests/kfileitemmodeltest.cpp index 753960a08..16189a0fc 100644 --- a/src/tests/kfileitemmodeltest.cpp +++ b/src/tests/kfileitemmodeltest.cpp @@ -14,7 +14,6 @@ #include #include -#include #include "kitemviews/kfileitemmodel.h" #include "testdir.h" diff --git a/src/tests/kitemlistcontrollertest.cpp b/src/tests/kitemlistcontrollertest.cpp index 9d345fdd9..f462947c6 100644 --- a/src/tests/kitemlistcontrollertest.cpp +++ b/src/tests/kitemlistcontrollertest.cpp @@ -295,9 +295,9 @@ void KItemListControllerTest::testKeyboardNavigation_data() break; } - for (int columnCount : qAsConst(columnCountList)) { - for (const KItemListController::SelectionBehavior &selectionBehavior : qAsConst(selectionBehaviorList)) { - for (bool groupingEnabled : qAsConst(groupingEnabledList)) { + for (int columnCount : std::as_const(columnCountList)) { + for (const KItemListController::SelectionBehavior &selectionBehavior : std::as_const(selectionBehaviorList)) { + for (bool groupingEnabled : std::as_const(groupingEnabledList)) { QList> testList; // First, key presses which should have the same effect diff --git a/src/tests/kitemsettest.cpp b/src/tests/kitemsettest.cpp index e0c536c67..0005daceb 100644 --- a/src/tests/kitemsettest.cpp +++ b/src/tests/kitemsettest.cpp @@ -66,11 +66,11 @@ static QSet KItemSet2QSet(const KItemSet &itemSet) // Check that the conversion was successful. Q_ASSERT(itemSet.count() == result.count()); - for (int i : qAsConst(itemSet)) { + for (int i : std::as_const(itemSet)) { Q_ASSERT(result.contains(i)); } - for (int i : qAsConst(result)) { + for (int i : std::as_const(result)) { Q_ASSERT(itemSet.contains(i)); } diff --git a/src/trash/dolphintrash.cpp b/src/trash/dolphintrash.cpp index 007f48a33..dd71135a5 100644 --- a/src/trash/dolphintrash.cpp +++ b/src/trash/dolphintrash.cpp @@ -9,12 +9,11 @@ #include #include +#include #include #include -#include -#include -#include +#include Trash::Trash() : m_trashDirLister(new KDirLister()) @@ -51,7 +50,6 @@ static void notifyEmptied() i18n("Trash Emptied"), i18n("The Trash was emptied."), QStringLiteral("user-trash"), - nullptr, KNotification::DefaultEvent); } diff --git a/src/userfeedback/dolphinfeedbackprovider.cpp b/src/userfeedback/dolphinfeedbackprovider.cpp index 19526dc4d..f233fad46 100644 --- a/src/userfeedback/dolphinfeedbackprovider.cpp +++ b/src/userfeedback/dolphinfeedbackprovider.cpp @@ -8,13 +8,13 @@ #include "placesdatasource.h" #include "settingsdatasource.h" -#include -#include -#include -#include -#include -#include -#include +#include +#include +#include +#include +#include +#include +#include DolphinFeedbackProvider *DolphinFeedbackProvider::instance() { diff --git a/src/userfeedback/dolphinfeedbackprovider.h b/src/userfeedback/dolphinfeedbackprovider.h index 8be2f81b6..3b85c7eb3 100644 --- a/src/userfeedback/dolphinfeedbackprovider.h +++ b/src/userfeedback/dolphinfeedbackprovider.h @@ -7,7 +7,7 @@ #ifndef DOLPHINFEEDBACKPROVIDER_H #define DOLPHINFEEDBACKPROVIDER_H -#include +#include class DolphinFeedbackProvider : public KUserFeedback::Provider { diff --git a/src/userfeedback/placesdatasource.cpp b/src/userfeedback/placesdatasource.cpp index cdbd5d757..554194af7 100644 --- a/src/userfeedback/placesdatasource.cpp +++ b/src/userfeedback/placesdatasource.cpp @@ -8,7 +8,7 @@ #include #include -#include +#include #include #include #include diff --git a/src/userfeedback/placesdatasource.h b/src/userfeedback/placesdatasource.h index d4666af25..ad4c1725d 100644 --- a/src/userfeedback/placesdatasource.h +++ b/src/userfeedback/placesdatasource.h @@ -7,7 +7,7 @@ #ifndef PLACESDATASOURCE_H #define PLACESDATASOURCE_H -#include +#include class DolphinMainWindow; diff --git a/src/userfeedback/settingsdatasource.cpp b/src/userfeedback/settingsdatasource.cpp index c517793ad..d14fc0dbd 100644 --- a/src/userfeedback/settingsdatasource.cpp +++ b/src/userfeedback/settingsdatasource.cpp @@ -9,7 +9,7 @@ #include "dolphinmainwindow.h" #include -#include +#include #include #include diff --git a/src/userfeedback/settingsdatasource.h b/src/userfeedback/settingsdatasource.h index 9804c78a7..cc843dec8 100644 --- a/src/userfeedback/settingsdatasource.h +++ b/src/userfeedback/settingsdatasource.h @@ -7,7 +7,7 @@ #ifndef SETTINGSDATASOURCE_H #define SETTINGSDATASOURCE_H -#include +#include class DolphinMainWindow; diff --git a/src/views/dolphinremoteencoding.cpp b/src/views/dolphinremoteencoding.cpp index 2881915ac..32dd6bd29 100644 --- a/src/views/dolphinremoteencoding.cpp +++ b/src/views/dolphinremoteencoding.cpp @@ -87,7 +87,7 @@ void DolphinRemoteEncoding::fillMenu() QMenu *menu = m_menu->menu(); menu->clear(); - menu->addAction(i18n("Default"), this, SLOT(slotDefault()), 0)->setCheckable(true); + menu->addAction(i18n("Default"), this, &DolphinRemoteEncoding::slotDefault)->setCheckable(true); for (int i = 0; i < m_encodingDescriptions.size(); i++) { QAction *action = new QAction(m_encodingDescriptions.at(i), this); action->setCheckable(true); @@ -96,7 +96,7 @@ void DolphinRemoteEncoding::fillMenu() } menu->addSeparator(); - menu->addAction(i18n("Reload"), this, SLOT(slotReload()), 0); + menu->addAction(i18n("Reload"), this, &DolphinRemoteEncoding::slotReload); m_idDefault = m_encodingDescriptions.size() + 2; connect(menu, &QMenu::triggered, this, &DolphinRemoteEncoding::slotItemSelected); diff --git a/src/views/dolphinview.cpp b/src/views/dolphinview.cpp index 0a1d70bf1..0bb73e623 100644 --- a/src/views/dolphinview.cpp +++ b/src/views/dolphinview.cpp @@ -35,7 +35,7 @@ #include #include #include -#include +#include #include #include #include @@ -49,9 +49,6 @@ #include -#include -#include - #include #include #include @@ -628,7 +625,7 @@ void DolphinView::requestStatusBarText() return; } - m_statJobForStatusBarText = KIO::statDetails(m_model->rootItem().url(), KIO::StatJob::SourceSide, KIO::StatRecursiveSize, KIO::HideProgressInfo); + m_statJobForStatusBarText = KIO::stat(m_model->rootItem().url(), KIO::StatJob::SourceSide, KIO::StatRecursiveSize, KIO::HideProgressInfo); connect(m_statJobForStatusBarText, &KJob::result, this, &DolphinView::slotStatJobResult); m_statJobForStatusBarText->start(); } diff --git a/src/views/dolphinviewactionhandler.cpp b/src/views/dolphinviewactionhandler.cpp index f73c613e0..98cbbdf80 100644 --- a/src/views/dolphinviewactionhandler.cpp +++ b/src/views/dolphinviewactionhandler.cpp @@ -216,7 +216,7 @@ void DolphinViewActionHandler::createActions(SelectionMode::ActionTextHelper *ac viewModeActions->addAction(compactAction); viewModeActions->addAction(detailsAction); viewModeActions->setToolBarMode(KSelectAction::MenuMode); - connect(viewModeActions, &KSelectAction::triggered, this, &DolphinViewActionHandler::slotViewModeActionTriggered); + connect(viewModeActions, &KSelectAction::actionTriggered, this, &DolphinViewActionHandler::slotViewModeActionTriggered); QAction *zoomInAction = KStandardAction::zoomIn(this, &DolphinViewActionHandler::zoomIn, m_actionCollection); zoomInAction->setWhatsThis(i18nc("@info:whatsthis zoom in", "This increases the icon size.")); @@ -715,7 +715,7 @@ void DolphinViewActionHandler::slotSortTriggered(QAction *action) // actions and the sub-menu-actions. If an action gets checked, it must // be assured that all other actions get unchecked, except the ascending/ // descending actions - for (QAction *groupAction : qAsConst(m_sortByActions)) { + for (QAction *groupAction : std::as_const(m_sortByActions)) { KActionMenu *actionMenu = qobject_cast(groupAction); if (actionMenu) { const auto actions = actionMenu->menu()->actions(); diff --git a/src/views/versioncontrol/versioncontrolobserver.cpp b/src/views/versioncontrol/versioncontrolobserver.cpp index e3bd29390..64f8843d2 100644 --- a/src/views/versioncontrol/versioncontrolobserver.cpp +++ b/src/views/versioncontrol/versioncontrolobserver.cpp @@ -105,7 +105,7 @@ QList VersionControlObserver::actions(const KFileItemList &items) con return m_plugin->versionControlActions(items); } else { QList actions; - for (const QPointer &plugin : qAsConst(m_plugins)) { + for (const QPointer &plugin : std::as_const(m_plugins)) { actions << plugin->outOfVersionControlActions(items); } return actions; @@ -283,7 +283,7 @@ void VersionControlObserver::initPlugins() } } - for (auto &plugin : qAsConst(m_plugins)) { + for (auto &plugin : std::as_const(m_plugins)) { connect(plugin, &KVersionControlPlugin::itemVersionsChanged, this, &VersionControlObserver::silentDirectoryVerification); connect(plugin, &KVersionControlPlugin::infoMessage, this, &VersionControlObserver::infoMessage); connect(plugin, &KVersionControlPlugin::errorMessage, this, &VersionControlObserver::errorMessage); @@ -299,7 +299,7 @@ KVersionControlPlugin *VersionControlObserver::searchPlugin(const QUrl &director initPlugins(); // Verify whether the current directory is under a version system - for (const QPointer &plugin : qAsConst(m_plugins)) { + for (const QPointer &plugin : std::as_const(m_plugins)) { if (!plugin) { continue; }