-#clang-format
-38c34eeca315c7be58e65d4d3fb72aaf7b866719
+b58a346be96f7d0973ed96e52c4cf95463ba244d
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
# 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'
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)
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
endif()
endif()
-find_package(KF5 ${KF5_MIN_VERSION} REQUIRED COMPONENTS
+find_package(KF6 ${KF6_MIN_VERSION} REQUIRED COMPONENTS
KCMUtils
NewStuff
CoreAddons
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"
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()
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)
)
ki18n_install(po)
-if(KF5DocTools_FOUND)
+if(KF6DocTools_FOUND)
kdoctools_install(po)
endif()
include(CMakeFindDependencyMacro)
find_dependency(Qt@QT_MAJOR_VERSION@Widgets)
-find_dependency(KF5KIO)
+find_dependency(KF6KIO)
include("${CMAKE_CURRENT_LIST_DIR}/DolphinVcsTargets.cmake")
-if (KF5DocTools_FOUND)
+if (KF6DocTools_FOUND)
kdoctools_create_handbook(index.docbook INSTALL_DESTINATION ${KDE_INSTALL_DOCBUNDLEDIR}/en SUBDIR dolphin)
endif()
RELATIVE "views/versioncontrol"
REQUIRED_HEADERS dolphinvcs_LIB_HEADERS
)
+target_include_directories(dolphinvcs INTERFACE "$<INSTALL_INTERFACE:${KDE_INSTALL_INCLUDEDIR}>")
install(TARGETS dolphinvcs EXPORT DolphinVcsTargets ${KDE_INSTALL_TARGETS_DEFAULT_ARGS})
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()
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
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
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()
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()
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
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
QDir().mkpath(bookmarksFile);
bookmarksFile += QLatin1String("/bookmarks.xml");
}
- m_bookmarkManager = KBookmarkManager::managerForFile(bookmarksFile, QStringLiteral("dolphin"));
+ m_bookmarkManager = std::make_unique<KBookmarkManager>(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());
private:
DolphinMainWindow *m_mainWindow;
- KBookmarkManager *m_bookmarkManager;
+ std::unique_ptr<KBookmarkManager> m_bookmarkManager;
QScopedPointer<KBookmarkMenu> m_bookmarkMenu;
};
#include <KLocalizedString>
#include <KNewFileMenu>
#include <KStandardAction>
-#include <kio_version.h>
#include <QApplication>
#include <QClipboard>
addAction(QIcon::fromTheme("restoration"), i18nc("@action:inmenu", "Restore"), [this]() {
QList<QUrl> 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());
}
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());
} 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;
#include <KShell>
#include <KShortcutsDialog>
#include <KStandardAction>
-#include <KStartupInfo>
#include <KSycoca>
#include <KTerminalLauncherJob>
#include <KToggleAction>
#include <KUrlNavigator>
#include <KWindowSystem>
#include <KXMLGUIFactory>
-#include <kio_version.h>
+
+#include <kwidgetsaddons_version.h>
#include <QApplication>
#include <QClipboard>
#include <algorithm>
+#if HAVE_X11
+#include <KStartupInfo>
+#endif
+
namespace
{
// Used for GeneralSettings::version() to determine whether
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);
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());
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<KIO::StatJob *>(job);
{
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);
}
}
{
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);
}
}
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")));
"<emphasis>Tab</emphasis> with the current location and view.<nl/>"
"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"));
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);
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();
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",
panelAction->setText(dockAction->text());
panelAction->setIcon(icon);
dockAction->setIcon(icon);
+ dockAction->setEnabled(true);
actionCollection()->setDefaultShortcut(panelAction, shortcut);
connect(panelAction, &QAction::triggered, dockAction, &QAction::trigger);
void DolphinNavigatorsWidgetAction::adjustSpacing()
{
- m_previousWindowWidth = parentWidget()->window()->width();
+ m_previousWindowWidth = qobject_cast<QWidget *>(parent())->window()->width();
auto viewGeometries = m_viewGeometriesHelper.viewGeometries();
const int widthOfSplitterPrimary = viewGeometries.globalXOfPrimary + viewGeometries.widthOfPrimary - viewGeometries.globalXOfNavigatorsWidget;
const QList<int> splitterSizes = {widthOfSplitterPrimary, m_splitter->width() - widthOfSplitterPrimary};
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<QWidget*>(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.
#include "views/dolphinnewfilemenuobserver.h"
-#include <KActionCollection>
#include <KIO/Job>
-DolphinNewFileMenu::DolphinNewFileMenu(KActionCollection *collection, QObject *parent)
- : KNewFileMenu(collection, QStringLiteral("new_menu"), parent)
+#include <QAction>
+
+DolphinNewFileMenu::DolphinNewFileMenu(QAction *createDirAction, QObject *parent)
+ : KNewFileMenu(parent)
{
+ setNewFolderShortcutAction(createDirAction);
DolphinNewFileMenuObserver::instance().attach(this);
}
Q_OBJECT
public:
- DolphinNewFileMenu(KActionCollection *collection, QObject *parent);
+ DolphinNewFileMenu(QAction *createDirAction, QObject *parent);
~DolphinNewFileMenu() override;
Q_SIGNALS:
#include <KPluginMetaData>
#include <KSharedConfig>
#include <KTerminalLauncherJob>
-#include <kio_version.h>
#include <QActionGroup>
#include <QApplication>
#include <QStandardPaths>
#include <QTextDocument>
+#include <KPluginFactory>
+
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);
});
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
{
// 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);
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);
KFileItemListProperties capabilities(items);
- KParts::BrowserExtension::ActionGroupMap actionGroups;
+ KParts::NavigationExtension::ActionGroupMap actionGroups;
QList<QAction *> editActions;
editActions += m_view->versionControlActions(m_view->selectedItems());
m_removeAction->update();
}
} else {
- popupFlags |= KParts::BrowserExtension::NoDeletion;
+ popupFlags |= KParts::NavigationExtension::NoDeletion;
}
if (supportsMoving) {
// 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);
#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);
}
#ifndef DOLPHINPART_EXT_H
#define DOLPHINPART_EXT_H
-#include <kparts/browserextension.h>
-#include <kparts/fileinfoextension.h>
-#include <kparts/listingfilterextension.h>
-#include <kparts/listingnotificationextension.h>
+#include <KParts/FileInfoExtension>
+#include <KParts/ListingFilterExtension>
+#include <KParts/ListingNotificationExtension>
+#include <KParts/NavigationExtension>
#include <QUrl>
class DolphinPart;
-class DolphinPartBrowserExtension : public KParts::BrowserExtension
+class DolphinPartBrowserExtension : public KParts::NavigationExtension
{
Q_OBJECT
public:
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();
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);
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);
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);
}
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();
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();
}
}
}
int activeWindowIndex = -1;
- for (const auto &interface : qAsConst(dolphinInterfaces)) {
+ for (const auto &interface : std::as_const(dolphinInterfaces)) {
++activeWindowIndex;
auto isActiveWindowReply = interface.first->isActiveWindow();
}
}
- for (const auto &interface : qAsConst(dolphinInterfaces)) {
+ for (const auto &interface : std::as_const(dolphinInterfaces)) {
if (interface.second.isEmpty()) {
continue;
}
#include <KIO/Job>
#include <KLocalizedString>
#include <KUrlMimeData>
-#include <kio_version.h>
#include <QElapsedTimer>
#include <QIcon>
// been moved because of the resorting.
QList<QUrl> 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());
}
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);
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);
}
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()) {
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;
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;
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) {
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<KOverlayIconPlugin *>(instance);
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);
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));
}
}
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()) {
const int index = m_model->index(item);
QHash<QByteArray, QVariant> 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);
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);
{
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();
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)
// 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;
}
// 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));
}
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);
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);
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());
if (itemCount == rangesItemCount) {
const QHash<QByteArray, qreal> 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 {
// 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);
}
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;
KItemListViewAccessible::~KItemListViewAccessible()
{
- for (AccessibleIdWrapper idWrapper : qAsConst(m_cells)) {
+ for (AccessibleIdWrapper idWrapper : std::as_const(m_cells)) {
if (idWrapper.isValid) {
QAccessible::deleteAccessibleInterface(idWrapper.id);
}
const QVector<int>::iterator end = rangeBoundaries.end();
QVector<int>::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<int>::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;
}
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;
// 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;
}
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);
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
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)) {
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));
}
QPixmapCache::insert(key, pixmap);
}
- pixmap.setDevicePixelRatio(qApp->devicePixelRatio());
+ pixmap.setDevicePixelRatio(dpr);
return pixmap;
}
*/
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
});
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 {
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();
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);
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) {
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;
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;
}
#include <KConfigGroup>
#include <KFileItemListProperties>
#include <KIO/CopyJob>
-#include <KIO/DeleteJob>
+#include <KIO/DeleteOrTrashJob>
#include <KIO/Paste>
#include <KIO/PasteJob>
#include <KJobWidgets>
#include <KSharedConfig>
#include <KUrlMimeData>
-#include <KIO/DeleteOrTrashJob>
-#include <kio_version.h>
-
#include <QApplication>
#include <QClipboard>
#include <QMenu>
// 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);
}
#include <Baloo/FileMetaDataWidget>
-#include <Phonon/BackendCapabilities>
-#include <Phonon/MediaObject>
+#include <phonon/BackendCapabilities>
+#include <phonon/MediaObject>
#include <QDialogButtonBox>
#include <QGesture>
#include "phononwidget.h"
#include <KLocalizedString>
-#include <Phonon/AudioOutput>
-#include <Phonon/MediaObject>
-#include <Phonon/SeekSlider>
-#include <Phonon/VideoWidget>
+#include <phonon/AudioOutput>
+#include <phonon/MediaObject>
+#include <phonon/SeekSlider>
+#include <phonon/VideoWidget>
#include <QShowEvent>
#include <QStyle>
#ifndef PHONONWIDGET_H
#define PHONONWIDGET_H
-#include <Phonon/Global>
+#include <phonon/Global>
#include <QSize>
#include <QUrl>
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<KFilePlacesModel *>(model());
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()
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<KParts::ReadOnlyPart>(this)) : nullptr;
if (m_konsolePart) {
connect(m_konsolePart, &KParts::ReadOnlyPart::destroyed, this, &TerminalPanel::terminalExited);
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));
#include "dolphin_contextmenusettings.h"
#include "dolphin_versioncontrolsettings.h"
#include "global.h"
-#include "settings/serviceitemdelegate.h"
#include "settings/servicemodel.h"
#include <KDesktopFile>
-#include <KDesktopFileActions>
#include <KFileUtils>
#include <KLocalizedString>
#include <KMessageBox>
#include <KPluginMetaData>
#include <KService>
-#include <KServiceTypeTrader>
-#include <kio_version.h>
#include <kiocore_export.h>
#include <kservice_export.h>
#include <kwidgetsaddons_version.h>
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);
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);
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::CheckState>() == Qt::Checked;
if (service.startsWith(VersionControlServicePrefix)) {
if (checked) {
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);
}
}
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));
}
}
}
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<KServiceAction> serviceActions = KDesktopFileActions::userDefinedServices(KService(file), true);
+ for (const auto &file : std::as_const(files)) {
+ const QList<KServiceAction> serviceActions = KService(file).actions();
const KDesktopFile desktopFile(file);
const QString subMenuName = desktopFile.desktopGroup().readEntry("X-KDE-Submenu");
}
}
- // 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();
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"
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)
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;
void DolphinSettingsDialog::applySettings()
{
- for (SettingsPageBase *page : qAsConst(m_pages)) {
+ for (SettingsPageBase *page : std::as_const(m_pages)) {
page->applySettings();
}
void DolphinSettingsDialog::restoreDefaults()
{
- for (SettingsPageBase *page : qAsConst(m_pages)) {
+ for (SettingsPageBase *page : std::as_const(m_pages)) {
page->restoreDefaults();
}
}
+++ /dev/null
-/*
- * SPDX-FileCopyrightText: 2011 Peter Penz <peter.penz19@gmail.com>
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- */
-
-#include "configurepreviewplugindialog.h"
-
-#if KIOWIDGETS_BUILD_DEPRECATED_SINCE(5, 87)
-
-#include <KIO/DeleteJob>
-#include <KIO/JobUiDelegate>
-#include <KIO/ThumbCreator>
-#include <KJobWidgets>
-#include <KLocalizedString>
-#include <QPluginLoader>
-
-#include <QDialogButtonBox>
-#include <QPushButton>
-#include <QStandardPaths>
-#include <QUrl>
-#include <QVBoxLayout>
-
-ConfigurePreviewPluginDialog::ConfigurePreviewPluginDialog(const QString &pluginName, const QString &desktopEntryName, QWidget *parent)
- : QDialog(parent)
-{
- QSharedPointer<ThumbCreator> previewPlugin;
- const QString pluginPath = QPluginLoader(desktopEntryName).fileName();
- if (!pluginPath.isEmpty()) {
- newCreator create = (newCreator)QLibrary::resolve(pluginPath, "new_creator");
- if (create) {
- previewPlugin.reset(dynamic_cast<ThumbCreator *>(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
+++ /dev/null
-/*
- * SPDX-FileCopyrightText: 2011 Peter Penz <peter.penz19@gmail.com>
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- */
-
-#ifndef CONFIGUREPREVIEWPLUGINDIALOG_H
-#define CONFIGUREPREVIEWPLUGINDIALOG_H
-
-#include <kiowidgets_export.h>
-
-#if KIOWIDGETS_BUILD_DEPRECATED_SINCE(5, 87)
-
-#include <QDialog>
-
-/**
- * @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
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<KIO::StatJob *>(job)->statResult().isDir()) {
settings->setHomeUrl(url.toDisplayString(QUrl::PreferLocalFile));
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();
}
}
#include "previewssettingspage.h"
-#include "configurepreviewplugindialog.h"
#include "dolphin_generalsettings.h"
-#include "settings/serviceitemdelegate.h"
#include "settings/servicemodel.h"
#include <KIO/PreviewJob>
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);
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::CheckState>() == Qt::Checked;
if (checked) {
const QString enabledPlugin = model->data(index, Qt::UserRole).toString();
m_enabledPreviewPlugins.append(enabledPlugin);
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();
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);
void showEvent(QShowEvent *event) override;
private Q_SLOTS:
-#if KIOWIDGETS_BUILD_DEPRECATED_SINCE(5, 87)
- void configureService(const QModelIndex &index);
-#endif
private:
void loadPreviewPlugins();
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);
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();
}
}
Q_OBJECT
public:
- DolphinGeneralConfigModule(QWidget *parent, const QVariantList &args);
+ DolphinGeneralConfigModule(QObject *parent, const KPluginMetaData &data);
~DolphinGeneralConfigModule() override;
void save() override;
--- /dev/null
+/*
+ * SPDX-FileCopyrightText: 2009 Peter Penz <peter.penz19@gmail.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#include "kcmdolphinnavigation.h"
+
+#include "settings/navigation/navigationsettingspage.h"
+#include <kconfigwidgets_version.h>
+
+#include <KPluginFactory>
+
+#include <QVBoxLayout>
+
+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"
--- /dev/null
+/*
+ * SPDX-FileCopyrightText: 2009 Peter Penz <peter.penz19@gmail.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
+
+#ifndef KCMDOLPHINNAVIGATION_H
+#define KCMDOLPHINNAVIGATION_H
+
+#include <KCModule>
+
+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
#include "settings/viewmodes/viewsettingstab.h"
+#include <KCModule>
#include <KLocalizedString>
#include <KPluginFactory>
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);
void DolphinViewModesConfigModule::save()
{
- for (ViewSettingsTab *tab : qAsConst(m_tabs)) {
+ for (ViewSettingsTab *tab : std::as_const(m_tabs)) {
tab->applySettings();
}
reparseConfiguration();
void DolphinViewModesConfigModule::defaults()
{
- for (ViewSettingsTab *tab : qAsConst(m_tabs)) {
+ for (ViewSettingsTab *tab : std::as_const(m_tabs)) {
tab->restoreDefaults();
}
reparseConfiguration();
Q_OBJECT
public:
- DolphinViewModesConfigModule(QWidget *parent, const QVariantList &args);
+ DolphinViewModesConfigModule(QObject *parent, const KPluginMetaData &data);
~DolphinViewModesConfigModule() override;
void save() override;
+++ /dev/null
-/*
- * SPDX-FileCopyrightText: 2011 Peter Penz <peter.penz19@gmail.com>
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- */
-
-#include "serviceitemdelegate.h"
-
-#include "servicemodel.h"
-
-#include <QAbstractItemView>
-#include <QCheckBox>
-#include <QPainter>
-#include <QPushButton>
-
-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<QWidget *> 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<QWidget *> widgets, const QStyleOptionViewItem &option, const QPersistentModelIndex &index) const
-{
- QCheckBox *checkBox = static_cast<QCheckBox *>(widgets[0]);
- QPushButton *configureButton = static_cast<QPushButton *>(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<QAbstractItemModel *>(focusedIndex().model());
- model->setData(focusedIndex(), checked, Qt::CheckStateRole);
-}
-
-void ServiceItemDelegate::slotConfigureButtonClicked()
-{
- Q_EMIT requestServiceConfiguration(focusedIndex());
-}
-
-#include "moc_serviceitemdelegate.cpp"
+++ /dev/null
-/*
- * SPDX-FileCopyrightText: 2011 Peter Penz <peter.penz19@gmail.com>
- *
- * SPDX-License-Identifier: GPL-2.0-or-later
- */
-
-#ifndef SERVICEITEMDELEGATE_H
-#define SERVICEITEMDELEGATE_H
-
-#include <KWidgetItemDelegate>
-
-/**
- * @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<QWidget *> createItemWidgets(const QModelIndex &) const override;
-
- void updateItemWidgets(const QList<QWidget *> 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
#include "servicemodel.h"
+#include <QIcon>
+
ServiceModel::ServiceModel(QObject *parent)
: QAbstractListModel(parent)
, m_items()
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();
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<Qt::CheckState>();
break;
case Qt::DecorationRole:
m_items[row].icon = value.toString();
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:
endRemoveRows();
}
+Qt::ItemFlags ServiceModel::flags(const QModelIndex &index) const
+{
+ return QAbstractListModel::flags(index) | Qt::ItemIsUserCheckable;
+}
+
#include "moc_servicemodel.cpp"
Q_OBJECT
public:
- enum Role { DesktopEntryNameRole = Qt::UserRole, ConfigurableRole };
+ enum Role { DesktopEntryNameRole = Qt::UserRole };
explicit ServiceModel(QObject *parent = nullptr);
~ServiceModel() override;
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;
#include "trashsettingspage.h"
-#include <KCModuleProxy>
+#include <KCModuleLoader>
+#include <KCModule>
#include <KPluginMetaData>
#include <QFormLayout>
{
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()
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"
#include "settings/settingspagebase.h"
-class KCModuleProxy;
+class KCModule;
/**
* @brief Tab page for the 'Trash' settings of the Dolphin settings dialog, it uses the KCM.
private:
void loadSettings();
- KCModuleProxy *m_proxy;
+ KCModule *m_kcm;
};
#endif
#include "userfeedbacksettingspage.h"
#include "userfeedback/dolphinfeedbackprovider.h"
-#include <KUserFeedback/FeedbackConfigWidget>
-#include <KUserFeedback/Provider>
+#include <KUserFeedbackQt6/FeedbackConfigWidget>
+#include <KUserFeedbackQt6/Provider>
#include <QVBoxLayout>
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;
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<KIO::FileSystemFreeSpaceJob *>(job);
+ Q_ASSERT(freeSpaceJob);
+ Q_EMIT spaceInfoChanged(freeSpaceJob->size(), freeSpaceJob->availableSize());
} else {
Q_EMIT spaceInfoChanged(0, 0);
}
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;
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)
QList<int> 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);
#include <KDirLister>
#include <kio/job.h>
-#include <kio_version.h>
#include "kitemviews/kfileitemmodel.h"
#include "testdir.h"
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<QPair<KeyPress, ViewState>> testList;
// First, key presses which should have the same effect
// 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));
}
#include <KConfig>
#include <KConfigGroup>
+#include <KIO/DeleteOrTrashJob>
#include <KLocalizedString>
#include <KNotification>
-#include <QList>
-#include <KIO/DeleteOrTrashJob>
-#include <kio_version.h>
+#include <QList>
Trash::Trash()
: m_trashDirLister(new KDirLister())
i18n("Trash Emptied"),
i18n("The Trash was emptied."),
QStringLiteral("user-trash"),
- nullptr,
KNotification::DefaultEvent);
}
#include "placesdatasource.h"
#include "settingsdatasource.h"
-#include <KUserFeedback/ApplicationVersionSource>
-#include <KUserFeedback/LocaleInfoSource>
-#include <KUserFeedback/PlatformInfoSource>
-#include <KUserFeedback/QtVersionSource>
-#include <KUserFeedback/ScreenInfoSource>
-#include <KUserFeedback/StartCountSource>
-#include <KUserFeedback/UsageTimeSource>
+#include <KUserFeedbackQt6/ApplicationVersionSource>
+#include <KUserFeedbackQt6/LocaleInfoSource>
+#include <KUserFeedbackQt6/PlatformInfoSource>
+#include <KUserFeedbackQt6/QtVersionSource>
+#include <KUserFeedbackQt6/ScreenInfoSource>
+#include <KUserFeedbackQt6/StartCountSource>
+#include <KUserFeedbackQt6/UsageTimeSource>
DolphinFeedbackProvider *DolphinFeedbackProvider::instance()
{
#ifndef DOLPHINFEEDBACKPROVIDER_H
#define DOLPHINFEEDBACKPROVIDER_H
-#include <KUserFeedback/Provider>
+#include <KUserFeedbackQt6/Provider>
class DolphinFeedbackProvider : public KUserFeedback::Provider
{
#include <KLocalizedString>
#include <KMountPoint>
-#include <KUserFeedback/Provider>
+#include <KUserFeedbackQt6/Provider>
#include <Solid/Device>
#include <Solid/NetworkShare>
#include <Solid/StorageAccess>
#ifndef PLACESDATASOURCE_H
#define PLACESDATASOURCE_H
-#include <KUserFeedback/AbstractDataSource>
+#include <KUserFeedbackQt6/AbstractDataSource>
class DolphinMainWindow;
#include "dolphinmainwindow.h"
#include <KLocalizedString>
-#include <KUserFeedback/Provider>
+#include <KUserFeedbackQt6/Provider>
#include <QApplication>
#include <QVariant>
#ifndef SETTINGSDATASOURCE_H
#define SETTINGSDATASOURCE_H
-#include <KUserFeedback/AbstractDataSource>
+#include <KUserFeedbackQt6/AbstractDataSource>
class DolphinMainWindow;
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);
}
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);
#include <KFileItemListProperties>
#include <KFormat>
#include <KIO/CopyJob>
-#include <KIO/DeleteJob>
+#include <KIO/DeleteOrTrashJob>
#include <KIO/DropJob>
#include <KIO/JobUiDelegate>
#include <KIO/Paste>
#include <kwidgetsaddons_version.h>
-#include <KIO/DeleteOrTrashJob>
-#include <kio_version.h>
-
#include <QAbstractItemView>
#include <QActionGroup>
#include <QApplication>
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();
}
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."));
// 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<KActionMenu *>(groupAction);
if (actionMenu) {
const auto actions = actionMenu->menu()->actions();
return m_plugin->versionControlActions(items);
} else {
QList<QAction *> actions;
- for (const QPointer<KVersionControlPlugin> &plugin : qAsConst(m_plugins)) {
+ for (const QPointer<KVersionControlPlugin> &plugin : std::as_const(m_plugins)) {
actions << plugin->outOfVersionControlActions(items);
}
return actions;
}
}
- 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);
initPlugins();
// Verify whether the current directory is under a version system
- for (const QPointer<KVersionControlPlugin> &plugin : qAsConst(m_plugins)) {
+ for (const QPointer<KVersionControlPlugin> &plugin : std::as_const(m_plugins)) {
if (!plugin) {
continue;
}