diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/modlistview.cpp | 22 | ||||
| -rw-r--r-- | src/modlistview.h | 6 |
2 files changed, 27 insertions, 1 deletions
diff --git a/src/modlistview.cpp b/src/modlistview.cpp index b1cce82e..70770dc2 100644 --- a/src/modlistview.cpp +++ b/src/modlistview.cpp @@ -31,8 +31,13 @@ void ModListView::dragEnterEvent(QDragEnterEvent* event) void ModListView::dragMoveEvent(QDragMoveEvent* event)
{
+ if (autoExpandDelay() >= 0) {
+ m_openTimer.start(autoExpandDelay(), this);
+ }
+
+ // bypass QTreeView
m_inDragMoveEvent = true;
- QTreeView::dragMoveEvent(event);
+ QAbstractItemView::dragMoveEvent(event);
m_inDragMoveEvent = false;
}
@@ -45,3 +50,18 @@ void ModListView::dropEvent(QDropEvent* event) m_inDragMoveEvent = false;
}
+void ModListView::timerEvent(QTimerEvent* event)
+{
+ if (event->timerId() == m_openTimer.timerId()) {
+ QPoint pos = viewport()->mapFromGlobal(QCursor::pos());
+ if (state() == QAbstractItemView::DraggingState
+ && viewport()->rect().contains(pos)) {
+ QModelIndex index = indexAt(pos);
+ setExpanded(index, true);
+ }
+ m_openTimer.stop();
+ }
+ else {
+ QTreeView::timerEvent(event);
+ }
+}
diff --git a/src/modlistview.h b/src/modlistview.h index af608427..0ded8f1d 100644 --- a/src/modlistview.h +++ b/src/modlistview.h @@ -35,6 +35,7 @@ protected: //
QModelIndexList selectedIndexes() const;
+ void timerEvent(QTimerEvent* event) override;
void dragEnterEvent(QDragEnterEvent* event) override;
void dragMoveEvent(QDragMoveEvent* event) override;
void dropEvent(QDropEvent* event) override;
@@ -42,8 +43,13 @@ protected: private:
ViewMarkingScrollBar* m_scrollbar;
+
bool m_inDragMoveEvent = false;
+ // replace the auto-expand timer from QTreeView to avoid
+ // auto-collapsing
+ QBasicTimer m_openTimer;
+
};
#endif // MODLISTVIEW_H
|
