| Age | Commit message (Collapse) | Author |
|
Correctly find the last element in the list instead of the one after the last
Amends: 0464ea82a6850f58805bc4d6fc1df5369d83c3df
BUG: 503610
|
|
|
|
Do not end anchored selection when selection state is updated, such as
when Dolphin is started with --select "thing.txt" flag.
If we end here, and user wants to press shift to select from
current item to X items, this would cause the anchored selection
to start from the clicked item, not from the first selected item.
BUG: 503221
|
|
When using single click to select, user can double click the file to
start renaming it. If user at the same time also opens context menu,
user can delete the file while the renaming prompt is open, which causes
weirdness.
This patch makes sure we abort the double click renaming when context
menu is requested.
BUG: 503185
|
|
Now it's in the first level of the "View Settings" dropdown, no
need to be nested in the "Sort" menu.
|
|
This should replace the "View Mode" button in the toolbar by default. Its
dropdown menu contains more actions related to the view: zoom, sort by,
show additional columns, show hidden files, grouping, show file previews.
The original "view_mode" action is kept so the "Change View Mode" submenu
in the main menu (or in the hamburger menu when this button is invisible)
is unchanged.
|
|
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.
|
|
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.
BUG:500009
|
|
- 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
|
|
And avoid scanning directory that don't need it.
Stops the working thread upon model change.
|
|
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.
CCBUG: 495878
|
|
BUG: 462899
|
|
Instead of showing three buttons, which is quite visually noisy, show
only one button that is split: First button, when clicked, loops
through the view modes. Second smaller button with the down arrow
shows menu of the available view modes.
See also
https://invent.kde.org/system/dolphin/-/issues/68#toolbar-button-changes
Alternative for https://invent.kde.org/system/dolphin/-/merge_requests/893

