René Bertin [Mon, 27 Apr 2020 08:32:34 +0000 (10:32 +0200)]
prevent a QFileInfo warning
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.
Nate Graham [Fri, 19 Jul 2019 17:52:12 +0000 (11:52 -0600)]
Add an option to show tabs from last time when Dolphin starts
Summary:
All modern web browsers offer a function to show tabs from last time when a browser starts, and many apps today
restore their prior state when they're launched. This patch implements thatfunctionality as an option and turns it on by default.
The settings window is accordingly adjusted to be clear about what applies when:
Test Plan:
With the new setting turned off:
- No behavioral changes at all
With the new setting turned on:
- When launched from the GUI or CLI without any URLs, dolphin restores session
- When rebooting with Dolphin open, it restores session normally after the system comes back (i.e. no behavioral change here)
- When launched with URLs, Dolphin window is opened showing those URLs instead of restoring session
- When Dolphin is already running and a new window is opened, that new window shows a single tab with the same URL as was visible in the previously-open Dolphin instance (i.e. no behavioral change here)
- "Open Containing folder" functionality in other apps works regardless of whether or not Dolphin is running
Alexander Lohnau [Tue, 21 Apr 2020 16:44:48 +0000 (18:44 +0200)]
Dolphin Service Installer: Run uninstall scripts, rename methods
Summary:
Now scripts starting with `uninstall` are being executed.
Addtionally the `runInstallerScriptOnce` method has been renamed, because it is used to run the install/uninstall scripts.
Same for `runInstallerScript`.
Depends on D28801
Test Plan: Compile, run tests. Try to uninstall a dolphin service which has a uninstall.sh script.
Méven Car [Tue, 21 Apr 2020 07:20:27 +0000 (09:20 +0200)]
Information Panel: Make icons as big as previews
Summary:
Make icons match the preview size.
It prevents a user that had a wide information panel,
seeing a size difference between a preview and an icon despite they can look similar (i.e folder preview).
Nate Graham [Mon, 13 Apr 2020 18:27:40 +0000 (12:27 -0600)]
Use new "Show/Hide Hidden Files" standard shortcut
Summary:
Note that we lose the F8 shortcut since the KStandardShortcut added in XXXX can only
accommodate toew default shortcuts, and I thought Ctrl+H and Alt+. were the more important
ones. Hopefully that's not too high a price to pay.
Depends on D28802
Test Plan:
- Apply D28802 to kconfig
- Apply this patch to Dolphin, compile, and launch Dolphin
- Hit Ctrl+H or Alt+. and see that hidden files are shown or hidden as approproiate
Shlomi Fish [Sat, 18 Apr 2020 16:30:02 +0000 (10:30 -0600)]
Move from the searchbox to the results with the down arrow key
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
David Faure [Mon, 13 Apr 2020 22:11:16 +0000 (00:11 +0200)]
DolphinPart: port dolphin's last use of KRun::run to CommandLauncherJob.
Summary:
I chose CommandLauncherJob rather than ApplicationLauncherJob
because that would require either looking up org.kde.kfind.desktop
(with a risk of failure) or duplicating the icon name...
Test Plan:
commented out the if() block of the slot, to make sure we end
up launching kfind with this code. Then konqueror /, and Ctrl+F.
Alexander Lohnau [Mon, 13 Apr 2020 16:03:51 +0000 (18:03 +0200)]
Dolphin Service Menu installer cleanup
Summary:
This patch contains some smaller formatting/coding style changes
to avoid unrelated changes in other patches.
- Use {} instead of QStringList{} consistently
- Use parehthesese in `UncompressCommand({})` consistently
- Use `QStringList name = {}` instead of `auto name = QStringList{}`
- Add one qAsConst, remove qAsConst if value is already const
Alexander Lohnau [Mon, 13 Apr 2020 13:29:50 +0000 (15:29 +0200)]
Dolphin Services: Launch Deb/Rpm archives with QDesktopServices
Summary:
When you are inside the services store and you choose to install a deb/rpm package
they open in the default application (mostlikely a package installer utility like discover).
PS: I have written some ideas/questions, maybe you can comment on them :-) ?
Test Plan:
Tests still pass, try out what was described in the summary.
A product which has a deb/rpm package is for example: `Jetbrains Dolphin Plugin`
QCollator (especially with Qt 5.14 and ICU 65.1) is very unhappy with
threads.
To avoid having to lock and unlock the mutex everywhere (and ensure it
is unlocked before calling other things that might lock it, etc.), we do
it as locally as possible. Even if for some reason Qt and ICU make
QCollator threadsafe in the future locking here should have minimal
impact.
Sync terminal with KIOFuse mount when browing remote directories
Summary:
Adds the capability to sync the terminal with a KIOFuse mount if the URL is remote.
Partly based on the existence of another DBus currenly in review:
https://invent.kde.org/kde/kio-fuse/-/merge_requests/21
Syncing works in both "directions". Changing the URL to a remote URLin the
DolphinView will change the URL in the terminal to the KIOFuse local path equivalent.
Conversely changing the URL in the terminal to one that happens to be in a KIOFuse
mount will change the URL in the DolphinView to the remote URL equivalent.
Test Plan:
Manual testing (see video in comments).
1. Checking that changing directory in DolphinView from remote/local to local doesn't
cause any regressions.
2. Checking that changing directory in terminal from local to local (but not in
KIOFUse mount) doesn't cause any regressions.
3. Checking that changing directory in DolphinView from remote/local to remote
correctly changes URL in terminal to KIOFuse equivalent.
4. Checking that changing directory in terminal from local to KIOFuse path
correctly changes the URL in the DolphinView to the remote equivalent.
5. Checking the KIOFuse not being installed doesn't cause any regressions.
6. Changing directories very quickly does not cause any slowdown.
Nate Graham [Mon, 23 Mar 2020 19:42:48 +0000 (13:42 -0600)]
Use same logic for "no extension" case with Duplicate feature
Summary:
In the "no extension" case, we weren't separating out the path and the original filename,
breaking the feature for languages where the word "copy" would be at the beginning of the
filename, not after it (e.g. "copia de foo" in Spanish, and similar in other romance
languages). This patch fixes that by separating the original path and filename in the no
extension case as is done for the other case, which should solve the issue.
BUG: 419070
FIXED-IN: 20.04.0
Test Plan:
No changes in English; should fix the issue in Spanish once new translations are done
(see https://bugs.kde.org/show_bug.cgi?id=419070 for details)
Tranter Madi [Sat, 28 Mar 2020 03:28:42 +0000 (10:28 +0700)]
Set a better defaultDropAction for dragging
Summary: Because we use KIO::DropJob to determine the dropAction, so changing this one does not change anything else except the default cursor from the copy icon to the closed-hand one.
Test Plan: Drag files without holding any modifier key and see the cursor.
Elvis Angelaccio [Tue, 24 Dec 2019 17:28:26 +0000 (18:28 +0100)]
Exclude daemonized processes from Dolphin::attachToExistingInstance()
Summary:
`dolphin --daemon` does not have the `/dolphin/Dolphin_1` dbus path,
because it doesn't have any DolphinMainWindow.
Instead of working around this issue (as we did in D21666 and D25510),
just exclude these processes from the list of dbus instances checked by
`Dolphin::attachToExistingInstance()`.
Nathaniel Graham [Fri, 20 Dec 2019 17:07:25 +0000 (10:07 -0700)]
Add Duplicate feature
Summary: Adds a Duplicate feature to Dolphin, showing up as a menu item in the File menu that appears when one or more items are selected and the directory is writable. Duplicated items receive the names of the original files with " copy" appended before the file extension, if any.
- Try to duplicate when nothing is selected: **PASS**: menu item is grayed out
- Try to duplicate anything on a read-only local volume: **PASS**: menu item is grayed out
- Try to duplicate anything on a read-only samba share: **PASS**: menu item is grayed out
- Duplicate single local file on R/W volume: **PASS**: item is duplicated and named correctly
- Duplicate multiple local files on R/W volume: **PASS**: 3 items are duplicated, named correctly, and selected
- Duplicate single local directory on R/W volume: **PASS**: item is duplicated and named correctly, but a rename operation is not initiated
- Duplicate multiple local directories on R/W volume: **PASS**: 3 items are duplicated, named correctly, and selected
- Duplicate single file on R/W samba share: **PASS**: item is duplicated and correctly
- Duplicate multiple files on R/W samba share: **PASS**: 3 items are duplicated, named correctly, and selected
- Duplicate single directory on R/W samba share: **PASS**: item is duplicated and named correctly
- Duplicate multiple directory on R/W samba share: **PASS**: 3 items are duplicated, named correctly, and selected
- Try to undo a successful duplication: **PASS**: operation is undone
This is my first attempt at a big change like this and I'm sure it's full of issues. I will accept any and all suggestions for improvement. :)
Nathaniel Graham [Fri, 20 Dec 2019 17:07:25 +0000 (10:07 -0700)]
Add Duplicate feature
Summary: Adds a Duplicate feature to Dolphin, showing up as a menu item in the File menu that appears when one or more items are selected and the directory is writable. Duplicated items receive the names of the original files with " copy" appended before the file extension, if any.
- Try to duplicate when nothing is selected: **PASS**: menu item is grayed out
- Try to duplicate anything on a read-only local volume: **PASS**: menu item is grayed out
- Try to duplicate anything on a read-only samba share: **PASS**: menu item is grayed out
- Duplicate single local file on R/W volume: **PASS**: item is duplicated and named correctly
- Duplicate multiple local files on R/W volume: **PASS**: 3 items are duplicated, named correctly, and selected
- Duplicate single local directory on R/W volume: **PASS**: item is duplicated and named correctly, but a rename operation is not initiated
- Duplicate multiple local directories on R/W volume: **PASS**: 3 items are duplicated, named correctly, and selected
- Duplicate single file on R/W samba share: **PASS**: item is duplicated and correctly
- Duplicate multiple files on R/W samba share: **PASS**: 3 items are duplicated, named correctly, and selected
- Duplicate single directory on R/W samba share: **PASS**: item is duplicated and named correctly
- Duplicate multiple directory on R/W samba share: **PASS**: 3 items are duplicated, named correctly, and selected
- Try to undo a successful duplication: **PASS**: operation is undone
This is my first attempt at a big change like this and I'm sure it's full of issues. I will accept any and all suggestions for improvement. :)
Fix files not being highlighted if directory of file is already open
Summary:
In DolphinTabWidget::openFiles it assumes openDirectories will open new tabs, so it
only marks the URL selection for the newly opened tabs. This assumption is incorrect
as Dolphin might reuse tabs when the folder is already open.
Even then, markUrlsAsSelected does nothing when the folder is already opened.
The selection seems to only be used when the folder finishes loading, calls made after
that only change a variable without updating the actual selection.
A call to DolphinView::updateViewState() is required to restore the intended behaviour, so long as DolphinView::clearSelection() has been called on the relevant tab, otherwise updateViewState() is a no-op.
BUG: 417230
FIXED-IN: 19.12.3
Test Plan:
1. In any application that has an "open containing folder" select that option
2. and then do the same for another file in the same folder
Fixes multiple KVersionControlPlugin::fileName() calls on entering or updating directory.
Summary:
BUG: 415698
FIXED-IN: 20.04
On each VCS plugin creation corresponding file name is saved (cached) so when we search which VCS plugin is appropriate for current directory we don't need to call KVersionControlPlugin::fileName() again.
Nate Graham [Sun, 9 Feb 2020 15:58:10 +0000 (08:58 -0700)]
Restore former position of "Create New" menu item in viewport context menu
Summary:
I've seem various complaints from users about the fact that the {nav Create New...} menu
item in the viewport context menu is now below {nav Open With} item. All the other
changes to menus seem to have been well-received but this one has garnered criticism.
Looking through D23757 and D11884, I can't actually see that this was intentional, so
it might even be a bug.
Either way, this patch restores the old position of the {nav Create New} menu items at
the top of the Viewport context menu.
Ilya Bizyaev [Tue, 11 Feb 2020 11:36:19 +0000 (14:36 +0300)]
Swap "Open in New Window" and "Open in New Tab" in context menus
Summary:
Since Dolphin's default behaviour became opening in new tabs rather than in new windows
(a very positive change, in my opinion), I always find myself accidentally opening folders
in new windows from the context menu. This is because in most browsers with tab workflow
(e.g. Firefox, Chromium, Falkon) the top context menu action is opening in a new tab, and
my muscle memory plays a bad trick :) I'm aware of middle-clicking, but I find it
inconvenient with my touchpad.
I suspect I'm probably not alone in that, so I think it makes sense to swap these actions
in Dolphin to match widely used apps.
Test Plan:
Open Dolphin, right click folders in the main view and in the Places panel, ensure the
actions are indeed swapped
George Vogiatzis [Tue, 28 Jan 2020 15:50:06 +0000 (08:50 -0700)]
Add natural sorting and case-insensitive sorting for all role-types
Summary:
Add natural sorting and case-insensitive sorting, for all role-types
that benefit from.
BUG: 406296
FIXED-IN: 19.12.2
Test Plan:
Sort by any role type specified in `isRoleValueNatural()`
Before: Sorting is always case sensitive
After: Sorting according to 'Sorting mode' in configuration.
Fixes multiple VCS plugin calls on single directory update.
Summary:
Fixes multiple VCS plugin beginRetrival()/endRetrival()/itemVersion() calls on single directory update.
When VCS pluging finished gathering directory information VersionControlObserver::slotThreadFinished() calls KFileItemModel::setData() on each entry with appropriate item VCS information.
This in turn emits KFileItemModel::itemsChanged() which is connected with VersionControlObserver::delayedDirectoryVerification() which is starting to gather VCS directory information again.
This commits breaks the vicious circle.
Ismael Asensio [Wed, 8 Jan 2020 23:39:28 +0000 (00:39 +0100)]
(search) Fix searching tags with spaces
Summary:
Tags containing blank spaces were not handled properly in the search widget.
Now we enclose them in quotes and strip the quotes before setting them to the widget.
Nate Graham [Sat, 11 Jan 2020 19:52:46 +0000 (12:52 -0700)]
Use more conventional "Add to Places" text for that action
Summary:
I originally implemented this to show "Add <current folder> to Places" to make the menu
item more clear when invoked from the file menu or the viewport context menu because I
thought it wasn't totally clear that the action would be referring to the folder for the
visible view.
However I think in retrospect that this was a mistake. No other items in the file menu
or the viewport context menu name the current folder like this, so clearly there wasn't
a problem. And then the item's text doesn't match the text for other items.
Thie patch removes that behavior and makes the name match the style of all the other menu
item text.
Ismael Asensio [Sun, 22 Dec 2019 16:46:48 +0000 (17:46 +0100)]
Get rid of -Wdeprecated-copy warning
Summary:
Remove the explicit copy constructor of `KItemListStyleOption`, since it does not
add any logic to what the implicit copy constructor does, but triggers a compiler
warning if we don't overload `operator=` too.
Test Plan:
Compiles without `-Wdeprecated-copy` warning
No behavior changes
2. Start dolphin, navigate to test2/subdir, then in terminal:
$ echo test > test2/subdir/test
Without the patch, test2/subdir/test won't be shown automatically, only after reload (F5).
With the patch applied, test2/subdir/test will be shown automatically.
3. Restart dolphin, navigate to test2/subdir, then in terminal:
$ echo test >> test2/subdir/test
Without the patch, the increased size of test2/subdir/test won't be shown automatically,
only after reload (F5). With the patch applied, it will be shown automatically.
4. Restart dolphin, navigate to test2/subdir, then in terminal:
$ rm test2/subdir/test
Without the patch, test2/subdir/test stays visible, will only disappear after reload (F5).
With the patch applied, it will disappear automatically.
Summary:
Instantly hide tooltip shown over an element when filter bar changes.
Currently the tooltip stays even when filtering causes the file under the mouse to change or disappears entirely.
The tooltip also continues to cover much of the window - hiding the new filtering results from user.
This is an enhancement to D22512
Test Plan:
1. place the mouse pointer over a file to show the tooltip
2. press "/" to activate filter bar
3. type in filter phrase
Ismael Asensio [Sun, 22 Dec 2019 15:59:54 +0000 (16:59 +0100)]
(search) Keep menu open when selecting tags
Summary:
Keeps the `Tags` menu open while selecting and deselecting tags in the
search panel, saving many mouse clicks for multiple tags.
It cannot be done natively on `QMenu` (https://bugreports.qt.io/browse/QTBUG-6635)
but it is a one-liner and I haven't seen any bad behavior so far.
Ismael Asensio [Sun, 15 Dec 2019 22:15:46 +0000 (23:15 +0100)]
Clean-up DolphinFacetsWidget
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