Jin Liu [Thu, 29 Feb 2024 23:13:47 +0000 (23:13 +0000)]
DragAndDropHelper::updateDropAction: use StatJob for remote URLs
When dragging onto tabs/Places from a remote URL, we don't process
the QDropEvent immediately, but start a StatJob and process the
event when it finishes.
Also, the result of the StatJob is cached for 30 seconds, to avoid
starting duplicate jobs.
Jin Liu [Tue, 20 Feb 2024 12:09:26 +0000 (20:09 +0800)]
Fix: can't drop into remote dir
KFileItem::isDir() only works when it's created from listDir(),
or from a local QUrl. For a remote QUrl, isDir always returns
false, so we can't use that in supportsDropping().
As a workaround, now supportsDropping() always returns true in
remote dirs -- we don't check if a remote dir is writable when
dropping.
Felix Ernst [Mon, 19 Feb 2024 11:32:32 +0000 (12:32 +0100)]
Resolve conflict between activateSoonAnimation and hoverSequenceAnimation
Prior to this commit, the activateSoonAnimation would not play for
folders using previews. That was because the hoverSequences of
folder previews would always take priority over the
activateSoonAnimation.
This commit prioritises the activateSoonAnimation for the quick
moments in which it is active.
Felix Ernst [Sun, 18 Feb 2024 12:15:18 +0000 (13:15 +0100)]
Add drag-open animation
This commit adds an animation for folders that makes clear that
they will open or expand soon. This is the case when the option to
open folders during drag operations is enabled and a user drags an
item on top of a folder.
The animation goes like this:
- Replace the folder's icon with the "folder-open" icon
- Go back to the folder's original icon
- Replace the folder's icon with the "folder-open" icon once more
Felix Ernst [Fri, 23 Feb 2024 09:45:53 +0000 (09:45 +0000)]
Avoid searching for the knetattach service on startup
The installed services might change while Dolphin is running, so it is
better to only search when they are actually needed instead.
The very first time such a search happens (e.g. after updating the
system), is also somewhat slow, which could slow down the very first
Dolphin startup.
This commit might also produce a very slight general startup speed
improvement. However, the measured change is within the margin of
error.
Felix Ernst [Fri, 26 Jan 2024 18:12:23 +0000 (19:12 +0100)]
Fix focus chain
Prior to this commit pressing Tab repeatedly would bring the focus to
the end of the status bar but not further.
This commit makes sure the tab focus doesn't get stuck on the invisible tab
bar by explicitly removing the DolphinTabBar from the focus chain while it
is hidden. I don't understand why pressing Tab doesn't do anything for
the invisible tab bar, but removing an invisible and currently useless
widget from the focus chain seems sensible in any case.
Improve the accessibility autotest to prevent regressions concerning this.
Felix Ernst [Tue, 30 Jan 2024 16:12:11 +0000 (17:12 +0100)]
Speed up autoSaveSession test
Normally, the session is only saved after a few seconds. The autotest
waits for that to happen. This commit reduces the time until the session
is saved to a fraction of a seconds which means that the autotest will
complete faster.
Felix Ernst [Wed, 10 Jan 2024 17:47:22 +0000 (18:47 +0100)]
Improve arrow key navigation for right-to-left languages
While using right-to-left languages most of Dolphin is mirrored.
However, the logic of what happens when the arrow keys are pressed to
move between items in the main view was never adapted to account for
that. Basically nothing works as expected because of this. It's more
like dealing with a psychopath who misinterprets every command you give:
Left is right, right is left, up is most of the time right but sometimes
not, down is most the time left but sometimes not.
This commit fixes and adapts the logic if a right-to-left layout is used.
This fully fixes icon view mode and improves compact view mode, though
compact view mode still has more issues which aren't addressed here.
This work for the benefit of the minority that use right-to-left
languages both in Europe and the world is sponsored by NLnet and the
European Commission which I think is beautfiul.
Felix Ernst [Mon, 22 Jan 2024 17:33:09 +0000 (18:33 +0100)]
Slightly refactor count resorting
The bug fix 8f043b2958477d3fe2ef094b7e42f792f4cf0b02 introduced a
secondary code path to trigger a resort of items. However, the previous
way to trigger it only required a small bug fix to work and gives us a
couple of optimisations for free. This commit removes the secondary code
path and fixes the primary one.
Information relevant for sorting might change repeatedly. Prior to this
commit here we would resort within 50 ms of sorting being requested. If a
lot of resorts would be requested in a short time frame, this could lead
to the item order changing within the view up to 20 times a second which
would lead to a lot of unnecessary movement and make it impossible to
read even file names during the repeated sorting.
100 ms is half as bad in that regard. Bigger values might be even better
but it is a trade-off.
Remove popout action from toolbar when split screen is closed
It's pointless to show the popout action when splitscreen is closed,
so we'll remove it as a child of the splitscreen action whenever the
screen is not split.
Joshua Goins [Thu, 30 Nov 2023 03:14:06 +0000 (22:14 -0500)]
Use a separate menu action for split view action
Now that it's a KMenuAction, it becomes impossible to trigger the root
action when it's in a menu. To work around this, we create a new action
that mirrors the state of the original. It also takes the default
shortcut.
If you have a split view open, you can now pop the active half out into a new window by clicking the "Pop out" button in the toolbar or by activating "View > Pop out".
Stefano Crocco [Sun, 14 Jan 2024 09:36:32 +0000 (09:36 +0000)]
Never emit the fileMiddleClickActivated signal if isTabsForFilesEnabled is true
Commit d27ee07d makes it impossible for applications embedding Dolphin part (for example, Konqueror) to react to middle mouse click on a file. If I understand correctly (I'm not familiar with Dolphin code) the `fileMiddleClickActivated` signal is connected with a slot in `DolphinViewContainer`, which is only used by Dolphin itself and not by `DolphinPart`. The result is that middle clicking on a file (except archives) from a Dolphin part has no effect.
To avoid this situation, I removed the check for `!archiveProtocolIsEmpty()` in the `else if` condition. This way, if `isTabsForFilesEnabled()` is `true`, which should be true if and only if the view is inside a `DolphinPart`, the `activeTabRequested` or `tabRequested` signal will be emitted, allowing the embedding application to respond however it wants. When the view is inside the Dolphin application, instead, `isTabsForFilesEnabled()` will always be `false`, so the new behavior will be used.
Amol Godbole [Thu, 9 Nov 2023 17:05:48 +0000 (11:05 -0600)]
DolphinMainWindow: autosave session
Currently, the session is saved only when the app quits normally. Save
the session after a fixed time interval from the last state change i.e.
anytime the url is changed, or a tab is opened or closed, or the active
view is changed.
Akseli Lahtinen [Wed, 10 Jan 2024 09:22:46 +0000 (09:22 +0000)]
terminalpanel.cpp: Set m_konsolePart to nullptr during exit signal
If Dolphin terminal is open, and one types `exit` there and then closes Dolphin, Dolphin crashes due to a dangling pointer.
Konsole KPart is deleting itself when Konsole session exits, but Dolphin tracks it as a child of the Terminal Panel.
The Terminal Panel doesn't get destroyed when Konsole KPart does, and it tries to double free during children clean up.
(Thanks @sitter !)
Setting `m_konsolePart` to `nullptr` during exit signal fixes this, since there is already check in place for that in the destructor.