|
|
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
|
|
|
|
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
|
|
If viewPropertiesString is empty, return a nullptr.
This will later used in the stack by the defaultProperties call.
In defaultProperties, if we can't find the global directory,
create new one with a tempfile. If tempfiles can't be created,
use default instead.
This will ensure that view settings are saved and loaded correctly
if user has separate view properties per folder.
This will also add an unit test, where we create a global directory,
modify it and make sure the changes are reflected in the unmodified
folder.
BUG:495878
|
|
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.
|
|
|
|
NO_CHANGELOG
|
|
Currently when next item is set selected, it's not set as an anchor.
This means that shift-click will not select items between the selection
and the next item, and instead behaves like ctrl-click.
This is rather inconsistent behavior.
We should set the next selected item as an anchor so that shift-click
will work: This change starts the `beginAnchoredSelection`
process after `setSelection`.
For example, if user trashes an item and the next item is selected,
shift-click would stop working.
BUG:495371
|
|
This commit brings the main view of Dolphin into a usable state
accessibility-wise. Users of screen readers should have a way better
experience while browsing files and folders and navigating along the
file system hierarchy.
This commit fixes most of the remaining already-identified
accessibility issues listed in
https://invent.kde.org/teams/accessibility/collaboration/-/issues/28,
but not all. Namely, these should now be fixed:
1. Orca should read the element type in dolphin (file, folder, device,
link to folder, link to file)
2. Orca should read complete label in icon and compact view mode,
currently it only speaks the name, but there could be additional
information like the number of elements or the file size.
3. Orca is not able to announce Selecting / Unselecting files in
Dolphin. It also never announces how many items are selected in total.
(Announcing the total selection can be done by reading out the view
element or by pressing the Tab key to get to the status bar with the
relevant information.)
4. Dolphin opens on the home directory, but Orca doesn't tell you so.
Consider enclosing the area in a frame/panel which updates its
accessible name each time you modify the current path by entering or
leaving a directory.
5. I don't know what the folder presentation widget is, but it should
be presented as a grid view. Currently, we have a terrible experience
because the entire row of folders is read at once, with no indication
that we can move left and right with the arrows to go between the
elements of a row. When I found that out, however, I discovered that
when you're on the last icon of the first row and press right arrow,
you get to the first icon of the next row, but that's not announced,
instead, the whole row is announced at once
6. Orca should announce the current elements instead of "layered pane"
when the Folder / File view gets the focus in dolphin
7. Orca reads only name in Table View only of Dolphin
8. Items are sometimes confusingly announced as "collapsed" in contexts
in which there is no concept of collapsing/expanding e.g. in icon view
mode.
A lot of code was moved around and renamed. The three accessibility
classes, which all used to be in the same file, are moved into separate
files.
*Acknowledgement*
Thanks to Christian Hempfling and bgt lover for testing as well as
originally identifying a lot of the pain points being addressed here.
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.
https://kde.org/announcements/2024_ngi_openletter/
|
|
Existing settings are converted.
Works on most FS except FAT/exFAT which fallback to .directory files.
If the extended file attributes (in ADS in Windows) can't be saved, they are saved to file as before.
BUG: 322922
You can see file xattr using for instance for Unix filesystems:
getfattr -d /home/meven
|
|
the selection
On sucessful return of the rename dialog, we update
the model and the selection immediately to reflect
the new name. This is to avoid the short duration
after the rename during which the selection is lost.
Currently, after the rename dialog finishes, the selection
is briefly lost for about 1 second until the view
automatically refreshes.
This patch updates the model and selection immediately
after the dialog finishes, so the renamed file is still
selected.
BUG: 481717
|
|
Currently, the inline renaming updates the model and
the list of selected files (m_selectedUrls) immediately
after the user presses enter, but the selection in the
view is not immediately updated. This results in the
selection to be briefly lost for about 1 second until
the view automatically refreshes.
This patch updates the selection immediately after
the user presses enter, so the renamed file is still
selected.
BUG: 481717
|
|
BUG: 481561
|
|
KCoreDirLister::itemsDeleted() signal is being emitted twice for the
same url. This results in Dolphin displaying an incorrect location.
Delay changing the url instead of delaying
DolphinView::currentDirectoryRemoved() so that the check for current
directory being removed in KFileItemModel::slotItemsDeleted() occurs
correctly, while still ensuring that KCoreDirLister is not prematurely
modified.
BUG: 492277, BUG: 473377
|
|
By default.
Since recentlyused:/ fills only access time based on the DB data.
timeline:/ is also included.
CCBUG: 437382
|
|
Previous to this commit middle-clicking an archive would always open it
in a new tab. This contradicts the recent change
d27ee07de7558470ef7b497fbe3d3504ce7cad07 which made it so middle-click
would open an item in the second application that is available to open
a file.
With this commit, middle-clicking will treat the archive like a folder
only when GeneralSettings::browseThroughArchives is enabled or when
there is no second application available. Otherwise middle-click will
open the archive in the second available application.
|
|
Previous to this commit entering a folder without read access would show the non-descriptive error message "Could not enter folder". If the user actually is not allowed to view the contents of the folder, this is indeed true and this commit will preserve this message as is.
However, if an admin protocol is installed, users can actually view the contents of most folders after authorizing themselves as administrators. So this commit changes the error message in those specific circumstances to instead read "Authorization required to enter this folder." and provide a button to authorize themselves. This button is the "Act as Administrator" action.
If no admin protocol is installed, this commit has no effect.
The idea for this change came from Harald Sitter.
I receive funding for changes like this by the Next Generation Internet Initiative, which (as I understand it) will no longer provide funds for future projects like this if the current EU draft budget goes through as it is.
|
|
This reverts commit dc149ec5e52f52c514cf362603d05ba8eea506b8.
This prevents a crash. One issue identified is that the commit that
I am reverting here accesses a QDropEvent at a moment in time in
which it might have already been deleted. We cannot check if it
exists by that time because we do not control its lifetime and it
is not a QObject.
|
|
Default action is select-all.
|
|
Adjust paste to url to new KF6 signals
BUG: 476670
Signed-off-by: Anthony Fieroni <[email protected]>
|
|
|
|
This is a partial revert of
5186f09cabf0af4b0683e75b0bcde1061f84a67e. That commit tried to
simplify code, however this lead to the saving of view properties
being skipped, introducing the linked bug.
The issue is that by the time the slotSortRoleChangedFromHeader()
method is called, the model already changed its sort role.
Therefore the check if the new role is identical to the old sort
role fails and no saving would occur.
With this partial revert the header will continue to change the
sort role itself (which allows a minor optimization of not double
sorting when also changing the sort order at the same time). The
method slotSortRoleChangedFromHeader() is then only responsible
for saving that change in the ViewProperties and telling the
SortBy menu in the user interface that the sorting has changed.
BUG: 480246
|
|
Also properly shutdown thread.
|
|
This improves consistency among wording. More clarity is achieved
by avoiding technical terms or terms with multiple meanings.
Notable changes:
-Specify full settings path: "Configure Dolphin > View > General"
in Show Hidden Files whatsThis
-Mention setting to hide files with application/x-trash MIME type
in "Show Hidden Files" whatsThis
-Mention Split View mode in "Copy/Move to Other View" whatsThis
-Reword "Activate Tab" actions to "Go to Tab" (Next, Previous,
Last, numbers)
-Add "Last Tab" iconText, consistent with "Next Tab" & "Previous
Tab"
-Update Split View whatsthis to explain how to tell which view is
"in focus" visually
-Replace "pane" with "view" in split view settings text, and
clarify tooltip text
-Reword "objects" to "items" in whatsThis texts
-Reword "find bar" to "search bar" in Search button whatsThis text
|
|
UpdateItemStatesThread kept a pointer reference to m_plugin whose
lifetime was tied to VersionControlObserver parents.
On application shutdown it could happen the thread is still running when
the Observer is destroyed.
Make the plugin pointer a weak reference, allowing to stop the thread
when the plugin is gone.
BUG: 477425
|
|
folder" is off
Special folders include: search, trash, recents, timeline
Not including Downloads, although we have a custom view when "remember
for each folder" is on.
Rational: These folders really need the custom view. So even if the
user selects a global view for all "normal" folders, s/he probably
still want a custom view for special folders.
|
|
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.
|
|
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.
|
|
1. Places panel and tabbar update drag status in read-only dir
2. Don't create drop job in readonly directories
|
|
BUG: 441070
|
|
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.
|
|
A minor refactor where Qt::SingleShotConnection has been utilized.
Also, signal delay using QTimer has been replaced with a
Qt::QueuedConnection.
|
|
Since now when duplicating items we automatically generate a name for the new item, we can do the same if an item with that name already exists.
BUG: 475410
|
|
NO_CHANGELOG
|
|
|