瀏覽代碼

UI: Remove workaround for current scene being deselectable on Qt 6.4.3+

Qt 6.2 introduced an issue where SingleSelection item views would
deselect the current item if the user clicked on empty area in the
widget.
This was very confusing in the scene tree as it was now possible to
unselect the current scene. A workaround for this in OBS was added in
08e4ee6 and expanded on in dc30cf0, but being quite hacky it never was
the perfect solution.
I since dug into Qt and fixed the issue upstream in qt/qtbase@f11e5435c7
for Qt 6.4.3 and newer, so we can remove the workaround when using those
versions (with the long term goal of removing the code altogether).
gxalpha 2 年之前
父節點
當前提交
3e4bbe85c8
共有 3 個文件被更改,包括 9 次插入0 次删除
  1. 5 0
      UI/item-widget-helpers.cpp
  2. 2 0
      UI/scene-tree.cpp
  3. 2 0
      UI/scene-tree.hpp

+ 5 - 0
UI/item-widget-helpers.cpp

@@ -37,8 +37,10 @@ void DeleteListItem(QListWidget *widget, QListWidgetItem *item)
 
 void ClearListItems(QListWidget *widget)
 {
+#if QT_VERSION < QT_VERSION_CHECK(6, 4, 3)
 	// Workaround for the SceneTree workaround for QTBUG-105870
 	widget->setProperty("clearing", true);
+#endif
 
 	widget->setCurrentItem(nullptr, QItemSelectionModel::Clear);
 
@@ -46,5 +48,8 @@ void ClearListItems(QListWidget *widget)
 		delete widget->itemWidget(widget->item(i));
 
 	widget->clear();
+#if QT_VERSION < QT_VERSION_CHECK(6, 4, 3)
+	// Workaround for the SceneTree workaround for QTBUG-105870
 	widget->setProperty("clearing", false);
+#endif
 }

+ 2 - 0
UI/scene-tree.cpp

@@ -248,6 +248,7 @@ void SceneTree::rowsInserted(const QModelIndex &parent, int start, int end)
 	QListWidget::rowsInserted(parent, start, end);
 }
 
+#if QT_VERSION < QT_VERSION_CHECK(6, 4, 3)
 // Workaround for QTBUG-105870. Remove once that is solved upstream.
 void SceneTree::selectionChanged(const QItemSelection &selected,
 				 const QItemSelection &deselected)
@@ -256,3 +257,4 @@ void SceneTree::selectionChanged(const QItemSelection &selected,
 	    !property("clearing").toBool())
 		setCurrentRow(deselected.indexes().front().row());
 }
+#endif

+ 2 - 0
UI/scene-tree.hpp

@@ -38,9 +38,11 @@ protected:
 	virtual void dragLeaveEvent(QDragLeaveEvent *event) override;
 	virtual void rowsInserted(const QModelIndex &parent, int start,
 				  int end) override;
+#if QT_VERSION < QT_VERSION_CHECK(6, 4, 3)
 	virtual void
 	selectionChanged(const QItemSelection &selected,
 			 const QItemSelection &deselected) override;
+#endif
 
 signals:
 	void scenesReordered();