| Age | Commit message (Collapse) | Author |
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
ResizeAnimation and IconResizeAnimation are not
used anymore anywhere so remove them from KItemListViewAnimation
|
|
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
|
|
In editedRoleChanged.
This can happen if updateTextsCache has not yet be called before
editedRoleChanged in tests notably.
|
|
|
|
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
|
|
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
|
|
Found via `codespell -S "*.desktop,*.po,*.svg,*.xml,./po" -L aparent,childs,goup,lokal`
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
|
|
|
|
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.
|
|
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
|
|
This allows to keep the original pixmap in m_pixmap when resizing so it can have nice rendering when being resized and simplifies implementation
|
|
This consists in replacing the use of KIconUtils::addOverlay to custom
adapted function, based on KIconLoader::global()->drawOverlays previous
behavior.
BUG: 500428
|
|
- 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
|
|
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
|
|
This change concerns `timeRoleGroup`.
|
|
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
|
|
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
|
|
That were introduced in:
a55c467fbb31d822d89722812388425327830377
38ab14c87a945153e683657483fa4bcf44d6b0fb
|
|
|
|
|
|
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
|
|
Also use dpr for icons.
Amends cebcf8db
BUG: 497576
|
|
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
|
|
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.
|
|
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
|
|
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
|
|
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.
|
|
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.
|
|
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
|
|
**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
|
|
|