浏览代码

UI: Fix scene tree event handling

This fixes a bug where the same scene would show up in
the multiview more than once when reordering scenes.
Clayton Groeneveld 5 年之前
父节点
当前提交
41e38cc958
共有 1 个文件被更改,包括 13 次插入10 次删除
  1. 13 10
      UI/scene-tree.cpp

+ 13 - 10
UI/scene-tree.cpp

@@ -6,6 +6,7 @@
 #include <QScrollBar>
 #include <QDropEvent>
 #include <QPushButton>
+#include <QTimer>
 
 SceneTree::SceneTree(QWidget *parent_) : QListWidget(parent_)
 {
@@ -67,8 +68,6 @@ bool SceneTree::eventFilter(QObject *obj, QEvent *event)
 
 void SceneTree::resizeEvent(QResizeEvent *event)
 {
-	QListWidget::resizeEvent(event);
-
 	if (gridMode) {
 		int scrollWid = verticalScrollBar()->sizeHint().width();
 		int h = visualItemRect(item(count() - 1)).bottom();
@@ -96,6 +95,8 @@ void SceneTree::resizeEvent(QResizeEvent *event)
 			item(i)->setData(Qt::SizeHintRole, QVariant());
 		}
 	}
+
+	QListWidget::resizeEvent(event);
 }
 
 void SceneTree::startDrag(Qt::DropActions supportedActions)
@@ -105,10 +106,10 @@ void SceneTree::startDrag(Qt::DropActions supportedActions)
 
 void SceneTree::dropEvent(QDropEvent *event)
 {
-	QListWidget::dropEvent(event);
-
-	if (event->source() != this)
+	if (event->source() != this) {
+		QListWidget::dropEvent(event);
 		return;
+	}
 
 	if (gridMode) {
 		int scrollWid = verticalScrollBar()->sizeHint().width();
@@ -136,7 +137,9 @@ void SceneTree::dropEvent(QDropEvent *event)
 		resize(size());
 	}
 
-	emit scenesReordered();
+	QListWidget::dropEvent(event);
+
+	QTimer::singleShot(100, [this]() { emit scenesReordered(); });
 }
 
 void SceneTree::dragMoveEvent(QDragMoveEvent *event)
@@ -181,15 +184,15 @@ void SceneTree::dragMoveEvent(QDragMoveEvent *event)
 			QPoint position(xPos * g.width(), yPos * g.height());
 			setPositionForIndex(position, index);
 		}
-	} else {
-		QListWidget::dragMoveEvent(event);
 	}
+
+	QListWidget::dragMoveEvent(event);
 }
 
 void SceneTree::rowsInserted(const QModelIndex &parent, int start, int end)
 {
-	QListWidget::rowsInserted(parent, start, end);
-
 	QResizeEvent event(size(), size());
 	SceneTree::resizeEvent(&event);
+
+	QListWidget::rowsInserted(parent, start, end);
 }