Felix Ernst [Mon, 7 Apr 2025 21:09:00 +0000 (21:09 +0000)]
Rewrite search integration
This huge commit is a nearly complete rewrite of the Dolphin search
code. It implements most of the improved Dolphin search UI/UX as
designed and discussed in a collaborative effort by Kristen McWilliam,
Jin Liu, Andy Betts, Tagwerk, a few others and me.
See https://invent.kde.org/system/dolphin/-/issues/46.
# Notable changes
- A toggle to change the search tool is provided as most contributors
deemed that useful in
https://invent.kde.org/system/dolphin/-/merge_requests/642#note_985112.
- The default search is changed to filenamesearch for maximum
reliability.
- Removing all search parameters will take users back to the view state
prior to starting a search instead of keeping the search results open.
- The UI for choosing file types or modification dates has been made
more powerful with more granularity and more options.
- Most search parameters can be configured from a popup menu which
gives us extra space for extra clarity.
- Labels and help buttons as well as hyperlinks to settings makes sure
the user always knows why some search parameters are unavailable in
some contexts.
- Chips show important search parameters while the popup is closed.
They allow quickly removing filters.
- The titles of the search and the input field placeholder message
change to make clear whether file names or file contents are searched.
- When the user actively switches the search tool, whether content
should be searched, or whether to search everywhere, this is preserved
for the initial state of the search bar when the user opens it the next
time after restarting Dolphin.
# Architecture
- The new DolphinQuery class is independent of the UI and contains all
search parameters modifiable in Dolphin as easy setters and getters.
- DolphinQuery objects are also used to update the states of every
component in the search UI. There is now a clear separation of UI and
search configuration/DolphinQuery.
- DolphinQuery is responsible for exporting to and importing from
search URLs.
- The search UI always reflects the currently configured DolphinQuery
no matter if the user changed the UI to change the DolphinQuery or
loaded a DolphinQuery/older search URL which then is reflected in the
UI.
- I tried to simplify all classes and their interaction between each
other as much as possible.
- I added some tests
Nate Graham [Thu, 27 Mar 2025 19:29:26 +0000 (13:29 -0600)]
Move "Show in Groups" toggle action into Sort menu
This is the sort of thing a user might want to toggle temporarily, as
sometimes grouping is a helpful visualization and sometimes not.
Right now, doing that is easy when using the in-window menubar or the
global menu: View > Show in Groups. However when using the default
hamburger menu, it becomes difficult: Burger menu > More > View >
Show in Groups. It's four levels of nesting and requires precision.
This change addresses that by moving the action into the "Sort By"
menu. This improves discoverability for people using the default UI,
and makes the location of the action consistent for people using all UI
styles. It also gets the item into the view context menu, where it
currently isn't, providing another entry point for it.
Shitong Xu [Sun, 23 Mar 2025 15:02:24 +0000 (15:02 +0000)]
KFileItemListWidget: wrong selection when renamed file ends with a dot
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.
Angus McLean [Mon, 17 Mar 2025 08:14:55 +0000 (08:14 +0000)]
contextmenu: Use default terminal's icons for "Open Terminal" and "Open Terminal Here" actions
The "Open Terminal" and "Open Terminal Here" actions now use the icon of the user default terminal emulator application, instead of always using the "utilities-terminal" icon.
Akseli Lahtinen [Thu, 13 Mar 2025 12:26:40 +0000 (12:26 +0000)]
KFileItemModelRolesUpdater: reset size and count before updating folders
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.
Akseli Lahtinen [Mon, 3 Mar 2025 09:59:23 +0000 (11:59 +0200)]
DolphinNavigatorsWidgetAction: add margins to splitview navbar splitter
The splitter is rather cramped next to the navigation bars with the new
KIO navbar look. This adds slight padding to its sides, making it look
more relaxed and easier to grasp that user can move this.
Wang Yu [Mon, 3 Mar 2025 02:34:10 +0000 (10:34 +0800)]
placespanel: Use correct loop index when connecting device signals
The loop in slotRowsInserted was using the 'first' parameter instead
of the loop variable 'i', causing only the first index to be connected
multiple times.
Méven Car [Sun, 23 Feb 2025 13:04:12 +0000 (14:04 +0100)]
kstandarditemlistwidget: make overlay icons independant of preview size
This consists in replacing the use of KIconUtils::addOverlay to custom
adapted function, based on KIconLoader::global()->drawOverlays previous
behavior.
Akseli Lahtinen [Fri, 28 Feb 2025 17:43:20 +0000 (17:43 +0000)]
Fix crash when opening new tab with search
When new tab is opened and it has a search started,
it tries to set the location URL to a navigator that
is not yet necessarily assigned in memory: This is because the new tab is not active.
The locationUrl will be changed properly when tab is activated.
Akseli Lahtinen [Thu, 27 Feb 2025 10:07:33 +0000 (12:07 +0200)]
dolphinview: Add widget parameter to elided QToolTip::showText
Without this parameter the QToolTip can not always determine what
is the parent, so it will create a toplevel window in those cases.
Make sure we have dolphinview itself as a widget there, so QToolTip
and thus QtWayland can resolve what is the parent. This
avoids creating random windows when opening a tooltip.
Akseli Lahtinen [Mon, 24 Feb 2025 18:39:22 +0000 (18:39 +0000)]
Add smaller statusbar and set it as default
- 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
Yifan Zhu [Thu, 20 Feb 2025 18:35:06 +0000 (10:35 -0800)]
kitemlistkeyboardsearchmanager: smarter search start position
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
Added an dolphin overlay on top of the folder icon. The intention is to add subtle branding and personality to icon while leaving the overall shape and design untouched.
Méven Car [Fri, 7 Feb 2025 10:16:05 +0000 (11:16 +0100)]
Viewproperties: prevent loosing view settings
When they match the hardcoded internal settings, when they should be
kept as long as they don't match the currently set default
viewproperties.
Is saved in metadata the diff with the hardcoded internal defaults
still. A stable default reference allows to change defaults without
changing existing saved viewproperties.