┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2024-12-29Mirror details view mode for right-to-left languagesFelix Ernst
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.
2024-12-29Have special keyboard controls in selection modeFelix Ernst
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
2024-12-19dolphinview: Update thumbnail on filename changeAkseli Lahtinen
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
2024-12-16ViewProperties: Return nullptr if viewPropertiesString is emptyAkseli Lahtinen
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
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-12-14SVN_SILENT made messages (.desktop file) - always resolve oursl10n daemon script
In case of conflict in i18n, keep the version of the branch "ours" To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2024-12-14GIT_SILENT made messages (after extraction)l10n daemon script
2024-12-09Fix inline renaming multiple files when renaming changes sorting orderIlia Kats
Suppose we are renaming file i and the new name will be sorted after file i+1. We are now pressing ArrowDown to immediately start renaming file i+1. However, because of the sorting we would not actually end up renaming what used to be file i+1. What would happen is that editing would be started in dolphinview.cpp:2065. However, after 100 ms the timer in KFileItemModel would fire, resulting in the model emitting itemsMoved(). This would trigger doLayout() in KItemListView::slotItemsMoved(). doLayout() resizes the KItemListWidgets, wich causes the renaming to be canceled in KStandardItemListWidget::resizeEvent(). Now, we start a new renaming operation for the correct widget after the relayouting is complete.
2024-12-09GIT_SILENT made messages (after extraction)l10n daemon script
2024-12-05Adapt to Orca 47Felix Ernst
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.
2024-12-04Always focus the view after place activationFelix Ernst
This one-liner makes sure keyboard focus always moves to the active view when a place in the places panel is activated. Previously focus would remain on the places panel if the activated location was identical to the already displayed location. This added consistency is helpful because keyboard-only users will get used to be able to move from the places panel to the view by pressing the Enter key, even though this does not always work prior to this commit. This issue was identified in an accessibility scan done by HAN University of Applied Science.
2024-12-03GIT_SILENT Update Appstream for new releaseHeiko Becker
(cherry picked from commit 73b83b866eae1e095d84d611ceb6dd094a54b98f)
2024-12-02KItemListSmoothScroller: stop animation on property or targetobject changeAkseli Lahtinen
Due to changes in 15e0c2a98f480f203ce168b6fa9a2e1f2b0ed8f8 we do not automatically stop animations now on property or targetobject change, which causes warnings and timeouts. This patch makes sure we stop them if their state is Running, before modifying them. See also: https://invent.kde.org/system/dolphin/-/merge_requests/857#note_1083279
2024-12-02SVN_SILENT made messages (.desktop file) - always resolve oursl10n daemon script
In case of conflict in i18n, keep the version of the branch "ours" To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2024-12-02GIT_SILENT made messages (after extraction)l10n daemon script
2024-11-29Make "open path" and "open path in new tab" scroll to the selected itemAkseli Lahtinen
**Open Path** When user clicks on "Open Path" after searching for an item, user expects the view to show the item immediately. We wait for the KItemListSmoothScroller to be done with its animation before the scrollbar sizes are being changed. **Open Path in New Tab** When user selects "Open Path in New Tab", we open a new tab to the folder where the file is, then select and set the file current. We need to get the correct tab when opening one, so it has been added as a return value. BUG:495613
2024-11-28DolphinTabPage: Update container view url on redirectionAkseli Lahtinen
On url redirect, we should check which container url is being changed and then update it accordingly. This makes sure the tab name is updated. We also should not disconnect redirection on view activation since the redirection might be used by the other split. The disconnection is done in `setSplitViewEnabled` instead. This allows us to update the tab name every time the url changes, even inside a splitview where the split which name is changed is not active. BUG:496414
2024-11-27DolphinViewContainer: setSearchPath value only if searchBox is activeAkseli Lahtinen
Fixes a crash when searchbox is not active and tab gets renamed. I forgot to add this to merge request https://invent.kde.org/system/dolphin/-/merge_requests/864 CCBUG:496387
2024-11-27DolphinViewContainer: set searchPath on redirect, check for connected ↵Akseli Lahtinen
urlNavigator This fixes a dolphin crash if tab with a search box open gets its path changed while its not active. This patch adds a guard for the m_urlNavigatorConnected->setLocation, and makes sure the searchPath is set to the correct folder. BUG:496387
2024-11-25Switch to C++20Méven Car
2024-11-25DolphinView: fix typos in signal connectionMéven Car
NO_CHANGELOG
2024-11-21DolphinView: beginAnchoredSelection after setSelected in selectNextItemAkseli Lahtinen
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
2024-11-19Update org.kde.dolphin.appdata.xmlPaul Brown
2024-11-19Update org.kde.dolphin.appdata.xmlPaul Brown
2024-11-19natural sort: exclude extension when comparing filenamesEren Karakas
Currently natural sort compares the entire filenames (basename.extension) when sorting. This causes eg. "a 2.txt" to appear before "a.txt" when sorted by ascending. This is unintuitive since people prioritize basenames more than file extensions. Instead, change natural sort to compare by basename only and fallback to comparing extensions if basenames were equal. This change causes "a.txt" to appear before "a 2.txt" and matches how other platforms such as GNOME and Windows behave. BUG: 416025 BUG: 470538 BUG: 421869 BUG: 312027
2024-11-17Updated supportersPaul Brown
2024-11-16Added supportersPaul Brown
2024-11-15Added supporter from fundraiserPaul Brown
2024-11-13FoldersTabsSettingsPage: Remove double cast, remove unnecessary variableAkseli Lahtinen
This uses only qobject_cast here, having static_cast after it is redundant. Also remove the topLevelWidgets variable, since we can just call the method instead.
2024-11-13generalviewsettingspage: Use qobject_cast instead of static_castAkseli Lahtinen
In generalViewSettingsPage, ActiveWindow is not necessarily a mainWindow, which can cause dolphin to crash. For example when user opens folder properties and then dolphin settings, this part thinks the folder settings is mainWindow. Instead of static_cast, use qobject_cast, since it will return nullptr if the DolphinMainWindow is not found. BUG:492741
2024-11-12Avoid flickering of space info on startupFelix Ernst
Prior to this commit, when Dolphin was opening in a directory for which the free space information cannot be retrieved, the free space info in the status bar would still briefly be visible before hiding for good. This commit avoids this flickering by keeping the space info hidden until space info has been successfully retrieved. There is no use showing an empty/wrong space info before that anyway. I assume the error in the previous code was that it assumed that one could prevent a widget from being shown by overriding QWidget::showEvent(). This does not work because this method is only called to notify QWidgets of their state change. This commit was primarily written because the brief showing of an empty space info was messing with automatic tests.
2024-11-12Test that each object has distinguishable accessible infoFelix Ernst
This commit extends the dolphinmainwindowtest for the accessible tree to test that each object a user can reach through the Tab key or the Shift+Tab key combination is distinguishable by its accessible info from the previous object. Objects are considered distinguishable if they have different accessible names or their first ancestor with an accessible name is different.
2024-11-11SVN_SILENT made messages (.desktop file) - always resolve oursl10n daemon script
In case of conflict in i18n, keep the version of the branch "ours" To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2024-11-06Skip splitter in Tab orderFelix Ernst
When moving through Dolphin by repeatedly pressing the Tab key, there is one seemingly invisible object that catches keyboard focus. On a default toolbar it receives keyboard focus between the "Details View Mode" button and the first button of the location bar. That object is the splitter of the location bar itself, which never requires manipulation by keyboard. This commit skips this object by setting its focusProxy to the primaryUrlNavigator() instead.
2024-11-02when splitting view, use selected folder as urlMéven Car
BUG: 483937
2024-10-31Make Escape move focus from location bar to viewFelix Ernst
Pressing Escape on the location bar while in breadcrumb mode has no effect at all. This commit changes this to instead move the focus to the active view. This is more logical because a user pressing escape while having focus on the location bar is no longer interested in interacting and changing the location in the location bar. They most likely want to act on the current location instead.
2024-10-31Have "Replace Location" toggle focus of the viewFelix Ernst
The "Replace Location" action moves focus to the location bar and selects the full path there so it can easily be replaced with a different path. When the full path is already selected, triggering "Replace Location" will toggle the editable state of the location bar. This commit makes it, that this also moves the focus to the view. This way, pressing Ctrl+L multiple times will switch back and forth between focusing and selecting the location bar path and focusing the view. This seems more sensible than only partially resetting the state when the "Replace Location" keyboard shortcut is pressed twice.
2024-10-31refactor: replace QString() with QStringLiteral() for better performanceZhangzhi Hu
2024-10-31GIT_SILENT Update Appstream for new releaseHeiko Becker
(cherry picked from commit 0fb381a7edef8b3c60f1c01fb7cc9d9335556fb4)
2024-10-29SVN_SILENT made messages (.desktop file) - always resolve oursl10n daemon script
In case of conflict in i18n, keep the version of the branch "ours" To resolve a particular conflict, "git checkout --ours path/to/file.desktop"
2024-10-29GIT_SILENT made messages (after extraction)l10n daemon script
2024-10-28Overhaul main view accessibilityFelix Ernst
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/
2024-10-27ViewProperties: Store view properties in extended file attributesMéven Car
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
2024-10-19Add a sort by duration option for videosSomsubhra Bairi
BUG: 482508 Signed-off-by: Somsubhra Bairi <[email protected]>
2024-10-17Add test to avoid accidental divergence of desktop and phone uiFelix Ernst
The dolphinui.rc and dolphinuiforphones.rc file describe parts of the desktop and phone user interfaces for Dolphin. They are meant to be different in specific ways, but identical in many others. This test makes sure that the two ui files stay mostly identical by requiring any differences between them need to be explicitly stated/registered as an exception in the test. This way no accidental divergence of user interfaces can happen.
2024-10-17Move settings category switcher to the top on mobileFelix Ernst
There is not enough horizontal space to show the full Dolphin settings window on the average phone. This commit saves some horizontal space by moving the category switcher in Dolphin settings from being a list on the left to being tabs on the top.
2024-10-17Disable inline renaming for phones by defaultFelix Ernst
It currently does not seem to work together with virtual keyboards.
2024-10-17Add phone UIFelix Ernst
Previous to this commit launching Dolphin on phones (e.g. those running Plasma Mobile) would show Dolphin with its default user interface optimised for desktop usage. This commit changes this so instead a phone form factor optimised user interface is used. The differences to the default UI configuration are: -Toolbar at bottom -Icon-only toolbar -Different actions on the toolbar -Places panel hidden -Location bar at the top with a button to show places -Zoom slider hidden (pinch gestures to zoom still work) Through these changes Dolphin actually has a good user experience on phones by default. All the features were already there. Especially Steffen Hartleib's work to trigger selection mode on long press leads to great UX when dealing with multiple files. Still, this might be considered just a start towards making Dolphin great on phone form factors. Secondary windows that Dolphin might spawn are not yet adapted, but are usable on Plasma Mobile as they are anyway.
2024-10-17kitemlistcontroller: process forward/back buttons when double-clickingWolfgang Müller
Tapping the forward or back mouse buttons quickly enough makes Dolphin interpret the action as a double-click of the button in question and handle it in mouseDoubleClickEvent() instead of its normal button handler. This means that certain button presses might seem delayed or "swallowed" when quickly navigating forwards or backwards through the history. Since a double-click of the forward or back button is currently meaningless, fix this by emitting a normal mouseButtonPressed event for those buttons in the double-click handler and skipping any further event processing. Co-authored-by: Felix Ernst <[email protected]> CCBUG: 485295
2024-10-16GIT_SILENT made messages (after extraction)l10n daemon script