Test which items are activated when pressing Enter or Return
The ViewState struct gets a new bool member to indicate if the selected
items should have been activated after the last event or not. One could
argue that adding a bool parameter to the constructor is not optimal,
but I think adding an enum is not really worth the effort because the
struct is not used outside this unit test. Moreover, I could not think
of a good name for the enum type and its values.
(cherry picked from commit 307cca7b31b998fb7e8af0478a8e97e53bdc059c)
Since commit 66ce4db4879cd80b2dcb6d65a0c74599c5e5f0ba, enabling or
disabling groupling may change the number of columns in the view.
Therefore, the test should first change the "grouping" setting and then
change the view geometry to make sure that the column count is correct.
(cherry picked from commit 61390b201acae2d8eea94fefc947977a8799af85)
Peter Penz [Sat, 11 Feb 2012 17:02:38 +0000 (18:02 +0100)]
Group header layout fixes
- Don't use a margin for the first group header
- Provide margins between the groups
- Use a more subtle coloring
- Prevent animation glitches when resizing a window
Peter Penz [Thu, 9 Feb 2012 08:57:47 +0000 (09:57 +0100)]
Icon-rectangle and selection-toggle optimizations
- No padding should be applied to the icon-rectangle
- Base the selection-toggle size on the icon-size of the style not
the actual pixmap content, as this might lead to smaller selection-toggles
when having pixmap-previews with a small height.
Peter Penz [Wed, 8 Feb 2012 16:45:22 +0000 (17:45 +0100)]
Layout optimizations
- Differ internally between margins and paddings
- Add a small padding in the icons-view and the compact-views
- Optimize the width of the icons-view if previews are shown
Peter Penz [Mon, 6 Feb 2012 22:26:20 +0000 (23:26 +0100)]
Group header improvements
- Use a simpler background and colors as suggested by Martin Zilz.
This is just an early draft, I need to post some comparison screenshots to
Martin for review.
- Fixes of some layout issues that have been revealed because of adjusting
the group header heights.
- More clever animation/no-animation detection when doing listview-property
changes in parallel.
Peter Penz [Sun, 5 Feb 2012 18:14:17 +0000 (19:14 +0100)]
Fix potential endless loop in layout
Usecase:
- No scrollbar is shown
- Window size will be decreased so that a scrollbar gets necessary
The decreased window size minus the space required for the scrollbar
results in a relayout of the items. In 99 % of all
cases a decreased window size won't result in showing more items in parallel in
comparison to a larger window size. However in the remaining 1 % this can
happen (e.g. see bug 293318 for a sample). This results in an endless loop as
now no scrollbar is required anymore, the layout changes again, the scrollbar
is required again, ...
Replace setExpanded(const QSet<KUrl>&) by expandParentItems(const KUrl&)
The use case of this function (Folders Panel) requires the expansion of
the parent items of a single URL, so it's not needed to handle a full
set of URLs in this function. Moreover, the issue that not only the
parents, but also the URLs themselves were expanded is fixed by this
commit.
(cherry picked from commit 89082ca391807abdc26d8985efe6b4c27183a9b1)
Peter Penz [Sat, 4 Feb 2012 21:14:53 +0000 (22:14 +0100)]
Icons view: Layout optimizations
- Assure that landscape-previews use the whole available width of the icon-area
instead of only using the square width. This waste of space occured if the
text-width was larger than the icon-width.
- Only use one margin instead of two between the icons and the text to improve the
visual appearance (thanks to Martin Zilz for the hint)
Peter Penz [Fri, 3 Feb 2012 22:07:33 +0000 (23:07 +0100)]
Show the value "Unknown" for the item-count only after it has been verified
During determining the item-count for directories just show an empty string
until either the item-count has been calculated or if the item-count is unknown.
Thanks to Nikita Skovoroda for the initial proof-of-concept patch.
Peter Penz [Fri, 3 Feb 2012 08:57:18 +0000 (09:57 +0100)]
Folders Panel: Show expansion toggles for directories on ISO-images
When counting the number of sub-directories consider unknown file types
as potential directories. In the "worst case" an expansion toggle will be
shown although the directory contains only files, however from a performance
point of view this seems to be an acceptable compromise.
First version of a unit test for KItemListController
At the moment, only key press events are tested, and the current item
and selection after the event are verified.
Moreover, this commit makes sure that
KItemListController::keyPressEvent() really does not select anything
if the selection mode is NoSelection.
(cherry picked from commit 7457f4868cf0bc83e8a90ce5693292378f3d07c4)
First version of a unit test for KItemListController
At the moment, only key press events are tested, and the current item
and selection after the event are verified.
Moreover, this commit makes sure that
KItemListController::keyPressEvent() really does not select anything
if the selection mode is NoSelection.
Peter Penz [Wed, 1 Feb 2012 19:40:57 +0000 (20:40 +0100)]
KFileItemModelRolesUpdater: Optimize updates
The asynchronous resolving to bypass performance bottlenecks is not necessary
anymore as multiple ranges can be inserted in one step now. This solves the issue
that e.g. opening a tree resulted in temporary unknown icons for a short period
of time.
Peter Penz [Wed, 1 Feb 2012 19:40:57 +0000 (20:40 +0100)]
KFileItemModelRolesUpdater: Optimize updates
The asynchronous resolving to bypass performance bottlenecks is not necessary
anymore as multiple ranges can be inserted in one step now. This solves the issue
that e.g. opening a tree resulted in temporary unknown icons for a short period
of time.
Peter Penz [Wed, 1 Feb 2012 12:46:24 +0000 (13:46 +0100)]
Don't animate items if the number of grid elements has been changed
Having animated items is useful when e.g. deleting or inserting one
item or when the size or position slightly changes by increasing the
zoom level or the window size. However if the number of rows or columns
change, the animation gets obtrusive and in this case lets just apply
the final layout.
Peter Penz [Wed, 1 Feb 2012 12:46:24 +0000 (13:46 +0100)]
Don't animate items if the number of grid elements has been changed
Having animated items is useful when e.g. deleting or inserting one
item or when the size or position slightly changes by increasing the
zoom level or the window size. However if the number of rows or columns
change, the animation gets obtrusive and in this case lets just apply
the final layout.
Fix keyboard navigation issue when Home or End are pressed
The problem was that m_keyboardAnchorIndex and m_keyboardAnchorPos were
not updated when Home or End are pressed. This causes the following
unexpected behavior in Icons View: Press Home, then Right, then Down,
then Home, finally Down. One would expect that the first item in the
second row is the current item then, but before this commit, it was the
second one because the controller still remembered that the second
column was active before Home was pressed.
(cherry picked from commit 999234a94ae41cfb4f2167d2779b562ebf8127ce)
Fix keyboard navigation issue when Home or End are pressed
The problem was that m_keyboardAnchorIndex and m_keyboardAnchorPos were
not updated when Home or End are pressed. This causes the following
unexpected behavior in Icons View: Press Home, then Right, then Down,
then Home, finally Down. One would expect that the first item in the
second row is the current item then, but before this commit, it was the
second one because the controller still remembered that the second
column was active before Home was pressed.
FIXED-IN: 4.8.1
Peter Penz [Mon, 30 Jan 2012 11:59:38 +0000 (12:59 +0100)]
Further animation optimizations
- Assure a proper minimim width in the compact mode.
- Don't calculate the old position of hidden items to animate the
moving. Just show them directly.
Peter Penz [Mon, 30 Jan 2012 11:59:38 +0000 (12:59 +0100)]
Further animation optimizations
- Assure a proper minimim width in the compact mode.
- Don't calculate the old position of hidden items to animate the
moving. Just show them directly.
Peter Penz [Sun, 29 Jan 2012 17:29:00 +0000 (18:29 +0100)]
Make moving animations less obtrusive
Only animate the moving of items if the new position is within the same
row or the same column. Otherwise just fade in the icon on the new position.
This makes the the animations when resizing the window or changing the zoom-level
a lot more pleasant.
Peter Penz [Sun, 29 Jan 2012 17:29:00 +0000 (18:29 +0100)]
Make moving animations less obtrusive
Only animate the moving of items if the new position is within the same
row or the same column. Otherwise just fade in the icon on the new position.
This makes the the animations when resizing the window or changing the zoom-level
a lot more pleasant.
Handle folder names containing spaces correctly in the Folders Panel
The problem was that KFileItemModel::setExpanded() used KUrl::url()
to determine the names of the subfolders. This method encodes special
characters, such that comparing the folder names with the unencoded URLs
stored in the model fails.
Using KUrl::path(), which does not encode special characters, fixes the
problem.
Handle folder names containing spaces correctly in the Folders Panel
The problem was that KFileItemModel::setExpanded() used KUrl::url()
to determine the names of the subfolders. This method encodes special
characters, such that comparing the folder names with the unencoded URLs
stored in the model fails.
Using KUrl::path(), which does not encode special characters, fixes the
problem.
Do not make items invisible when turning off previews
This commit fixes a problem in KItemListView::doLayout(): This function
assumed that firstVisibleIndex is a constant.
However, if the view is scrolled to the bottom with previews enabled,
and then previews are disabled (and the icon size is much smaller
without previews), this function changes the scroll offset, which also
changes the the first visible index. Using the unchanged variable causes
trouble later on (i.e., it makes items which are actually inside the
view area invisible).
lastVisibleIndex is not needed before the scroll offset change and is
const after that, so its calculation is moved a few lines down.
CCBUG: 291841
FIXED-IN: 4.8.1
(cherry picked from commit cc8f5b4939062df44ce0bd314ac4ae04973b9830)
Do not make items invisible when turning off previews
This commit fixes a problem in KItemListView::doLayout(): This function
assumed that firstVisibleIndex is a constant.
However, if the view is scrolled to the bottom with previews enabled,
and then previews are disabled (and the icon size is much smaller
without previews), this function changes the scroll offset, which also
changes the the first visible index. Using the unchanged variable causes
trouble later on (i.e., it makes items which are actually inside the
view area invisible).
lastVisibleIndex is not needed before the scroll offset change and is
const after that, so its calculation is moved a few lines down.
BUG: 291841
FIXED-IN: 4.8.1
REVIEW: 103731
Peter Penz [Tue, 17 Jan 2012 20:08:39 +0000 (21:08 +0100)]
Do a synchronous layout for dynamic item sizes when changing the geometry
This prevents a delayed update when resizing the window e.g. in the details
view. As no animated item position changes can happen for dynamic item sizes
the synchronous relayout is fine from a performance point of view.
Peter Penz [Tue, 17 Jan 2012 20:08:39 +0000 (21:08 +0100)]
Do a synchronous layout for dynamic item sizes when changing the geometry
This prevents a delayed update when resizing the window e.g. in the details
view. As no animated item position changes can happen for dynamic item sizes
the synchronous relayout is fine from a performance point of view.
Peter Penz [Tue, 17 Jan 2012 08:57:58 +0000 (09:57 +0100)]
Disable smooth-scrolling dependent on the graphics-effect level
If the graphics-effect-level has been set to NoEffects (systemsettings -> Appearance
-> Style -> Fine Tuning), the smooth scrolling in Dolphin will be disabled.
Additionally the duration for the smooth-scrolling has been decreased from 200 ms
to 100 ms to reduce the lag.
A wrong calculation of the end-value has been fixed that might trigger
a wrong position of the content.
Peter Penz [Tue, 17 Jan 2012 08:57:58 +0000 (09:57 +0100)]
Disable smooth-scrolling dependent on the graphics-effect level
If the graphics-effect-level has been set to NoEffects (systemsettings -> Appearance
-> Style -> Fine Tuning), the smooth scrolling in Dolphin will be disabled.
Additionally the duration for the smooth-scrolling has been decreased from 200 ms
to 100 ms to reduce the lag.
A wrong calculation of the end-value has been fixed that might trigger
a wrong position of the content.
If an item is clicked to trigger it, clear the rest of the selection
Note that the clearing is not done on mouse press, but on mouse release.
The reason is that there are situations when multiple items are selected
and pressing the mouse on one of them should not clear the selection
(e.g., drag and drop of multiple items).
If an item is clicked to trigger it, clear the rest of the selection
Note that the clearing is not done on mouse press, but on mouse release.
The reason is that there are situations when multiple items are selected
and pressing the mouse on one of them should not clear the selection
(e.g., drag and drop of multiple items).