From e8c4e7181c266f176168bdc71c25a40366c319c1 Mon Sep 17 00:00:00 2001 From: Warchamp7 Date: Fri, 28 Aug 2026 20:39:38 +0200 Subject: [PATCH] frontend: Use styling for source items appearance The icon and text label for items in the source list was previously enabled/disabled based on scene item visibility state. As of Qt 6.11 Qt no longer triggers context menus when right clicking a disabled QLabel. This means right-clicking a hidden scene item would not show a context menu. Updates SourceTreeItem to use styling classes via idian helpers instead of changing the enabled state of these labels. --- frontend/components/SourceTreeItem.cpp | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/frontend/components/SourceTreeItem.cpp b/frontend/components/SourceTreeItem.cpp index d5bfb71e7..79059f155 100644 --- a/frontend/components/SourceTreeItem.cpp +++ b/frontend/components/SourceTreeItem.cpp @@ -4,6 +4,7 @@ #include #include +#include #include #include @@ -68,20 +69,23 @@ SourceTreeItem::SourceTreeItem(SourceTree *tree_, OBSSceneItem sceneitem_) : tre iconLabel = new QLabel(); iconLabel->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); iconLabel->setPixmap(pixmap); - iconLabel->setEnabled(sourceVisible); iconLabel->setStyleSheet("background: none"); - iconLabel->setProperty("class", "source-icon"); + idian::Utils::addClass(iconLabel, "source-icon"); + idian::Utils::toggleClass(iconLabel, "text-muted", !sourceVisible); + idian::Utils::applyColorToIcon(iconLabel); } vis = new QCheckBox(); - vis->setProperty("class", "checkbox-icon indicator-visibility"); + idian::Utils::addClass(vis, "checkbox-icon"); + idian::Utils::addClass(vis, "indicator-visibility"); vis->setChecked(sourceVisible); vis->setAccessibleName(QTStr("Basic.Main.Sources.Visibility")); vis->setAccessibleDescription(QTStr("Basic.Main.Sources.VisibilityDescription").arg(name)); vis->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); lock = new QCheckBox(); - lock->setProperty("class", "checkbox-icon indicator-lock"); + idian::Utils::addClass(lock, "checkbox-icon"); + idian::Utils::addClass(lock, "indicator-lock"); lock->setChecked(obs_sceneitem_locked(sceneitem)); lock->setAccessibleName(QTStr("Basic.Main.Sources.Lock")); lock->setAccessibleDescription(QTStr("Basic.Main.Sources.LockDescription").arg(name)); @@ -90,13 +94,13 @@ SourceTreeItem::SourceTreeItem(SourceTree *tree_, OBSSceneItem sceneitem_) : tre label = new OBSSourceLabel(source); label->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Preferred); label->setAttribute(Qt::WA_TranslucentBackground); - label->setEnabled(sourceVisible); + idian::Utils::toggleClass(label, "text-muted", !sourceVisible); const char *sourceId = obs_source_get_unversioned_id(source); switch (obs_source_load_state(sourceId)) { case OBS_MODULE_DISABLED: case OBS_MODULE_MISSING: - label->setStyleSheet("QLabel {color: #CC0000;}"); + idian::Utils::addClass(label, "text-danger"); break; default: break; @@ -470,9 +474,10 @@ bool SourceTreeItem::eventFilter(QObject *object, QEvent *event) void SourceTreeItem::VisibilityChanged(bool visible) { if (iconLabel) { - iconLabel->setEnabled(visible); + idian::Utils::toggleClass(iconLabel, "text-muted", !visible); + idian::Utils::applyColorToIcon(iconLabel); } - label->setEnabled(visible); + idian::Utils::toggleClass(label, "text-muted", !visible); vis->setChecked(visible); } @@ -538,7 +543,7 @@ void SourceTreeItem::Update(bool force) } else if (type == Type::Group) { expand = new QCheckBox(); - expand->setProperty("class", "checkbox-icon indicator-expand"); + idian::Utils::addClass(expand, "checkbox-icon indicator-expand"); expand->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Maximum); #ifdef __APPLE__ expand->setAttribute(Qt::WA_LayoutUsesWidgetRect);