┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews
AgeCommit message (Collapse)Author
2025-11-27kitemviews: Prevent crash when dragging details side padding headerCarlos Aurelio
Calling createRolePixmap() while roleIndex is < 0 (which is the case for the header side padding) would cause access to a negative index of a vector, so exit the function before so and do nothing. BUG: 511057
2025-11-21kstandarditemlistwidget: Fix vertical misalignment for file names containing ↵Pan Zhang
certain glyphs In the Details view the name (text) column could appear vertically off-center for file names containing certain Unicode glyphs (for example "』"). The issue is caused by a mismatch between the generic font metrics ascent and the actual ascent of the rendered QTextLine for that glyph, which shifts the baseline and thus the visual vertical centering. This change computes the QTextLine ascent for the (single) layouted line and adjusts the vertical position by the difference between the font metrics ascent and the line ascent. The adjustment is applied only for the name (text) role so other columns are unaffected. BUG: 512152
2025-11-12Revert "Avoid implicitly selecting items"Nate Graham
This reverts commit 122fee5625f0285ec4ebda79162c72390989eb2a. This behavior change was well-intentioned, but has significant usability and speed drawbacks that have not been addressed: - Keyboard-driven folder manipulation became slower - Unexpected behavioral differences when opening files with the pointer compared to when opening them with the keyboard introduced inconsistency and cognitive load - Unexpected opening of selection mode during fast operation introduced the potential for confusion and additional errors - Dolphin's behavior became inconsistent with that of other file managers users may be accustomed to The bug tracker, discuss.kde.org, and Reddit are full of complaints about this change. It's been a year now; I think it's clear that many Dolphin users have not gotten used to and accepted it. I have to count myself as one of them, I'm afraid. I've tried to get used to it for a year, but I just have not been able to. I don't believe the benefits of this change outweigh the drawbacks, so let's revert it. 24d859cf19e90fa22ed687b36a68231625c1bd80 was explicitly mentioned as a thing that should also be reverted in this case, but it's already been done. BUG: 494125 BUG: 511966 CCBUG: 424723 CCBUG: 492404 FIXED-IN: 25.12.0
2025-11-10dolphin: improve keyboard search behavior for repeated charactersweinan li
The original keyboard search implementation had a limitation when dealing with files containing repeated characters like 44.txt. When typing 44, it would trigger rapid navigation to the next item starting with 4 instead of matching the full string 44. This patch introduces a smarter search strategy: 1. First attempt full string matching for exact file names 2. If full match fails and user is typing repeating characters, fall back to rapid navigation using either: - Last successful search string (for extended searches like 444 -> 4444) - First character only (original rapid navigation behavior) The changes include: - Modified changeCurrentItem signal to include a found parameter for search result feedback - Added m_lastSuccessfulSearch to track successful searches for better fallback behavior - Used Qt::DirectConnection to ensure synchronous execution for immediate result feedback This provides better user experience when searching for files with repeated characters while maintaining the rapid navigation feature for quick browsing. BUG: 501851
2025-11-04icon view: fix file names overflowing after text elidingBojidar Marinov
aba0de7301b060c40d543adbaa8d53cf69a9d7ee re-introduced the usage of QFontMetrics::boundingRect(QString) for calculating the size of the last line of a filename. ..Unfortunately, that function uses a different code path from QTextLayout, and arrives at a shorter width for a line of text. Meanwhile, QFontMetrics::size(QString) internally uses QFontMetric::boundingRect(QRect, int, QString, ..), which has been documented as "The bounding rectangle returned by this function is somewhat larger than that calculated by the simpler boundingRect() function. This function uses the maximum left and right font bearings as is necessary for multi-line text to align correctly." I have empirically confirmed that QFontMetricsF::size and QTextLine::naturalTextWidth return the same floating-point value given the same input, and QFontMetrics::size does internally use QTextLine::naturalTextWidth through qt_format_text. BUG: 432530
2025-10-23Remove ResizeAnimation/IconResizeAnimationMarco Martin
ResizeAnimation and IconResizeAnimation are not used anymore anywhere so remove them from KItemListViewAnimation
2025-10-23Item view: don't do a zoom animationMarco Martin
The zoom animation in all 3 views looks very glitchy, because icons that were already in view animate, those that weren't don't animate giving weird effect. In the list view mode, the tree view branches don't animate either, showing weird holes between the branches Also, while zooming in and out very quickly, is possible to have the selection rectangle somehow unsynced with the items sizes leading to visual glitches. Without an animation, zooming the view feels much faster and robust giving immediate feedback when zooming via ctrl+scroll or by dragging the slider around BUG:510426
2025-10-23kstandarditemlistwidget: guard against textOption not existingMéven Car
In editedRoleChanged. This can happen if updateTextsCache has not yet be called before editedRoleChanged in tests notably.
2025-09-23GIT_SILENT: Don't duplicate headers between .h/.cppLaurent Montel
2025-09-11dolphinview: add preferred sort order for rolesNathan Williams
BUG: 425457 This commit ensures that both the menu and column headers in table view will have the same default sorting (ascending/descending) for each role. It also saves the user's preferences for each role throughout the session. Previously, sorting by "Modified" would always sort by "Oldest First." If the user then changed to "Newest First" and sorted again by "Name," files would be sorted in reverse alphabetical order (Z-A). Now, sorting by "Modified" defaults to "Newest First." If a user switches between multiple roles, the default for each role will be used unless the user changes to a non-default sort order. In that case, the user's preference will be applied. Defaults: **Descending Order:** Time-based roles - modificationtime - creationtime - accesstime - deletiontime - imageDateTime - releaseYear Size/dimension roles - size - width - height - pageCount - wordCount - lineCount Quality/Quantity roles - rating - duration - bitrate - frameRate **Ascending order:** - Text based roles (A-Z) - All other roles
2025-09-07Double scroll distanceFelix Ernst
This commit doubles the distance a single scroll tick will scroll in the main view. While fixing a bug and improving scroll behaviour in 8e3addb7e73122a4c89ef347b03f714ff75a253a, the scroll distance was effectively reduced to a third of the original value. Most users seem to be okay with this, but there is some disgruntlement. Even though the new scroll speed is consistent with KWrite, it is way slower than e.g. Firefox. In a perfect world we would have a similar scroll distance in every scroll area so users could predict how much they have to scroll to see a certain part of the content, however we are not there yet. This commit aims to find a middle ground between our own definition of scroll distance and user expectation. BUG: 508290
2025-09-03Fix several user-facing and non-user-facing typosKunda Ki
Found via `codespell -S "*.desktop,*.po,*.svg,*.xml,./po" -L aparent,childs,goup,lokal`
2025-09-02KStandardItemListWidget: Clean hover effect on editRole changedAkseli Lahtinen
When editRole is changed, as in we start renaming an item, we should clean up the hover effect. Otherwise we'll have a weird glitchy look. BUG: 508388
2025-09-02KStandardItemListWidget: Do not recolor branch indicatorsAkseli Lahtinen
Since we never set the background color of the branch indicator to something different now, we can just let its color to stay as default.
2025-09-02KStandardItemListWidget: Color icon only if item isPressedAkseli Lahtinen
Due to the new focus changes, our background highlights are more transparent. This means that the selected icon color is wrong, since it's meant for fully opaque background We should color the icon only when the element is pressed, which is the only time we use fully opaque background. BUG: 508418
2025-08-26KStandardItemListWidget: Use styleOption().iconSizeAkseli Lahtinen
We should use styleOption().iconSize instead of iconSize(), since the styleOption returns always the correct size depending on if we are showing previews or not. In DolphinItemListView we set the iconSize based on the previewSize or iconSize, and the styleOption().iconSize is whichever value it is here. KItemListWidget::iconSize always returns the settings.iconSize BUG: 508352
2025-08-26KItemListView: Check if animation is already started before starting new oneAkseli Lahtinen
When user changes the zoom rapidly, we start the animation multiple times, which causes delays with the animation and the icon size is wrong for a while until user interaction refreshes the view. This change runs the animation only when it's been finished, and avoids the issue with the refresh. Instead in those situations, we know that user is doing something really rapidly, so we should just set the icon size to what it needs to be. BUG: 508352
2025-08-18KItemListWidget: Use strokePath instead of drawPathAkseli Lahtinen
StrokePath gives the focus frame a less blurry look Since the path is bit thinner now, we need to adjust the alpha level to make it easier to see. This is especially visible in dark themes. BUG: 507005
2025-07-24KItemListView: Don't allow starting role editing when animation is runningAkseli Lahtinen
If user presses delete and then F2 in very quick succession, the inline rename field will get stuck in place, due to the animation moving the actual item in different place. To avoid any confusion, disallow starting role editing while any animations are running. BUG: 497125
2025-06-23Fix file names overflowing after text elidingBojidar Marinov
When QFontMetrics::boundingRect().width was replaced with QFontMetrics::horizontalAdvance() in 76a46fd9094b17eb99e8a42cca8562fdc0b3814c, an extra line (formerly introduced by a203c271161ce953354b9e0722492605a4d17415) was changed as well. Unfortunately, boundingRect().width is the correct function to use for calculating the size of the last line, while horizontalAdvance would be correct if we were laying it next to the previous line instead of below the previous line. BUG: 432530
2025-06-20New selection effectsAkseli Lahtinen
This adds a new selection effect that is similar to what we have in QtQuick file item views. There are also changes to some usability: Instead of only the icon and text being the clickable area in icon and details mode, the whole selection is now the clickable area. Otherwise the usability should stay the same, it's mostly a visual change. See also: https://invent.kde.org/teams/vdg/issues/-/issues/94
2025-06-17Add setting to select filename eliding behaviorGleb Kasachou
Introduces a setting in Content Display Tab that allows to choose how filenames are truncated when they do not fit in the maximum filename length, i.e elide. BUG: 504795
2025-06-12DolphinView: Conform to global scroll speedAleksandr Borodetckii
One scroll with the mouse wheel is supposed to scroll the view by QApplication::wheelScrollLines, however previous to this commit Dolphin scrolled the view by QApplication::wheelScrollLines^2 instead, which was wrong and way too much. This commit fixes this by defining one line height as the height of the current default font. This value is multiplied by QApplication::wheelScrollLines to determine the scroll amount per mouse wheel scroll. In details view mode however, where there really are rows to go by, this commit makes sure to always scroll by full rows. The number of rows to scroll is determined by rounding up from the scroll amount used in the other view modes. Co-authored-by: Felix Ernst
2025-05-14Check if the item supports sequencing before looking for sequence pixmapsAkseli Lahtinen
This patch checks the item first if the plugin it's using for it's previews even supports sequences. If not, we can then safely ignore the hover action for polling more sequences and avoid unnecessary work. The sequencing support is false by default, so we set it true only when we know it's possible.
2025-05-09DolphinView: Remove -1 interval, add setAutoActivationEnabledAkseli Lahtinen
In future Qt versions, Qt Timers do not allow negative intervals. Instead, they will be changed to 1. Related Qt commit: https://github.com/qt/qtbase/commit/f1f610bc67bfd5c2ef31270a6945e7bae93b5e4a Instead of relying on the interval, use a boolean variable to check if the autoactivation is enabled or not.
2025-04-29Clazy fixMéven Car
2025-04-20KStandardItemList: have emblem when hoveringMéven Car
2025-03-23KFileItemListWidget: wrong selection when renamed file ends with a dotShitong Xu
When a file name ends with a dot, it should be treated like there is no extension. When triggering a rename, the file name except the extension should be selected, which is equal to the full file name when the file ends with a dot.
2025-03-13KFileItemModelRolesUpdater: reset size and count before updating foldersAkseli Lahtinen
Folder count would not update properly when user would delete file from a folder, or add a new file to it. Previously when size value is set to -2 after update, the update will never be called again unless user presses F5. This change will instead reset that -2 to 0 whenever we are requesting for calculating directory sizes. We never updated the count when a file was deleted, so that has been added as well. This change also calculates the item counts from the processedAmount, which is the total amount of items we're processing. From there we remove the unwanted items and get the final count. For remote files, we set the count to -1 since we don't calculate them. BUG: 500502
2025-03-09kstandarditemlistwidget: render overlays in paintMéven Car
This allows to keep the original pixmap in m_pixmap when resizing so it can have nice rendering when being resized and simplifies implementation
2025-03-01kstandarditemlistwidget: make overlay icons independant of preview sizeMéven Car
This consists in replacing the use of KIconUtils::addOverlay to custom adapted function, based on KIconLoader::global()->drawOverlays previous behavior. BUG: 500428
2025-02-24Add smaller statusbar and set it as defaultAkseli Lahtinen
- Statusbar has three modes: Small, FullWidth and Disabled - FullWidth is the original statusbar - Small is the new default statusbar - This statusbar overlays on top of the items instead of taking space - It changes size according to content - Disabled turns statusbar completely off - Zoom slider and space information is only shown in full-width statusbar - Space information is now always on - If user navigates with keyboard, or scrolls to selection, the scrolling will take the statusbar into account - This makes sure the statusbar does not cover any items Related discussion: https://invent.kde.org/system/dolphin/-/issues/50
2025-02-22kitemlistkeyboardsearchmanager: smarter search start positionYifan Zhu
Search from the next position for new search and special repeated key search. Otherwise search from the current position, which is current selected item if something is selected or in selection mode, and 0 (the beginning) otherwise. Test plan: - create directory with files ab1, ab2, and ab3 - click ab2, and press escape to deselect - type ab; verify that ab1 is selected - wait a while, type ab again, verify that ab2 is selected - wait a while, type ab again, verify that ab3 is selected - click ab1, type ab, verify that ab2 is selected BUG: 422951
2025-02-17kfileitemmodel: allow more than 2 single quotes in translated stringsSergey Katunin
This change concerns `timeRoleGroup`.
2025-02-01Ignore diacritical marks for keyboard searchThomas Moerschell
When using keyboard search, normalize the item names and remove marks first. Now, items containing characters with marks can be found using keyboard search. BUG: 482394
2025-01-17Refactor Overlay HandlingMéven Car
Now all overlays icons in kitemviews are added in KStandardItemListWidget::updatePixmapCache. data[iconOverlays] now contains icon names. DolphinFileItemListWidget::refreshCache is the sole responsible of setting the overlays either coming from KFileItemModelRolesUpdater or KVersionControlPlugin. This garantees consistency in rendering. BUG: 497372
2025-01-15Clean stop-gap porting ifdef for KICONTHEMES_VERSIONMéven Car
That were introduced in: a55c467fbb31d822d89722812388425327830377 38ab14c87a945153e683657483fa4bcf44d6b0fb
2025-01-11KFileItemModelRolesUpdater: add utility cacheSize functionMéven Car
2025-01-11KFileItemModelRolesUpdater: Show emblems even in hover sequenceMéven Car
2025-01-11Icons: when adding overlays pass in the output sizeMéven Car
Instead of the pixmap size that won't be accurate. It allow KGuiAddons::addOverlays to draw larger images to add overlays. Consequently the emblems are not longer dependant scaled based on the pixmap aspect ratio. BUG: 498211
2025-01-09information panel: scale according dprMéven Car
Also use dpr for icons. Amends cebcf8db BUG: 497576
2025-01-07Elide file names in the middle againNate Graham
In ye olden days, filenames were elided on the right. This prevented seeing the filename extension and any suffix style text the user included in the filename (e.g. "myfile 1", "myfile 2" and so on). In 97f49347482519b9ad53b7596d7462e68b7c2e14, this was changed to elide in the middle, fixing both problems and bringing Dolphin into Jakobs' Law style consistency with MacOS Finder and Windows Explorer, and possibly other file managers too. However it worsened the situation for users who name their files such that most of the information was on the left. After some complaints, it was changed in 99cf24c03def1c0722ba8dbd86a27b9dbc521f43 to right-elide again, but excluding the filename extension. Unfortunately user complaints have continued. At this point it's clear that nothing will satisfy everyone due to diversity of file naming styles. In such a situation, Jakobs' Law consistency with the rest of the industry is the best solution short of making it configurable, which has its own drawbacks. Accordingly, return to middle-elision. BUG: 497664 CCBUG: 404955 FIXED-IN: 25.04.0
2024-12-29Mirror details view mode for right-to-left languagesFelix Ernst
This commit implements mirroring of the details view mode for right-to- left languages. This is the last of the Dolphin view modes which did not adapt to right-to-left languages correctly. Implementation-wise this is mostly about adapting the math so all the information is placed correctly no matter the view mode or layout direction. While most of the view actually changes the painting code for right-to-left languages, for the column header I decided to keep the logic left-to-right and instead reverse the order of the role columns. To implement this mirroring I needed to rework quite a bit of logic, so I used the opportunity to fix some bugs/behaviur quirks: - Left and right padding is now saved and restored separately instead of only saving the left padding - Changing the right padding no longer disables "automatic column resizing". - The grip handles for column resizing can now be grabbed when near the grip handle instead of only allowing grabbing when slightly to the left of the grip. - Role column headers now only show a hover highlight effect when the mouse cursor is actually above that role and not above the grip handle or the padding. - There is now a soft-boarder when shrinking the right padding so shrinking the padding "below zero width" will no longer immediately clear automatic resize behaviour. So now it is possible to simply remove the right padding by resizing it to zero width. BUG: 449211 BUG: 495942 # Acknowledgement This work is part of a my project funded through the NGI0 Entrust Fund, a fund established by NLnet with financial support from the European Commission's Next Generation Internet programme, under the aegis of DG Communications Networks, Content and Technology.
2024-12-29Have special keyboard controls in selection modeFelix Ernst
Prior to this commit keyboard controls and behaviour of Dolphin's main view were identical no matter if selection mode was enabled or not. While selection mode makes it impossible to accidentally clear the selection by singular mouse clicks, any press of an arrow key on the keyboard would still clear the full selection which goes against selection mode's objective. Furthermore, keyboard-only users had no reason to ever enable selection mode because it made no difference to them. This commit changes this by offering a changed control scheme for key presses while in selection mode. Arrow key presses without modifier now only move focus between items but do no longer clear or change the selection. Similarly, Page Up/Down, Home, and End key presses only move keyboard focus. Enter, Return, and Space key presses now only toggle the selection for the current item. The above controls are however mostly unchanged when combining them with Modifier keys like Shift or Control. The type-ahead feature is also changed in selection mode to only move keyboard focus without changing the selection. This way keyboard users are less likely to clear their selection by mistake. Regression tests are added for these selection mode controls. The code changes to change this keyboard behaviour are quite minimal. Most of the added code is for making selection mode accessible. That's because we need to make sure the changed control scheme is properly announced and communicated or a blind user will be left utterly confused why the normal keyboard controls "stopped working". Enabling or disabling selection mode is announced to accessibility software. Furthermore whenever focus goes to the main view, the selection mode state is also mentioned when active. BUG: 458091
2024-12-19dolphinview: Update thumbnail on filename changeAkseli Lahtinen
If filename of an item was updated previously, it would modify the model before the file was actually changed. This led to the model calling a signal that would try to run a previewjob, but since the filename is not actually changed yet on disk, it would fail. This patch moves the model updating after copyjob. Copyjob will take care of the file renaming if there is already existing file. We just need to update the model correctly after the job has succeeded. BUG:497555
2024-12-09Fix inline renaming multiple files when renaming changes sorting orderIlia Kats
Suppose we are renaming file i and the new name will be sorted after file i+1. We are now pressing ArrowDown to immediately start renaming file i+1. However, because of the sorting we would not actually end up renaming what used to be file i+1. What would happen is that editing would be started in dolphinview.cpp:2065. However, after 100 ms the timer in KFileItemModel would fire, resulting in the model emitting itemsMoved(). This would trigger doLayout() in KItemListView::slotItemsMoved(). doLayout() resizes the KItemListWidgets, wich causes the renaming to be canceled in KStandardItemListWidget::resizeEvent(). Now, we start a new renaming operation for the correct widget after the relayouting is complete.
2024-12-05Adapt to Orca 47Felix Ernst
The screen reader Orca has seen some fundamental changes between Orca 46 and Orca 47. While they are improvements overall, they do require changes to Dolphin to preserve the intended user experience for Orca users. The biggest change is perhaps that Orca will now not only announce changes to the currently focused item, but also of its parent, which means we do not need to pass focus around between file items and the main view within Dolphin, but can keep focus on the file items most of the time. This commit implements this. The only exception of when we cannot have focus on the items within the main view is when the current location is empty or not loaded yet. Only then is the focus moved to the view itself and the placeholderMessage is announced. This commit worsens the UX for users of Orca 46 or older, so this should only be merged once most users are on Orca 47 or later.
2024-12-02KItemListSmoothScroller: stop animation on property or targetobject changeAkseli Lahtinen
Due to changes in 15e0c2a98f480f203ce168b6fa9a2e1f2b0ed8f8 we do not automatically stop animations now on property or targetobject change, which causes warnings and timeouts. This patch makes sure we stop them if their state is Running, before modifying them. See also: https://invent.kde.org/system/dolphin/-/merge_requests/857#note_1083279
2024-11-29Make "open path" and "open path in new tab" scroll to the selected itemAkseli Lahtinen
**Open Path** When user clicks on "Open Path" after searching for an item, user expects the view to show the item immediately. We wait for the KItemListSmoothScroller to be done with its animation before the scrollbar sizes are being changed. **Open Path in New Tab** When user selects "Open Path in New Tab", we open a new tab to the folder where the file is, then select and set the file current. We need to get the correct tab when opening one, so it has been added as a return value. BUG:495613
2024-11-25Switch to C++20Méven Car