summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/modlistview.cpp22
-rw-r--r--src/modlistview.h6
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