mirror of
https://github.com/obsproject/obs-studio.git
synced 2026-01-21 04:39:05 -05:00
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 in08e4ee6and expanded on indc30cf0, 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).
56 lines
1.7 KiB
C++
56 lines
1.7 KiB
C++
/******************************************************************************
|
|
Copyright (C) 2015 by Hugh Bailey <obs.jim@gmail.com>
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation, either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
******************************************************************************/
|
|
|
|
#include <QListWidget>
|
|
|
|
QListWidgetItem *TakeListItem(QListWidget *widget, int row)
|
|
{
|
|
QListWidgetItem *item = widget->item(row);
|
|
|
|
if (item)
|
|
delete widget->itemWidget(item);
|
|
|
|
return widget->takeItem(row);
|
|
}
|
|
|
|
void DeleteListItem(QListWidget *widget, QListWidgetItem *item)
|
|
{
|
|
if (item) {
|
|
delete widget->itemWidget(item);
|
|
delete 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);
|
|
|
|
for (int i = 0; i < widget->count(); i++)
|
|
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
|
|
}
|