diff options
Diffstat (limited to 'src/widgets/itemviews')
-rw-r--r-- | src/widgets/itemviews/qheaderview.cpp | 10 | ||||
-rw-r--r-- | src/widgets/itemviews/qheaderview.h | 3 | ||||
-rw-r--r-- | src/widgets/itemviews/qheaderview_p.h | 6 | ||||
-rw-r--r-- | src/widgets/itemviews/qtableview.cpp | 3 | ||||
-rw-r--r-- | src/widgets/itemviews/qtreeview.cpp | 2 |
5 files changed, 23 insertions, 1 deletions
diff --git a/src/widgets/itemviews/qheaderview.cpp b/src/widgets/itemviews/qheaderview.cpp index 541d40d421..fa774b5074 100644 --- a/src/widgets/itemviews/qheaderview.cpp +++ b/src/widgets/itemviews/qheaderview.cpp @@ -2268,7 +2268,12 @@ void QHeaderView::mousePressEvent(QMouseEvent *e) d->pressed = logicalIndexAt(pos); if (d->clickableSections) emit sectionPressed(d->pressed); - if (d->movableSections) { + + bool acceptMoveSection = d->movableSections; + if (acceptMoveSection && d->pressed == 0 && !d->allowUserMoveOfSection0) + acceptMoveSection = false; // Do not allow moving the tree nod + + if (acceptMoveSection) { d->section = d->target = d->pressed; if (d->section == -1) return; @@ -2332,6 +2337,9 @@ void QHeaderView::mouseMoveEvent(QMouseEvent *e) int visual = visualIndexAt(pos); if (visual == -1) return; + if (visual == 0 && logicalIndex(0) == 0 && !d->allowUserMoveOfSection0) + return; + int posThreshold = d->headerSectionPosition(visual) - d->offset + d->headerSectionSize(visual) / 2; int moving = visualIndex(d->section); if (visual < moving) { diff --git a/src/widgets/itemviews/qheaderview.h b/src/widgets/itemviews/qheaderview.h index 1054e10ba1..847758aa12 100644 --- a/src/widgets/itemviews/qheaderview.h +++ b/src/widgets/itemviews/qheaderview.h @@ -240,6 +240,9 @@ protected: QRegion visualRegionForSelection(const QItemSelection &selection) const; void initStyleOption(QStyleOptionHeader *option) const; + friend class QTableView; + friend class QTreeView; + private: Q_PRIVATE_SLOT(d_func(), void _q_sectionsRemoved(const QModelIndex &parent, int logicalFirst, int logicalLast)) Q_PRIVATE_SLOT(d_func(), void _q_layoutAboutToBeChanged()) diff --git a/src/widgets/itemviews/qheaderview_p.h b/src/widgets/itemviews/qheaderview_p.h index 4d9d0b8c93..7dcfcad01b 100644 --- a/src/widgets/itemviews/qheaderview_p.h +++ b/src/widgets/itemviews/qheaderview_p.h @@ -91,6 +91,7 @@ public: stretchLastSection(false), cascadingResizing(false), resizeRecursionBlock(false), + allowUserMoveOfSection0(true), // will be false for QTreeView and true for QTableView stretchSections(0), contentsSections(0), minimumSectionSize(-1), @@ -234,6 +235,10 @@ public: } } + inline void setAllowUserMoveOfSection0(bool b) { + allowUserMoveOfSection0 = b; + } + void clear(); void flipSortIndicator(int section); void cascadingResize(int visual, int newSize); @@ -274,6 +279,7 @@ public: bool stretchLastSection; bool cascadingResizing; bool resizeRecursionBlock; + bool allowUserMoveOfSection0; int stretchSections; int contentsSections; int defaultSectionSize; diff --git a/src/widgets/itemviews/qtableview.cpp b/src/widgets/itemviews/qtableview.cpp index d84dc608b9..32869ad292 100644 --- a/src/widgets/itemviews/qtableview.cpp +++ b/src/widgets/itemviews/qtableview.cpp @@ -53,6 +53,7 @@ #include <qscrollbar.h> #include <qabstractbutton.h> #include <private/qtableview_p.h> +#include <private/qheaderview_p.h> #ifndef QT_NO_ACCESSIBILITY #include <qaccessible.h> #endif @@ -1181,6 +1182,7 @@ void QTableView::setHorizontalHeader(QHeaderView *header) delete d->horizontalHeader; d->horizontalHeader = header; d->horizontalHeader->setParent(this); + d->horizontalHeader->d_func()->setAllowUserMoveOfSection0(true); if (!d->horizontalHeader->model()) { d->horizontalHeader->setModel(d->model); if (d->selectionModel) @@ -1218,6 +1220,7 @@ void QTableView::setVerticalHeader(QHeaderView *header) delete d->verticalHeader; d->verticalHeader = header; d->verticalHeader->setParent(this); + d->verticalHeader->d_func()->setAllowUserMoveOfSection0(true); if (!d->verticalHeader->model()) { d->verticalHeader->setModel(d->model); if (d->selectionModel) diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp index bcaf8dc2c3..cf3d7155c1 100644 --- a/src/widgets/itemviews/qtreeview.cpp +++ b/src/widgets/itemviews/qtreeview.cpp @@ -58,6 +58,7 @@ #endif #include <private/qtreeview_p.h> +#include <private/qheaderview_p.h> QT_BEGIN_NAMESPACE @@ -313,6 +314,7 @@ void QTreeView::setHeader(QHeaderView *header) delete d->header; d->header = header; d->header->setParent(this); + d->header->d_func()->setAllowUserMoveOfSection0(false); if (!d->header->model()) { d->header->setModel(d->model); |