diff options
Diffstat (limited to 'src/widgets/itemviews/qlistview.cpp')
-rw-r--r-- | src/widgets/itemviews/qlistview.cpp | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/src/widgets/itemviews/qlistview.cpp b/src/widgets/itemviews/qlistview.cpp index b03c1a47f5..a7f1931947 100644 --- a/src/widgets/itemviews/qlistview.cpp +++ b/src/widgets/itemviews/qlistview.cpp @@ -88,7 +88,7 @@ extern bool qt_sendSpontaneousEvent(QObject *receiver, QEvent *event); that can be taken for views that are intended to display items with equal sizes is to set the \l uniformItemSizes property to true. - \sa {View Classes}, {Item Views Puzzle Example}, QTreeView, QTableView, QListWidget + \sa {View Classes}, QTreeView, QTableView, QListWidget */ /*! @@ -352,7 +352,7 @@ int QListView::spacing() const /*! \property QListView::batchSize \brief the number of items laid out in each batch if \l layoutMode is - set to \l Batched + set to \l Batched. The default value is 100. @@ -755,7 +755,10 @@ void QListView::mouseMoveEvent(QMouseEvent *e) && d->selectionMode != NoSelection) { QRect rect(d->pressedPosition, e->position().toPoint() + QPoint(horizontalOffset(), verticalOffset())); rect = rect.normalized(); - d->viewport->update(d->mapToViewport(rect.united(d->elasticBand))); + const int margin = 2 * style()->pixelMetric(QStyle::PM_DefaultFrameWidth); + const QRect viewPortRect = rect.united(d->elasticBand) + .adjusted(-margin, -margin, margin, margin); + d->viewport->update(d->mapToViewport(viewPortRect)); d->elasticBand = rect; } } @@ -769,7 +772,9 @@ void QListView::mouseReleaseEvent(QMouseEvent *e) QAbstractItemView::mouseReleaseEvent(e); // #### move this implementation into a dynamic class if (d->showElasticBand && d->elasticBand.isValid()) { - d->viewport->update(d->mapToViewport(d->elasticBand)); + const int margin = 2 * style()->pixelMetric(QStyle::PM_DefaultFrameWidth); + const QRect viewPortRect = d->elasticBand.adjusted(-margin, -margin, margin, margin); + d->viewport->update(d->mapToViewport(viewPortRect)); d->elasticBand = QRect(); } } @@ -910,7 +915,8 @@ void QListView::dropEvent(QDropEvent *event) bool dataMoved = false; for (int i = 0; i < persIndexes.size(); ++i) { const QPersistentModelIndex &pIndex = persIndexes.at(i); - if (r != pIndex.row()) { + // only generate a move when not same row or behind itself + if (r != pIndex.row() && r != pIndex.row() + 1) { // try to move (preserves selection) dataMoved |= model()->moveRow(QModelIndex(), pIndex.row(), QModelIndex(), r); if (!dataMoved) // can't move - abort and let QAbstractItemView handle this @@ -1621,6 +1627,12 @@ void QListView::setModelColumn(int column) return; d->column = column; d->doDelayedItemsLayout(); +#if QT_CONFIG(accessibility) + if (QAccessible::isActive()) { + QAccessibleTableModelChangeEvent event(this, QAccessibleTableModelChangeEvent::ModelReset); + QAccessible::updateAccessibility(&event); + } +#endif } int QListView::modelColumn() const @@ -1790,7 +1802,7 @@ void QListViewPrivate::prepareItemsLayout() if (q->style()->styleHint(QStyle::SH_ScrollView_FrameOnlyAroundContents)) { QStyleOption option; option.initFrom(q); - frameAroundContents = q->style()->pixelMetric(QStyle::PM_DefaultFrameWidth, &option) * 2; + frameAroundContents = q->style()->pixelMetric(QStyle::PM_DefaultFrameWidth, &option, q) * 2; } // maximumViewportSize() already takes scrollbar into account if policy is @@ -3401,7 +3413,7 @@ void QListView::currentChanged(const QModelIndex ¤t, const QModelIndex &pr QAbstractItemView::currentChanged(current, previous); #if QT_CONFIG(accessibility) if (QAccessible::isActive()) { - if (current.isValid()) { + if (current.isValid() && hasFocus()) { int entry = visualIndex(current); QAccessibleEvent event(this, QAccessible::Focus); event.setChild(entry); |