┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/search/dolphinsearchbox.cpp
AgeCommit message (Collapse)Author
2025-04-07Rewrite search integrationFelix Ernst
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 BUG: 386754 CCBUG: 435119 CCBUG: 458761 BUG: 446387 BUG: 470136 CCBUG: 471556 CCBUG: 475439 CCBUG: 477969 BUG: 480001 BUG: 483578 BUG: 488047 BUG: 488845 BUG: 500103 FIXED-IN: 25.08
2024-12-16DolphinViewContainer: make sure searchbox is initialized before setSearchPathAkseli Lahtinen
If searchBox is not initialized, it can't be updated properly with setSearchPath due to some buttons not existing. There is also just no need to update it if it's not initialized. Make sure we check for it's initialized during setting the search path. BUG:497021
2024-07-19search: url encode parameters to filenamesearch:/Méven Car
To allow to pass caracters outside of latin1 encoding.
2024-03-13Animate most of the barsFelix Ernst
When a bar is toggled visible this usually happens because the user might want to use its functionality now. However, if bars appear without animation or at a location the user is not currently looking at, they might not notice that they have appeared at all. An animation makes it more likely that the user notices the change and can then use the newly made visible component. Another reason for animations for showing or hiding of components is that it can be disorienting for users when panels or bars suddenly appear or disappear without animation. There is no visible movement then, so the user might not know what happened if they didn't concentrate or blink at that moment. The newly appearing or disappearing component might also displace other components which can make it difficult to find what one was just looking at. These bars animate now after this change: - Search panel - Filter bar - Status bar This is implemented by extracting the animation code from SelectionMode::TopBar into a new abstract base class AnimatedHeightWidget. This class is now also used in SelectionMode::BottomBar and the animating code there was removed. These bars are left in Dolphin that stay without animation: - Menu bar (Would probably need to be implemented in KXmlGui) - Tool bar (Would probably need to be implemented in KXmlGui) - Tab bar (Needs a different appraoch because it already inherits QTabBar and therefore can not inherit AnimatedHeightWidget)
2024-02-21Fix a crash in DolphinSearchBox::hideEvent()Vlad Zahorodnii
BUG: 481553
2023-11-08Port away from KMoreToolsNicolas Fella
The idea behind KMoreTools was to point the user at external tools for a given job. It provides a rather complex framework for that, including suggesting not-yet-installed tools. The UX behind that isn't great though, which somewhat deep menu hierarchies and a somewhat arbitrary list of tools. Most KDE apps have moved away from it, with only Dolphin remaining. Instead provide direct integration with relevant KDE tools (Filelight, KDiskFree, KFind)
2023-10-12DolphinView: get rid of writeStateChanged signal in setActive()Amol Godbole
The signal writeStateChanged() was not working because it is not connected to slotWriteStateChanged() slots when the active view changes. Replace the signal with direct calls to the slots. Also, do not delay openRequest signal in DolphinSearchBox::slotSearchTextChanged. It's no longer required. BUG: 440366
2023-09-04Restore the URL when DolphinSearchBox is clearedAmol Godbole
Currently, the URL navigator is not updated when the search box is cleared. This MR restores the URL, by closing and reopening the box. The call for emitting closeRequest() on pressing Esc has been replaced with emitCloseRequest(). The wait duration before starting a search has been reduced to 500ms to increase responsiveness. Also, the bugfix for BUG: 423328 is slightly incorrect and causes the search term to not be displayed when opening a saved search for the first time. As a better solution for this bug, DolphinSearchBox::setText() now updates the text only if the text has changed. BUG: 473775
2023-07-05Add explicit moc includes to sources for moc-covered headersFriedrich W. H. Kossebau
* speeds up incremental builds as changes to a header will not always need the full mocs_compilation.cpp for all the target's headers rebuild, while having a moc file sourced into a source file only adds minor extra costs, due to small own code and the used headers usually already covered by the source file, being for the same class/struct * seems to not slow down clean builds, due to empty mocs_compilation.cpp resulting in those quickly processed, while the minor extra cost of the sourced moc files does not outweigh that in summary. Measured times actually improved by some percent points. (ideally CMake would just skip empty mocs_compilation.cpp & its object file one day) * enables compiler to see all methods of a class in same compilation unit to do some sanity checks * potentially more inlining in general, due to more in the compilation unit * allows to keep using more forward declarations in the header, as with the moc code being sourced into the cpp file there definitions can be ensured and often are already for the needs of the normal class methods
2023-06-29Use ellipsis everywhere instead of three dotsTem PQD
Better for screen readers etc.
2023-02-05Add clang-format and format code as in FrameworksSerg Podtynnyi
2022-09-26Remove unused includesLaurent Montel
2022-06-15Cleanup config-dolphin.h includesAhmad Samir
2022-06-15Use cmakedefine01Ahmad Samir
This way we get a build time warning if the var isn't defined at all, e.g. a missing check_include_files() CMake call.
2022-06-15Use one config-dolphin.h.cmake configuration fileAhmad Samir
2022-05-13Drop KNS3 prefix for KMoreTools includesAlexander Lohnau
In KF6 KMoreTools should become it's own library and thus the KNS3 prefix should get removed. Considering that the classes are not in any namespace, having a namespaced include is not needed and only causes noise.
2022-05-06SearchBox: Add topMargin to balance the spacingIsmael Asensio
2022-01-09Port back to KFilePlacesViewKai Uwe Broulik
This removes the custom-view engine version of the places panel and replaces it with the upstream `KFilePlacesView` from KIO.
2020-12-03DolphinView: set the parent of layout in the ctorAhmad Samir
This silences a runtime warning: QLayout: Attempting to add QLayout "" to DolphinView "", which already has a layout Remove redudant setLayout() calls, passing a parent widget to the Q*BoxLayout ctor sets that layout as the top-level layout for that widget.
2020-10-23Compile with QT_NO_KEYWORDSAlexander Lohnau
2020-08-25Output of licensedigger + manual cleanup afterwards.Elvis Angelaccio
Unfortunately licensedigger does not strip the trailing * characters. While at it, use a common style for all source files.
2020-07-05[search] Do not update text input when it has focusIsmael Asensio
When the user is entering a search term, a delayed search will be emmited after a few seconds. This means updating the search URL, which in turn gets parsed and reflected back on the search input. To avoid interrupting the user input flow and unexpectedly move the cursor to the end, let's update the input search box only when it doesn't have the focus. It's still updated on other interactions such as changing the search options or clicking a saved search on the places panel. BUG: 423328 FIXED-IN: 20.08
2020-06-22Expand DolphinQuery to support different Url schemesIsmael Asensio
2020-05-18Move search and filter bar close buttons to the rightNate Graham
Summary: Close buttons for windows, tabs, and pretty much everything else in KDE are on the right, not the left. This patch makes Dolphin's search and filter bars follow that. BUG: 421372 FIXED-IN: 20.08.0 Test Plan: {F8314176} Reviewers: abetts, #dolphin, #vdg, elvisangelaccio, GB_2 Reviewed By: #dolphin, #vdg, elvisangelaccio, GB_2 Subscribers: kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D29693
2020-05-03filenamesearch:/ define a title for the queryMéven Car
Summary: CCBUG: 420354 Reviewers: ngraham, elvisangelaccio, #dolphin, #frameworks, iasensio Reviewed By: elvisangelaccio, #dolphin, iasensio Subscribers: iasensio, kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D29198
2020-04-27prevent a QFileInfo warningRené Bertin
DolphinSearchBox::init() can generate a terminal warning depending on the user's search history: QFileInfo::absolutePath: Constructed with empty filename The warning can seem to appear randomly if you don't use the search feature often, because of its dependency on previous search activity. Prevent this warning by adding a simple check if the current m_searchPath is valid or not. This check has no effect on the value returned by DolphinSearchBox::isIndexingEnabled() and is in line with the fact that m_searchPath == QUrl() indicates that no search path has been set. Differential Revision: https://phabricator.kde.org/D29194
2020-04-18Move from the searchbox to the results with the down arrow keyShlomi Fish
Summary: Move from the searchbox to the search results listbox/view using the down arrow key in addition to the existing methods using the tab key, return key, or the mouse. Test Plan: use ctrl+f to search in a directory tree, press down arrow key to go to the results Reviewers: ngraham, #dolphin Reviewed By: ngraham, #dolphin Subscribers: meven, elvisangelaccio, ngraham, iasensio, kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D26362
2019-12-29Clean-up DolphinFacetsWidgetIsmael Asensio
Summary: Small refactor patch to clean-up some logic on setter and getter: - Search terms are previously splitted and set separately, so no need for extra splitting and `foreach` loop - Return search terms on a `QStringList` rather than join first Depends on: D26029 Test Plan: No behavior changes Reviewers: #dolphin, elvisangelaccio Reviewed By: #dolphin, elvisangelaccio Subscribers: kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D26150
2019-12-26Rename methods on DolphinFacetsWidgetIsmael Asensio
Summary: Small refactor patch to rename method names, from `ratingTerm` to `searchTerm`, since its scope has grown bigger. Test Plan: No behavior changes Reviewers: #dolphin, elvisangelaccio Reviewed By: #dolphin, elvisangelaccio Subscribers: kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D26029
2019-12-21fix(search): Correctly parse filename and/or content searchIsmael Asensio
Summary: Currently, the search url parsing does not detect if the search is based on Content or Filename, and it just keeps the last selection which can be inconsistent with the actual search. This patch add such detection, and since an advanced user can combine filename and content search (using the keyword `filename:`), now the parsing detects both items and handles the four possible cases: | Content | Filename | Search text | Search type | |---|---|------------------------|------------------| | T | T | abc filename:"xyz" | Content | | T | F | abc | Content | | F | T | xyz | Filename | | F | F | | do not set | Depends on: D25260 Test Plan: `bin/dolphinquerytest`: Added new test cases for searches with content text and/or filename Reviewers: elvisangelaccio, bruns, #dolphin Reviewed By: elvisangelaccio, #dolphin Subscribers: kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D25416
2019-12-09Fix build with Qt 5.14 RCAntonio Rojas
Add needed Qt includes that are no longer pulled transitively. BUG: 414492 Differential Revision: https://phabricator.kde.org/D25783
2019-11-13refactor(search): De-couple baloo URL parsing logic from UIIsmael Asensio
Summary: Extracts the logic that parses `baloosearch:` urls into a new model class. The parser logic itself is kept as is. The search box UI is later updated using the model fields. This refactor has been proposed by @bruns in the review of D24422, as it largely simplifies the unit tests and further expansion/improvements. Test Plan: No behavior changes. Test case is added in the follow-up revision: D25258 Reviewers: #dolphin, elvisangelaccio, bruns Reviewed By: #dolphin, elvisangelaccio, bruns Subscribers: ngraham, bruns, kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D25257
2019-11-09Remove unnecessary semicolons after Q_UNUSEDElvis Angelaccio
GIT_SILENT
2019-11-07Make the search box more compactIsmael Asensio
Summary: Reduce the spacing between widgets and remove the content margins on the extended search options to have a more compact and space-saving layout. Currently, some widgets are not even aligned. This will be even more important if we remove the toggle button for 'More Options'. CCBUG: 386754 Test Plan: BEFORE: {F7681182} AFTER: {F7681184} Reviewers: elvisangelaccio, ngraham, #dolphin, #vdg Reviewed By: elvisangelaccio, ngraham, #dolphin, #vdg Subscribers: kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D25028
2019-11-03Get rid of search "More Options" toggle buttonIsmael Asensio
Summary: With the new compact search filters (type/date/rating) it makes sense to show these options whenever available, and save some horizontal space on the main bar (specially for verbose languages). These options will be hidden nevertheless if the search is non-indexed or Baloo is disabled. For some nicer aesthetics D25029 should be also applied. CCBUG: 386754 Test Plan: Current: {F7681182} After: {F7687380} Along with D25029: {F7687385} Reviewers: elvisangelaccio, ngraham, #dolphin, #vdg Reviewed By: ngraham, #vdg Subscribers: kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D25057
2019-10-20[dolphin/search] Reset search options when neededIsmael Asensio
Summary: Adds a method to reset the options in `facetsWidget` in two cases: when disabled and before parsing a new search URL. Otherwise, controls for a parameter (ex. `rating`) which are not found in the new URL would stay on the old positions, instead of the default "any". See D24422 Test Plan: Controls on `facetsWidget` go back to the default in such two cases. Reviewers: #dolphin, elvisangelaccio, meven, ngraham Reviewed By: ngraham Subscribers: kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D24450
2019-10-20[dolphin/search] Fix search behavior when selecting "Your Files"Ismael Asensio
Summary: Fix the search box forgetting the location where the user was previously searching into. To do a search on "All Files" instead of setting the `m_searchPath` to `$HOME`, it checks the button state, so the "From Here" location is not lost. As an added benefit, selecting "Your Files" when in a non-indexed folder will use the baloo search instead of a fully non-indexed search from $HOME. This issue is the last remaining one of the series started with D24422, with the purpose of fixing the searchbox parsing and update. Test Plan: - Toggle between "From Here/Your Files" and navigate between locations - The search box remembers the location and keeps a coherent state {F7575402} Reviewers: #dolphin, elvisangelaccio Subscribers: kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D24577
2019-10-13Hide search extra options when not availableIsmael Asensio
Summary: Hide the search extra options when they are not available, because the current location is not indexed or Baloo is not enabled. The button is disabled and shows a tooltip to provide feedback of why it's not available. Depends on D24478 {F7531893} CCBUG: 396898 FEATURE: 318580 FEATURE: 408680 FIXED-IN: 19.11.80 Test Plan: - `Ctrl-F` on a non-indexed location - `balooctl disable` and `Ctrl-F` on an indexed location On both cases the extra options are not shown, the button is disabled and the reason is shown in the tooltip The user selection is remembered between indexed locations. Reviewers: #dolphin, elvisangelaccio, meven, ngraham Reviewed By: meven Subscribers: kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D24446
2019-10-08[dolphin/search] Add method isIndexEnabled()Ismael Asensio
Summary: Extracts the logic for checking if the current path is indexed to its own method. Test Plan: No behavior changes Reviewers: elvisangelaccio, ngraham, meven Reviewed By: ngraham, meven Subscribers: meven, kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D24478
2019-10-07[dolphin/search] Avoid unnecesary reloads on setSearchPathIsmael Asensio
Summary: Check in `setSearchPath()` if the `url` passed is already the `searchPath` This was causing an effect where reloading the same search URL results on buttons `From Here/Everywhere` toggling. See D24422 Test Plan: On your home folder press `Ctrl-F` several times Buttons `From Here/Everywhere` should now not toggle each time Reviewers: #dolphin, elvisangelaccio, meven, ngraham Reviewed By: #dolphin, ngraham Subscribers: kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D24449
2019-09-08GIT_SILENT: minor qstring optimizationLaurent Montel
2019-04-22Use placeholder for search actionCarl Schwan
Summary: See https://hig.kde.org/style/writing/placeholder.html Screenshot: Old: {F6691712} New: {F6698685} Test Plan: Compile and run Reviewers: #dolphin, #vdg, ngraham, elvisangelaccio Reviewed By: #dolphin, #vdg, ngraham Subscribers: GB_2, kde-doc-english, elvisangelaccio, ngraham, yurchor, kfm-devel Tags: #dolphin, #documentation Maniphest Tasks: T10258 Differential Revision: https://phabricator.kde.org/D19770
2019-04-09Make buttons in seach bar nicer (icon, tooltip, autoselect)Stefan Brüns
Summary: The "Everywhere" button actually selects the home directory, so use an appropriate label ("Your files") and add a "user-home" icon. Pre-select the right button when entering search, depending on the location where the "Find ..." action was triggered. Add tooltips for both buttons, stating where to look for files. Most importantly, this includes the full path for "From here". Canonicalize the path correctly (always strip trailing slash), otherwise QUrl::fileName() will be an empty string, resulting in "From Here (/)" Do not hide the buttons in case the url is non-local, as it is confusing: 1. The state depends on the previous search. When the user hits "Find" when browsing e.g an SMB share, the search was probably in the home dir. 2. The current search location was hidden 3. The user may want to do a local search, give the option to do so. Reviewers: #dolphin, ngraham, elvisangelaccio Reviewed By: #dolphin, ngraham, elvisangelaccio Subscribers: loh.tar, meven, elvisangelaccio, kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D20357
2019-02-27remove deprecated methodsLaurent Montel
2018-06-13Fix loop of FocusIn eventsElvis Angelaccio
Summary: Commit 43da84eefc7d introduced the risk of entering an endless loop of `FocusIn`/`FocusOut` events sent to two DolphinSearchBox instances when opening a second tab (see D11871). This happens because we deactivate the first tab when we open a new one, but since the `setActive(true)` is delayed with a QTimer, both the old tab and the new one become active and receive their own `FocusIn` event (which starts the loop of focus in/out events). To prevent this issue, we schedule the searchbox activation only if the searchbox is not already active. Test Plan: - Search something in dolphin - Open a new tab after the search ends - Check that dolphin does not eat the CPU Reviewers: #dolphin, anthonyfieroni Subscribers: kfm-devel Tags: #dolphin Differential Revision: https://phabricator.kde.org/D13152
2018-03-04Remove unused #includeRoman Inflianskas
Summary: I used CLion inspection to hunt all unused #include Reviewers: #dolphin, elvisangelaccio, markg Reviewed By: #dolphin, elvisangelaccio, markg Subscribers: bcooksley, markg, elvisangelaccio, #dolphin Differential Revision: https://phabricator.kde.org/D10985
2018-03-03Remove unused #includeRoman Inflianskas
Summary: I used CLion inspection to hunt all unused #include Reviewers: #dolphin, elvisangelaccio, markg Reviewed By: #dolphin, elvisangelaccio, markg Subscribers: markg, elvisangelaccio, #dolphin Differential Revision: https://phabricator.kde.org/D10985
2017-12-14Use Kio::KPlacesModel as source model for PlacesItemModelRenato Araujo Oliveira Filho
Summary: Use Kio::KPlacesModel as source model for PlacesItemModel avoiding duplicated code. Depends on D8862 Depends on D8332 Depends on D8434 Depends on D8348 Depends on D8630 Test Plan: Unit test created Reviewers: elvisangelaccio, emmanuelp, mlaurent, mwolff Reviewed By: elvisangelaccio, mlaurent, mwolff Subscribers: mwolff, mlaurent, anthonyfieroni, nicolasfella, ngraham, #dolphin Differential Revision: https://phabricator.kde.org/D8855
2017-11-21Modernize: Use nullptr everywhereKevin Funk
2017-11-01Make Saved Search feature discoverableNathaniel Graham
Summary: FEATURE: 269332 Make Dolphin's Saved Search feature discoverable by adding a button inside the search field. The button only becomes enabled when there is a valid search term. When pushed, it saves the search to the Places panel, providing a visible-by-default way to do this to complement the existing implementation that is only visible in the context menu. Also harmonized the label text so that it's consistent no matter how you create a saved search (button or context menu) Test Plan: Tested in KDE Neon. Works great: {F5449508} Reviewers: #dolphin, broulik, dfaure, markg, emateli, elvisangelaccio Reviewed By: #dolphin, markg, emateli, elvisangelaccio Subscribers: anthonyfieroni, markg, emateli, elvisangelaccio, cfeck, #dolphin Tags: #dolphin Differential Revision: https://phabricator.kde.org/D8454