summaryrefslogtreecommitdiffstats
path: root/src/widgets/itemviews/qheaderview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/itemviews/qheaderview.cpp')
-rw-r--r--src/widgets/itemviews/qheaderview.cpp28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/widgets/itemviews/qheaderview.cpp b/src/widgets/itemviews/qheaderview.cpp
index 8ddbbd903a..e815ff53fa 100644
--- a/src/widgets/itemviews/qheaderview.cpp
+++ b/src/widgets/itemviews/qheaderview.cpp
@@ -2572,7 +2572,8 @@ void QHeaderView::mousePressEvent(QMouseEvent *e)
acceptMoveSection = false; // Do not allow moving the tree nod
if (acceptMoveSection) {
- d->section = d->target = d->pressed;
+ d->target = -1;
+ d->section = d->pressed;
if (d->section == -1)
return;
d->state = QHeaderViewPrivate::MoveSection;
@@ -2645,6 +2646,7 @@ void QHeaderView::mouseMoveEvent(QMouseEvent *e)
const int posThreshold = d->headerSectionPosition(visual) - d->offset + d->headerSectionSize(visual) / 2;
const int checkPos = d->reverse() ? d->viewport->width() - pos : pos;
int moving = visualIndex(d->section);
+ int oldTarget = d->target;
if (visual < moving) {
if (checkPos < posThreshold)
d->target = d->logicalIndex(visual);
@@ -2658,6 +2660,8 @@ void QHeaderView::mouseMoveEvent(QMouseEvent *e)
} else {
d->target = d->section;
}
+ if (oldTarget != d->target || oldTarget == -1)
+ d->updateSectionsBeforeAfter(d->target);
d->updateSectionIndicator(d->section, pos);
}
return;
@@ -2729,6 +2733,8 @@ void QHeaderView::mouseReleaseEvent(QMouseEvent *e)
moveSection(from, to);
d->section = d->target = -1;
d->updateSectionIndicator(d->section, pos);
+ if (from == to)
+ d->updateSectionsBeforeAfter(from);
break;
} // not moving
Q_FALLTHROUGH();
@@ -2986,6 +2992,7 @@ void QHeaderView::initStyleOptionForIndex(QStyleOptionHeader *option, int logica
opt.selectedPosition = QStyleOptionHeader::NextIsSelected;
else
opt.selectedPosition = QStyleOptionHeader::NotAdjacent;
+ opt.isSectionDragTarget = d->target == logicalIndex;
}
/*!
@@ -4047,6 +4054,25 @@ void QHeaderViewPrivate::setScrollOffset(const QScrollBar *scrollBar, QAbstractI
}
}
+void QHeaderViewPrivate::updateSectionsBeforeAfter(int logical)
+{
+ Q_Q(QHeaderView);
+ const int visual = visualIndex(logical);
+ int from = logicalIndex(visual > 1 ? visual - 1 : 0);
+ int to = logicalIndex(visual + 1 >= sectionCount() ? visual : visual + 1);
+ QRect updateRect;
+ if (orientation == Qt::Horizontal) {
+ if (reverse())
+ std::swap(from, to);
+ updateRect = QRect(QPoint(q->sectionViewportPosition(from), 0),
+ QPoint(q->sectionViewportPosition(to) + headerSectionSize(to), viewport->height()));
+ } else {
+ updateRect = QRect(QPoint(0, q->sectionViewportPosition(from)),
+ QPoint(viewport->width(), q->sectionViewportPosition(to) + headerSectionSize(to)));
+ }
+ viewport->update(updateRect);
+}
+
#ifndef QT_NO_DATASTREAM
void QHeaderViewPrivate::write(QDataStream &out) const
{