From d351d41e4bfd982646d7919b7eeb2cf98992edc3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rafael=20Fern=C3=A1ndez=20L=C3=B3pez?= Date: Wed, 12 Dec 2007 00:04:13 +0000 Subject: [PATCH] Fixes the problem with the keyboard navigation when a selection with the right-click or a dragging unitary selection was done. BUG: 153875 svn path=/trunk/KDE/kdebase/apps/; revision=747421 --- src/kcategorizedview.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/kcategorizedview.cpp b/src/kcategorizedview.cpp index c062b12b3..72936113c 100644 --- a/src/kcategorizedview.cpp +++ b/src/kcategorizedview.cpp @@ -870,12 +870,29 @@ void KCategorizedView::setSelection(const QRect &rect, return; } + int viewportWidth = viewport()->width() - spacing(); + int itemWidth; + + if (gridSize().isEmpty()) + { + itemWidth = d->biggestItemSize.width(); + } + else + { + itemWidth = gridSize().width(); + } + + int itemWidthPlusSeparation = spacing() + itemWidth; + int elementsPerRow = viewportWidth / itemWidthPlusSeparation; + QItemSelection selection; if (!d->mouseButtonPressed) { selection = QItemSelection(dirtyIndexes[0], dirtyIndexes[0]); d->currentViewIndex = dirtyIndexes[0]; + selectionModel()->setCurrentIndex(d->currentViewIndex, flags); + d->forcedSelectionPosition = d->elementsInfo[d->currentViewIndex.row()].relativeOffsetToCategory % elementsPerRow; } else { @@ -897,6 +914,12 @@ void KCategorizedView::setSelection(const QRect &rect, if (last.isValid()) selection << QItemSelectionRange(first, last); + + if (first == last) + { + selectionModel()->setCurrentIndex(first, QItemSelectionModel::SelectCurrent); + d->forcedSelectionPosition = d->elementsInfo[first.row()].relativeOffsetToCategory % elementsPerRow; + } } if (d->lastSelection.count()) -- 2.47.3