summaryrefslogtreecommitdiffstats
path: root/src/gui/itemviews
diff options
context:
space:
mode:
authorQt Continuous Integration System <qt-info@nokia.com>2010-03-22 12:46:15 (GMT)
committerQt Continuous Integration System <qt-info@nokia.com>2010-03-22 12:46:15 (GMT)
commit58e9855afce71448c709469270950e5add87d601 (patch)
treeac23ab7b1df58bc3e4aa9734dfc5357c38cc13cd /src/gui/itemviews
parentda7c6cc8995f063435b25938ac10739a6e7f0067 (diff)
parent0d2f6432e7400dac20c71a01806cd787e5940eb2 (diff)
downloadQt-58e9855afce71448c709469270950e5add87d601.zip
Qt-58e9855afce71448c709469270950e5add87d601.tar.gz
Qt-58e9855afce71448c709469270950e5add87d601.tar.bz2
Merge branch '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-2 into 4.7-integration
* '4.7' of scm.dev.nokia.troll.no:qt/oslo-staging-2: Fixed performance issues when falling back to raster for sub-pixmaps. Dragging headers in item views done right
Diffstat (limited to 'src/gui/itemviews')
-rw-r--r--src/gui/itemviews/qheaderview.cpp24
1 files changed, 16 insertions, 8 deletions
diff --git a/src/gui/itemviews/qheaderview.cpp b/src/gui/itemviews/qheaderview.cpp
index 586e5d4..cd9ee15 100644
--- a/src/gui/itemviews/qheaderview.cpp
+++ b/src/gui/itemviews/qheaderview.cpp
@@ -2220,16 +2220,24 @@ void QHeaderView::mouseMoveEvent(QMouseEvent *e)
case QHeaderViewPrivate::MoveSection: {
if (qAbs(pos - d->firstPos) >= QApplication::startDragDistance()
|| !d->sectionIndicator->isHidden()) {
- int indicatorCenter = (d->orientation == Qt::Horizontal
- ? d->sectionIndicator->width()
- : d->sectionIndicator->height()) / 2;
- int centerOffset = indicatorCenter - d->sectionIndicatorOffset;
- // This will drop the moved section to the position under the center of the indicator.
- // If centerOffset is 0, the section will be moved to the position of the mouse cursor.
- int visual = visualIndexAt(pos + centerOffset);
+ int visual = visualIndexAt(pos);
if (visual == -1)
return;
- d->target = d->logicalIndex(visual);
+ int posThreshold = d->headerSectionPosition(visual) + d->headerSectionSize(visual) / 2;
+ int moving = visualIndex(d->section);
+ if (visual < moving) {
+ if (pos < posThreshold)
+ d->target = d->logicalIndex(visual);
+ else
+ d->target = d->logicalIndex(visual + 1);
+ } else if (visual > moving) {
+ if (pos > posThreshold)
+ d->target = d->logicalIndex(visual);
+ else
+ d->target = d->logicalIndex(visual - 1);
+ } else {
+ d->target = d->section;
+ }
d->updateSectionIndicator(d->section, pos);
}
return;