Peter Penz [Thu, 18 Aug 2011 21:11:16 +0000 (23:11 +0200)]
Provide basic rubberband functionality
This is just a rough draft: The rubberband gets visible and an
automatic scrolling is done if the autoscroll-margins have been
reached. However currently no items get selected yet. Currently
the autoscrolling has a severe bug if the scrollbars are manually
changed before or after a rubberband selection.
Before this commit, expanding and collapsing folders in the details
view would lead to strange results in a folder with the items "a",
"a/a/", "a/a/1", "a/a-1/", and "a/a-1/1". The problem was that the
comparison between "a/a/1" and "a/a-1/1" went wrong: the first
character in which the paths differ is a "/" in one of the items, such
that the code that reduces this 'index' in
KFileItemModel::expansionLevelsCompare in order to find the 'common
path' did nothing because it checked that only *one* of the two items
does not have an "/" at the position 'index'.
Peter Penz [Sun, 14 Aug 2011 14:10:11 +0000 (16:10 +0200)]
Move drawing of textbackground to KItemListWidget
As the textbounding-rectangle is now a property of KItemListWidget
also the default visual appearance is moved now from
KFileItemListWidget to KItemListWidget.
Peter Penz [Sun, 14 Aug 2011 13:45:52 +0000 (15:45 +0200)]
Rename KItemListWidget::hoverBoundingRect()
It has been split now to iconBoundingRect() and textBoundingRect().
This is required to implement the rubberband in an efficient way
and makes it more explicit what rectangle is returned.
1. Implement DolphinView::clearSelection().
2. Simplify DolphinView::invertSelection().
I found, fixed, and unit-tested a bug in the selection
manager which was uncovered by this change.
Implement basic keyboard navigation in Icons and Compact View
Things that are still missing:
1. Moving to the previous/next row with Up/Down in Icons View,
moving to the previous/next columns in Compact View.
2. Navigation in Details View.
Note that scrolling to the current item doesn't work yet, and
that the view does not have keyboard focus initially, so one has
to click the view before keyboard navigation and seleciton works.
KItemListContainer: show only the scroll bar that is needed
Up to now, KItemListContainer would show both a vertical and
horizontal scroll bar after a view mode change. This commit
fixes that by setting the maximum and the value of the scroll
bar that is not needed to 0 in
KItemListContainer::updateScrollBars().
This commit adds a unit test that changes the selection in various
ways, verifies the result and checks that the selection manager's
selectionChanged signal has been emitted correctly. The test is
data-driven, so I hope that most further testing needs can be
fulfilled by adding new test data.
Moreover, I changed selectedItems() such that the anchored
selection is only taken into account if anchor and current item
are different. The reason is that in some situation the anchor
should not be selected initially (i.e., if an already selected
item is Control-clicked). If the anchor should be selected from
the beginning, it must be selected manually.
Emit KitemListSelectionManager's selectionChanged signal correctly
This commit makes sure that the signal is emitted with the correct
current and previous selection after a selection change, and
that the signal is emitted exactly once in
KItemListSelectionManager::itemsInserted and
KItemListSelectionManager::itemsRemoved.
Make sure that key presses are handled in KItemListController
Key press events are forwarded from KItemListContainer to
KItemListController. Right now, only the 'Home' and 'End' keys
are handled (arrow keys require some more work because their action
depends on the view mode).
Note:
1. Before key presses are handled, the view has to be clicked with
the mouse. It seems that the view does not have the keyboard
focus initially.
2. The view does not scroll to the new current item yet.
Always use the 'Select' mode for anchored selections
In Dolphin, we don't actually use the 'Deselect' and 'Toggle'
modes for anchored selections, so we can just remove these
modes and always use 'Select' to reduce code complexity.
Update the anchor item when items are added or removed
If items are added or removed in the model, not only the
current item, but also the anchor item, which is the
starting point for any selections via Shift+Click or
Shift+Key, needs to be updated.
BUG: 262638
FIXED-IN: 4.8.0
Peter Penz [Tue, 2 Aug 2011 17:47:06 +0000 (19:47 +0200)]
Improve performance for creating previews
The overall time for creating previews is faster the more items
are passed to KIO::previewJob() in parallel instead of passing
e.g. only 100 items once and start several KIO::previewJobs
sequentially.
However in the worst case KIO::previewJob() might
block the application for several seconds if the
MIME-type of the passed KFileItems are unknown and e.g. 10000 items
are forwarded.
So KFileItemModelRolesUpdater will now take care to resolve as many
MIME-types as possible until a timeout is reached and will only pass
those items to KIO::previewJob().
For huge image folders, where the MIME-type can be determined very
fast, this means that the overall time for creating previews will
decrease without blocking the application. For "worst case" directories
where resolving the MIME-type can get very expensive this approach
assures no blocking of the user-interface although the overall time
until all previews are generated might slightly increase.
Peter Penz [Sat, 30 Jul 2011 18:13:09 +0000 (20:13 +0200)]
Merged very early alpha-version of Dolphin 2.0
Dolphin 2.0 will get a new view-engine with the
following improvements:
- Better performance
- Animated transitions
- No clipped filenames due to dynamic item-sizes
- Grouping support for all view-modes
- Non-rectangular selection areas
- Simplified code for better maintenance
More details will be provided in a blog-entry during
the next days.
Please note that the code is in a very
early alpha-stage and although the most tricky parts
have been implemented already very basic things like
drag and drop or selections have not been pushed yet.
Those things are rather trivial to implement but this
still will take some time.
The commit fff7573ebb910712ad97951bf1762e6a7bb0bdc7 introduced a
regression concerning restoration of saved Dolphin sessions. The
main window numbers which can be passed to KMainWindow::restore()
start with 1, and not with 0.
PreviewSettingsPage: update JPG preview plugin settings if needed
In KDE <= 4.6, the 'jpegrotatedthumbnail' plugin was used to provide
thumbnails for JPG images which are rotated correctly. In KDE 4.7, this
is done by the usual 'jpegthumbnail' plugin if it is configured
accordingly. The update of the settings is done in KFilePreviewGenerator.
However, if Konqueror is run in web browsing mode and the settings dialog
is opened, KFilePreviewGenerator does not have a chance to do the update.
To make sure that the correct plugins are shown in the settings, this
commit adds a plugin update to PreviewSettingsPage.
The old code that just removed the 'jpegrotatedthumbnail' plugin without
enabling the 'jpegthumbnail' plugin is removed.
Burkhard Lück [Mon, 13 Jun 2011 06:26:07 +0000 (08:26 +0200)]
Add missing actions to report bug + switch language to Help menu in dolphin whithout menubar
Using Dolphin in default mode in master/4.7 whithout menubar the user has no actions to report a bug or switch language.
Add these missing actions the Help menu launched from the toolbar button Configure and control Dolphin.
REVIEW: 101597
The timeout for the selectionChanged signal is increased in
DolphinViewTest_AllViewModes::verifySelectedItemsCount().
I hope that this will fix a part of the failures seen in
http://my.cdash.org/testDetails.php?test=6350150&build=196639
1. Fix possible test failure if hidden files are shown initially.
2. Fix possible test failure if a .directory file is created in
the test directory. I think that this fixes the test failure from
http://my.cdash.org/testDetails.php?test=6350151&build=196639
Matthias Fuchs [Wed, 1 Jun 2011 22:56:54 +0000 (00:56 +0200)]
Keeps the selection after showing/hiding hidden files.
Still only files that are shown will be selected, thus selecting hidden files and then hiding hidden files will deselect those.
BUG:177215
REVIEW:101487
Sebastian Trueg [Sat, 28 May 2011 19:23:05 +0000 (21:23 +0200)]
Improved query creation. There is absolutely no point in using a
regular expression in addition to the query created by the query
parser. All it does is majorly slowing down the query execution.
Sebastian Dörner [Wed, 25 May 2011 21:14:14 +0000 (22:14 +0100)]
Don't let hidden terminals prevent unmounting
Previous state: When the terminal is hidden, the cwd is not updated
anymore. If it was on a removable device when hiding, the hidden
terminal might prevent unmounting this device.
This patch fixes that bug by changing the cwd to "/" when hiding the panel.
Fix DolphinView regression in 4.6: Keep renamed items visible
Commit 78669f2a57ecfb547019383deadf4aeac7d20070 introduced a regression
in DolphinView which disabled the automatic scrolling after a rename
operation to keep the renamed item visible. This commit reverts a part
of that change to re-enable the feature.
CCBUG: 273600
FIXED-IN: 4.6.4
(cherry picked from commit 54f34a941f85efa659392a06b14fee86f1420bf5)
Peter Penz [Wed, 20 Apr 2011 18:03:51 +0000 (20:03 +0200)]
Improve usability of Search Panel
If the Search Panel is shown outside the context of the "Find" mode it
will be always enabled and does a global search. Only if the user is in
the "Find" mode and the searching is restricted to the current directory
the Search Panel might get disabled if the current directory is not
indexed. This solves the major usability issue that it was not clear
for the users whether a global or restricted search is done.
Peter Penz [Fri, 15 Apr 2011 18:35:25 +0000 (20:35 +0200)]
Details view: Fix jumping column-widths
If the view has a width where a horizontal scrollbar is required to
show all columns, an endless loop might get triggered that results in a
periodic jumping of the column-widths.
Improve stability of unit tests when running them with Valgrind
I noticed unexpected unit test failures when running the tests with
Valgrind. The reason was that test execution was slowed down a lot,
such that that TestBase::waitForFinishedPathLoading() did not receive
the view's signal within the default timeout of 2 seconds, and that
this failure was not detected in every test -> the tests failed later
on because not all expected items had been loaded yet.
To fix this, I changed two things:
1. Added an assert in TestBase::waitForFinishedPathLoading() that checks
if the signal has been received. Continuing does not make much sense if
that is not the case.
2. Increased the default timeout to 20 seconds. The reason why there is
a finite timeout at all is that I didn't want to waste too much time on
machines where the file kioslave seems to have problems loading a
directory (I've seen corresponding test logs at cdash.org). However, with
the first change I mentioned above, the waiting time is lost only once
(due to the assert) rather than every time a directory is loaded
-> I think that the timeout increase does not lead to an increased waste
of time on such machines.
Peter Penz [Tue, 12 Apr 2011 18:01:31 +0000 (20:01 +0200)]
Let each DolphinMainWindow run in a custom process
A possible crash in one Dolphin window should not result in crashing
other Dolphin windows. Beside this it also prevents issues with
modal dialogs or notifications.
When navigating in Dolphin it attempts to keep any open Terminal (F4)
in sync by changing the directory in the shell. It does this by
sending a "^C; cd $DIRECTORY" however shells under FreeBSD treat "^C"
as a literal string and not SIGINT. Fix this by sending SIGINT to the
shell instead of "^C".
It appears Linux does not exhibit this behaviour.
Patch originally written by David Naylor, from the KDE-FreeBSD team.
Verify that the current item and the scroll position of the view do not
change if previews are turned off. Actually, the bug was in
KFilePreviewGenerator, but it's easier to test this here.