┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2026-06-13smoothscroller: always emit scrollingStopped from scrollToMéven Car
When scrollTo() is asked to move to the position the scrollbar already holds (clamped, e.g. an item at the bottom, or a sub-pixel offset), no animation runs and scrollingStopped() was never emitted. Callers waiting for it stayed blocked: KItemListView::scrollToItem() delegates to scrollTo for any non-zero offset, and DolphinView::renameSelectedItems() only opens the inline rename editor once scrollingStopped() arrives. So inline rename silently did nothing for the affected items. Emit scrollingStopped() in the no-op case too, and add a regression test.
2026-06-13remove version guards below the build minimumsMéven Car
KIO_VERSION and KFILEMETADATA_VERSION checks up to 6.23 are always true given the Qt 6.4 / KF 6.23 minimum versions.
2026-06-13versioncontrol: fix use-after-free of the current pluginMéven Car
searchPlugin returns one of the observer-owned m_plugins, so m_currentPlugin always aliases an entry in that list. Deleting m_currentPlugin in setModel freed that object while leaving a dangling pointer in m_plugins, which the next searchPlugin or actions call would dereference. setModel(nullptr) runs on every directory change, so this was reachable when leaving a versioned directory. Make the observer the real owner: parent the plugins to it so QObject deletes them, stop deleting the shared plugin in setModel (just clear the current selection), and drop the matching delete in the destructor.
2026-06-13setfoldericon: fix leak of the submenuMéven Car
ButtonsWithSubMenuWidgetAction owned the QMenu (no parent, setMenu does not take ownership) but had no destructor, so every folder context menu leaked one QMenu and its overflow actions. Add a destructor that deletes it.
2026-06-13Add A restore view properties to defaults buttonMéven Car
The button allows to restore to defaults, in case you are using the per-folder view properties settings. The button disables or enables itself whether or not it matches the defaults view settings.
2026-06-13viewproperties: ensure not to remove defaults view propertiesMéven Car
As the global file defines the defaults, it will always match the isDefault filter. In this case prevent the filter to remove its settings.
2026-06-13GIT_SILENT Sync po/docbooks with svnl10n daemon script
2026-06-12GIT_SILENT CI - Flatpak - Update VersionsJustin Zobel
OUTDATED: ark-25.08.3.tar.xz Upgraded to: URL: https://download.kde.org/stable/release-service/26.04.2/src/ark-26.04.2.tar.xz Version: 26.04.2 OUTDATED: lmdb.git Upgraded to: URL: https://github.com/LMDB/lmdb.git Commit: 69087ced3cb6082f7dcfb4fc2dcaa3b68a7e2e8c Tag: LMDB_0.9.35 Branch: None Version: 0.9.35 OUTDATED: vlc-3.0.22.tar.xz Upgraded to: URL: https://get.videolan.org/vlc/3.0.23/vlc-3.0.23.tar.xz Version: 3.0.23
2026-06-12GIT_SILENT Sync po/docbooks with svnl10n daemon script
2026-06-11Allow grouping by a separate criterionRamil Nurmanov
Add an explicit group role to Dolphin views so items can be grouped independently from the active sort role. Previously, Dolphin's grouped view always used the current sort role as the grouping criterion. This meant that grouping and sorting were tied together, for example grouping by type also required sorting by type. This change adds a separate Group By menu. It replaces the previous Show in Groups toggle and allows the user to disable grouping, keep the old Same as Sort behavior, or explicitly group by a selected criterion. When an explicit group role is set, the model keeps groups stable and uses the normal sort role as a secondary key inside each group. The roles updater also receives the active group role, so roles used only for grouping are still updated correctly. BUG: 416134 CCBUG: 510670 CCBUG: 513235 CCBUG: 46393
2026-06-10kitemviews: handle macOS pixel wheel scrolling immediatelyKetal Wang
2026-06-06GIT_SILENT Sync po/docbooks with svnl10n daemon script
2026-06-05GIT_SILENT Sync po/docbooks with svnl10n daemon script
2026-06-04DolphinNavigatorsWidgetAction: Let non-Breeze QStyles style the non-toolbar ↵Filip Fila
navbar how they want Currently when Dolphin's location bar is moved from the main toolbar, it stops being a nice `FrameLineEdit` that QStyles can style as they please. That's because the current code is only adjusted for Breeze, which wants to fill the entire navbar frame with a plain rectangle. Unfortunately, non-Breeze styles suffer from bad looks because this Breeze design is applied for them too. In order to fix this, this MR restores the styling power back to QStyles by removing the rectangle, all the while keeping it for Breeze. | Before (Breeze) | After (Breeze) | | ------ | ------ | |![DolphinURL-before_Breeze_](/uploads/b526076352023862e2f17cef744802a0/DolphinURL-before_Breeze_.png){width=698 height=134} | ![DolphinURL-after_Breeze_](/uploads/eb60d5c2a6dff129c4d200fef5f8c5ab/DolphinURL-after_Breeze_.png){width=715 height=138} | | Before (Oxygen) | After (Oxygen) | | ------ | ------ | | ![DolphinURL-before_Oxygen_](/uploads/2d8f19debbd5410b8f0882ed20b34f83/DolphinURL-before_Oxygen_.png){width=714 height=114} | ![DolphinURL-after_Oxygen_](/uploads/fc6a1bed3de647534494951a7b113d5e/DolphinURL-after_Oxygen_.png){width=687 height=129} | | Before (MSWindows9x) | After (MSWindows9x) | | ------ | ------ | | ![DolphinURL-before_MSWindows9x_](/uploads/88ebd20a2be5d9052165ea417517b4a3/DolphinURL-before_MSWindows9x_.png){width=715 height=107} | ![DolphinURL-after_MSWindows9x_](/uploads/575e7a944238113714c70b7705b3854a/DolphinURL-after_MSWindows9x_.png){width=702 height=100} | | Before (Darkly) | After (Darkly) | | ------ | ------ | | ![DolphinURL-before_Darkly_](/uploads/76f28b8175498b6a611953c05554c4e8/DolphinURL-before_Darkly_.png){width=675 height=123} | ![DolphinURL-after_Darkly_](/uploads/7b9b15eaab10ee7731d55c60af7591bf/DolphinURL-after_Darkly_.png){width=705 height=144} | | Before (Fusion) | After (Fusion) | | ------ | ------ | | ![DolphinURL-before_Fusion_](/uploads/de27a5028986d797407bfe66b2e9916b/DolphinURL-before_Fusion_.png){width=701 height=118} | ![DolphinURL-after_Fusion_](/uploads/7f5c7acd1c433fcba8b96e402cf12a21/DolphinURL-after_Fusion_.png){width=692 height=122} | | Before (Kvantum) | After (Kvantum) | | ------ | ------ | | ![DolphinURL-before_Kvantum](/uploads/21c2126044ba31c3bc00610e34a71ec1/DolphinURL-before_Kvantum.png){width=697 height=135} | ![DolphinURL-after_Kvantum](/uploads/ea5287e7ba59e1f9b449c1b002d3b634/DolphinURL-after_Kvantum.png){width=700 height=123} | BUG: 518285 FIXED-IN:
2026-06-04GIT_SILENT Sync po/docbooks with svnl10n daemon script
2026-06-03SVN_SILENT made messages (.desktop file) - always resolve oursl10n daemon script
In case of conflict in i18n, keep the version of the branch "ours" To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2026-06-03GIT_SILENT made messages (after extraction)l10n daemon script
2026-06-02GIT_SILENT Sync po/docbooks with svnl10n daemon script
2026-06-02SVN_SILENT made messages (.desktop file) - always resolve oursl10n daemon script
In case of conflict in i18n, keep the version of the branch "ours" To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2026-06-01kfileitemmodel: prefer prefix over postfix increment for iteratorSebastian Englbrecht
Postfix increment creates an unnecessary temporary copy.
2026-06-01actionwithwidget: use QPointer::data() for explicit pointer extractionSebastian Englbrecht
Returning a QPointer<T> where T* is expected relies on an implicit conversion that cppcheck cannot model correctly. Use .data() to make the intent explicit.
2026-06-01dolphinmainwindow,dolphinview: clarify QPointer semantics around exec()Sebastian Englbrecht
exec() runs a nested event loop that can destroy the parent widget, so the post-exec null-check on the QPointer is intentional, not redundant. dolphinmainwindow: replace `if (contextMenu) deleteLater()` with `delete contextMenu`. QPointer returns nullptr for a destroyed object, making delete a safe no-op. dolphinview: capture the menu as a raw pointer for pre-exec setup; reserve the QPointer for the post-exec liveness check and deletion.
2026-06-01GIT_SILENT Sync po/docbooks with svnl10n daemon script
2026-05-31dolphinview: Unselect navigator when click on backgroundFlorian RICHER
2026-05-31GIT_SILENT Sync po/docbooks with svnl10n daemon script
2026-05-30placespaneltest: implement 8 unittestsSebastian Englbrecht
2026-05-29KItemListWidget: Add pressedChangedAkseli Lahtinen
When items were pressed, we never called the updateAdditionalInfoTextColor, which caused some of the text colors get out of sync. This was especially noticeable in details view when using an accent color that makes the font color change to preserve readability. BUG: 508329
2026-05-29GIT_SILENT Update Appstream for new releaseHeiko Becker
(cherry picked from commit ecdffe5fff8439e91249067b0a80190a7fa158ce)
2026-05-29GIT_SILENT Sync po/docbooks with svnl10n daemon script
2026-05-28informationpanelcontent: Remove video preview play arrowRyan Nosurname
This commit removes the "Play" arrow on top of the video preview. There is no change to behavior. Motivation: There is already the play button and seekbar directly below the thumbnail, and when mousing over it you get the pointing hand. Surely this gives the user enough clues that the video can be previewed in-place.
2026-05-28dolphinmainwindowtest: ensure consistent starting state for places panel testsSebastian Englbrecht
In a fresh test environment there is no saved session, so the places panel may not be visible. Explicitly show it before testing. Additionally, focus-related assertions require the window to be the active window — setFocus() on dock widget contents has no effect on an inactive window. Replace the weak QTRY_VERIFY_WITH_TIMEOUT(activeWindow() != nullptr, 100) with requestActivate() + qWaitForWindowActive() to enforce this precondition.
2026-05-28Enable REUSE lint CI jobSebastian Englbrecht
2026-05-28Add REUSE/SPDX compliance headers to all filesSebastian Englbrecht
Dolphin was missing copyright and license information on ~750 files, which would cause the KDE CI job `gitlab-templates/reuse-lint.yml` to fail. This commit makes the project fully compliant with REUSE Specification 3.3. REUSE.toml is used for file categories that cannot carry inline comments or are managed externally: - po/**: covered with precedence=aggregate so the bulk declaration combines with individual translators' existing inline headers - **/*.kcfg, **/*.kcfgc: KConfigXT schema files, no comment syntax - doc/*.png: documentation screenshots - src/icons/*.png: application icons (LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL) - src/**/*.{qrc,rc,desktop,xml,json,knsrc,upd,in}: resource and metadata files without usable comment syntax - .gitignore, .git-blame-ignore-revs: infrastructure, CC0-1.0 - logo.png: application artwork (LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL) Inline SPDX headers are added to all source files that support comments (C++, QML, CMake, shell scripts, Python). A small number of remaining binary or single-purpose files retain individual .license sidecars. License inference heuristic (applied per file, in order): 1. Existing inline SPDX-License-Identifier — reused as-is 2. Most common license among sibling files in the same directory that already carry SPDX info, excluding infrastructure filenames (.gitignore etc.) and requiring at least two qualifying neighbors to prevent a single CC0 CI config from pulling source files along 3. Default: GPL-2.0-or-later Copyright years and authors are sourced from `git log --follow` per file. Automation accounts (l10n daemon [email protected], Weblate) are excluded from author lists. If more than 5 authors are found only a generic KDE Contributors was used.
2026-05-28dolphinmainwindow,kitemlistview: fix unowned object allocationsSebastian Englbrecht
Parent QMenu to the main window so it is owned and deleted with it. Register KItemListContainerAccessible in Qt's accessibility cache so Qt takes ownership and deletes it with the container widget.
2026-05-28dolphinview,mountpointobserver: kill in-flight KIO jobs in destructorSebastian Englbrecht
Both objects start KIO jobs that can outlive the object if it is destroyed before the job finishes. Store the pending job and call kill(Quietly) in the destructor to avoid leaks and dangling callbacks.
2026-05-28dolphinplacesmodelsingleton,trash: destroy owned objects before KIO cache ↵Sebastian Englbrecht
teardown Both singletons start KIO list jobs on construction. Register qAddPostRoutine to destroy the owned objects during QCoreApplication teardown, while KIO's KCoreDirListerCache can still cancel in-flight jobs.
2026-05-28terminalpanel: delete konsolePart in destructor, use unique_ptr for ↵Sebastian Englbrecht
KXMLGUIBuilder Deleting konsolePart before QObject child cleanup ensures m_konsolePartClientBuilder is still alive when the lambda connected to m_terminalWidget::destroyed fires and calls factory->removeClient().
2026-05-28kitemlistcontrollertest: fix memory leaksSebastian Englbrecht
2026-05-28KItemListController: remove redundant conditions in drag/release handlersSebastian Englbrecht
newHoveredWidget is already guarded non-null by the enclosing if-block; !isAboveSelectionToggle is always true after the preceding early return. Remove both dead sub-expressions.
2026-05-28DolphinView: store new zoom level in a variable after setZoomLevel()Sebastian Englbrecht
zoomLevel() called twice returns the same value to static analysis. Found with cppcheck
2026-05-28barsecondrowflowlayout: avoid virtual call in destructorSebastian Englbrecht
cppcheck warns about calling virtual functions during destruction because dynamic dispatch is no longer reliable at that point. Replace takeAt(0) with direct access to itemList.takeFirst() to drain the list without going through the virtual interface.
2026-05-28kitemlistviewaccessible: avoid virtual call in constructorSebastian Englbrecht
cppcheck warns about calling virtual functions during construction because dynamic dispatch is not yet fully active at that point. Replace childCount() with its concrete implementation view()->model()->count() directly.
2026-05-28kitemlistcontrollertest: add drag-move hover signal testsSebastian Englbrecht
Two tests via new simulateDragMove/simulateDragLeave helpers: - testDragMoveHoverIdempotency: repeated drag-move over the same item must not emit itemHovered more than once; moving to a different item must emit itemUnhovered/itemHovered exactly once each. - testDragLeaveHoverCleanup: dragLeaveEvent must emit itemUnhovered for the currently hovered item and nothing when no item is hovered.
2026-05-28tests: create smoke test for dolphinSebastian Englbrecht
2026-05-28GIT_SILENT Sync po/docbooks with svnl10n daemon script
2026-05-26DolphinRecentTabsMenu: remove no-op null assignment after deleteSebastian Englbrecht
action is a by-value parameter; action = nullptr only affects the local copy. Remove the dead line. Found with cppcheck
2026-05-26KItemListWidgetCreator, KFileItemModelFilter: delete copy operationsSebastian Englbrecht
Both classes own a raw pointer freed in the destructor. The implicit shallow copy would cause a double-free. Mark copy constructor and operator= as = delete. Found with cppcheck
2026-05-26MediaWidget, BottomBarContentsContainer: initialize members in constructorSebastian Englbrecht
m_autoPlay is read in setUrl() before setAutoPlay() is called; m_contents is compared before resetContents() sets it. Both are undefined behavior. Add initializers to the member-initialization lists. Found with cppcheck
2026-05-25ci: remove --repeat until-pass:3Sebastian Englbrecht
Tests are now deterministic — flaky qWait(N) calls have been replaced with signal-based waits and a lint rule prevents reintroduction. The retry workaround is no longer needed.
2026-05-25tests: add ctest lint rule forbidding bare QTest::qWait()Sebastian Englbrecht
Bare qWait(N) calls in tests are easy to reintroduce inadvertently. Add a ctest check that greps test sources for qWait() and fails if any call is found without an // UNAVOIDABLE: comment on the same line. The error message explains why the pattern is forbidden, lists the signal-based alternatives, and shows how to suppress the check for the rare cases where no signal or pollable condition exists.