┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2010-01-11 13:29:27 +0000
committerPeter Penz <[email protected]>2010-01-11 13:29:27 +0000
commit6301372c21857f2b1b5d9a2dd97f1d13a5b7994e (patch)
treeec9b979cc6c6c3233e357a4c0b8dfe3537f6e7cb
parentc8ad5fd5b615f7d1a5ed1e793bfc367f7d3966b3 (diff)
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
-rw-r--r--src/dolphindetailsview.cpp20
-rw-r--r--src/dolphindetailsview.h2
2 files changed, 17 insertions, 5 deletions
diff --git a/src/dolphindetailsview.cpp b/src/dolphindetailsview.cpp
index 5df105340..5a6342098 100644
--- a/src/dolphindetailsview.cpp
+++ b/src/dolphindetailsview.cpp
@@ -171,7 +171,7 @@ QSet<KUrl> 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 3bd62d33f..ddf47bfc3 100644
--- a/src/dolphindetailsview.h
+++ b/src/dolphindetailsview.h
@@ -52,7 +52,7 @@ public:
*/
QSet<KUrl> expandedUrls() const;
- virtual QRegion visualRegionForSelection(const QItemSelection & selection) const;
+ virtual QRegion visualRegionForSelection(const QItemSelection& selection) const;
protected:
virtual bool event(QEvent* event);