From 6301372c21857f2b1b5d9a2dd97f1d13a5b7994e Mon Sep 17 00:00:00 2001 From: Peter Penz Date: Mon, 11 Jan 2010 13:29:27 +0000 Subject: [PATCH] Fixed issue in details view, that "sometimes" the rubberband selection only selects one item after an item has been deleted. It took me nearly 30 minutes to find out how to reproduce this issue 100 % reliable: - a confirm dialog must be shown (thanks a lot to Dario for the hint!) - the most important part: the keys (e. g. Shift + Del) must be pressed long enough until the confirm dialog grabs the focus from the details view... BUG: 220898 BUG: 183386 BUG: 203112 svn path=/trunk/KDE/kdebase/apps/; revision=1073043 --- src/dolphindetailsview.cpp | 20 ++++++++++++++++---- src/dolphindetailsview.h | 2 +- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/dolphindetailsview.cpp b/src/dolphindetailsview.cpp index 5df1053406..5a6342098d 100644 --- a/src/dolphindetailsview.cpp +++ b/src/dolphindetailsview.cpp @@ -171,7 +171,7 @@ QSet DolphinDetailsView::expandedUrls() const return m_expandedUrls; } -QRegion DolphinDetailsView::visualRegionForSelection(const QItemSelection &selection) const +QRegion DolphinDetailsView::visualRegionForSelection(const QItemSelection& selection) const { // We have to make sure that the visualRect of each model index is inside the region. // QTreeView::visualRegionForSelection does not do it right because it assumes implicitly @@ -188,9 +188,21 @@ QRegion DolphinDetailsView::visualRegionForSelection(const QItemSelection &selec bool DolphinDetailsView::event(QEvent* event) { - if (event->type() == QEvent::Polish) { + switch (event->type()) { + case QEvent::Polish: header()->setResizeMode(QHeaderView::Interactive); updateColumnVisibility(); + break; + + case QEvent::FocusOut: + // If a key-press triggers an action that e. g. opens a dialog, the + // widget gets no key-release event. Assure that the pressed state + // is reset to prevent accidently setting the current index during a selection. + m_keyPressed = false; + break; + + default: + break; } return QTreeView::event(event); @@ -765,8 +777,7 @@ void DolphinDetailsView::updateElasticBandSelection() return; } } - } - else { + } else { // This is the only piece of optimization data that needs to be explicitly // discarded. m_band.lastSelectionOrigin = QPoint(); @@ -880,6 +891,7 @@ void DolphinDetailsView::updateElasticBandSelection() currIndex = nextIndex; } while (!allItemsInBoundDone); + selectionModel()->select(itemsToToggle, QItemSelectionModel::Toggle); m_band.lastSelectionOrigin = m_band.origin; diff --git a/src/dolphindetailsview.h b/src/dolphindetailsview.h index 3bd62d33fc..ddf47bfc3e 100644 --- a/src/dolphindetailsview.h +++ b/src/dolphindetailsview.h @@ -52,7 +52,7 @@ public: */ QSet expandedUrls() const; - virtual QRegion visualRegionForSelection(const QItemSelection & selection) const; + virtual QRegion visualRegionForSelection(const QItemSelection& selection) const; protected: virtual bool event(QEvent* event);