summaryrefslogtreecommitdiffstats
path: root/src/widgets/itemviews
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/itemviews')
-rw-r--r--src/widgets/itemviews/qheaderview.cpp10
-rw-r--r--src/widgets/itemviews/qheaderview.h3
-rw-r--r--src/widgets/itemviews/qheaderview_p.h6
-rw-r--r--src/widgets/itemviews/qtableview.cpp3
-rw-r--r--src/widgets/itemviews/qtreeview.cpp2
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);