From 3e4bbe85c8be9630501e30b42e20c1f6ed7ac598 Mon Sep 17 00:00:00 2001 From: gxalpha Date: Fri, 10 Feb 2023 15:09:12 +0100 Subject: [PATCH] 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). --- UI/item-widget-helpers.cpp | 5 +++++ UI/scene-tree.cpp | 2 ++ UI/scene-tree.hpp | 2 ++ 3 files changed, 9 insertions(+) diff --git a/UI/item-widget-helpers.cpp b/UI/item-widget-helpers.cpp index b1444f933..b10c957c1 100644 --- a/UI/item-widget-helpers.cpp +++ b/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 } diff --git a/UI/scene-tree.cpp b/UI/scene-tree.cpp index 544405173..5cad22571 100644 --- a/UI/scene-tree.cpp +++ b/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 diff --git a/UI/scene-tree.hpp b/UI/scene-tree.hpp index b80918f14..0950f12ea 100644 --- a/UI/scene-tree.hpp +++ b/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();