diff options
author | Thorbjørn Lund Martsum <tmartsum@gmail.com> | 2012-04-01 06:31:43 +0200 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2012-07-05 13:13:58 +0200 |
commit | f8f6acb05ce9aa5fccc329bf5587adf14ed9a710 (patch) | |
tree | 2219acebcbeb743eee860e345db41dd6a5ebaa3c /src/widgets/itemviews | |
parent | 40bfbf3a5b765d939a7eea999c49da5b16456ad1 (diff) |
QHeaderView - resizeSection improvement
This patch improves the manual resizeSection a bit. Before we didn't
consider that the program could maybe resize other sections when the
user was resizing one section.
The main issue with that is that setOffset is so smart that it helps
moving the mouse cursor - however it really shouldn't do if the
program is trying to change something too.
Maybe this won't solve all (possible) problems at once - but it is
a fixed needed just to make something work - trying to make anything
work without this fix is horrible....
Change-Id: I3cefa375a9b8ee4c1ef1e08ba0900025c671e4c6
Reviewed-by: Stephen Kelly <stephen.kelly@kdab.com>
Diffstat (limited to 'src/widgets/itemviews')
-rw-r--r-- | src/widgets/itemviews/qheaderview.cpp | 15 | ||||
-rw-r--r-- | src/widgets/itemviews/qheaderview_p.h | 2 |
2 files changed, 16 insertions, 1 deletions
diff --git a/src/widgets/itemviews/qheaderview.cpp b/src/widgets/itemviews/qheaderview.cpp index 23245a7733..0cd80f2e0a 100644 --- a/src/widgets/itemviews/qheaderview.cpp +++ b/src/widgets/itemviews/qheaderview.cpp @@ -456,7 +456,7 @@ void QHeaderView::setOffset(int newOffset) d->viewport->scroll(isRightToLeft() ? -ndelta : ndelta, 0); else d->viewport->scroll(0, ndelta); - if (d->state == QHeaderViewPrivate::ResizeSection) { + if (d->state == QHeaderViewPrivate::ResizeSection && !d->preventCursorChangeInSetOffset) { QPoint cursorPos = QCursor::pos(); if (d->orientation == Qt::Horizontal) QCursor::setPos(cursorPos.x() + ndelta, cursorPos.y()); @@ -827,6 +827,9 @@ void QHeaderView::swapSections(int first, int second) ResizeMode secondMode = d->headerSectionResizeMode(second); int secondLogical = d->logicalIndex(second); + if (d->state == QHeaderViewPrivate::ResizeSection) + d->preventCursorChangeInSetOffset = true; + d->createSectionItems(second, second, firstSize, firstMode); d->createSectionItems(first, first, secondSize, secondMode); @@ -876,6 +879,9 @@ void QHeaderView::resizeSection(int logical, int size) if (visual == -1) return; + if (d->state == QHeaderViewPrivate::ResizeSection && !d->cascadingResizing && logical != d->section) + d->preventCursorChangeInSetOffset = true; + int oldSize = d->headerSectionSize(visual); if (oldSize == size) return; @@ -1716,6 +1722,9 @@ void QHeaderView::sectionsInserted(const QModelIndex &parent, d->invalidateCachedSizeHint(); + if (d->state == QHeaderViewPrivate::ResizeSection) + d->preventCursorChangeInSetOffset = true; + // add the new sections int insertAt = logicalFirst; int insertCount = logicalLast - logicalFirst + 1; @@ -1849,6 +1858,9 @@ void QHeaderViewPrivate::_q_sectionsRemoved(const QModelIndex &parent, int oldCount = q->count(); int changeCount = logicalLast - logicalFirst + 1; + if (state == QHeaderViewPrivate::ResizeSection) + preventCursorChangeInSetOffset = true; + updateHiddenSections(logicalFirst, logicalLast); if (visualIndices.isEmpty() && logicalIndices.isEmpty()) { @@ -2268,6 +2280,7 @@ void QHeaderView::mousePressEvent(QMouseEvent *e) d->originalSize = sectionSize(handle); d->state = QHeaderViewPrivate::ResizeSection; d->section = handle; + d->preventCursorChangeInSetOffset = false; } d->firstPos = pos; diff --git a/src/widgets/itemviews/qheaderview_p.h b/src/widgets/itemviews/qheaderview_p.h index cca81b0c22..fe1de2b832 100644 --- a/src/widgets/itemviews/qheaderview_p.h +++ b/src/widgets/itemviews/qheaderview_p.h @@ -84,6 +84,7 @@ public: pressed(-1), hover(-1), length(0), + preventCursorChangeInSetOffset(false), movableSections(false), clickableSections(false), highlightSelected(false), @@ -266,6 +267,7 @@ public: int hover; int length; + bool preventCursorChangeInSetOffset; bool movableSections; bool clickableSections; bool highlightSelected; |