UI: Add deferred function to update context bar

With the queued connection in d68484e7, the "Deselect" signal for
sources which are being deleted is never fired, as the object is gone by
the time the queued signal is processed. This results in the context bar
not updating.

This commit adds a new UpdateContextBarDeferred function, allowing
queuing of only the context bar update instead of the whole signal
handler.
This commit is contained in:
Richard Stanway 2020-12-14 15:40:15 +01:00 committed by Jim
parent 580eecda01
commit 38ad3ba18f
3 changed files with 11 additions and 6 deletions

View file

@ -227,8 +227,7 @@ void SourceTreeItem::ReconnectSignals()
(obs_sceneitem_t *)calldata_ptr(cd, "item");
if (curItem == this_->sceneitem)
QMetaObject::invokeMethod(this_, "Select",
Qt::QueuedConnection);
QMetaObject::invokeMethod(this_, "Select");
};
auto itemDeselect = [](void *data, calldata_t *cd) {
@ -238,8 +237,7 @@ void SourceTreeItem::ReconnectSignals()
(obs_sceneitem_t *)calldata_ptr(cd, "item");
if (curItem == this_->sceneitem)
QMetaObject::invokeMethod(this_, "Deselect",
Qt::QueuedConnection);
QMetaObject::invokeMethod(this_, "Deselect");
};
auto reorderGroup = [](void *data, calldata_t *) {
@ -538,13 +536,13 @@ void SourceTreeItem::ExpandClicked(bool checked)
void SourceTreeItem::Select()
{
tree->SelectItem(sceneitem, true);
OBSBasic::Get()->UpdateContextBar();
OBSBasic::Get()->UpdateContextBarDeferred();
}
void SourceTreeItem::Deselect()
{
tree->SelectItem(sceneitem, false);
OBSBasic::Get()->UpdateContextBar();
OBSBasic::Get()->UpdateContextBarDeferred();
}
/* ========================================================================= */

View file

@ -2948,6 +2948,12 @@ static bool is_network_media_source(obs_source_t *source, const char *id)
return !is_local_file;
}
void OBSBasic::UpdateContextBarDeferred(bool force)
{
QMetaObject::invokeMethod(this, "UpdateContextBar",
Qt::QueuedConnection, Q_ARG(bool, force));
}
void OBSBasic::UpdateContextBar(bool force)
{
if (!ui->contextContainer->isVisible() && !force)

View file

@ -1024,6 +1024,7 @@ public slots:
void ClearContextBar();
void UpdateContextBar(bool force = false);
void UpdateContextBarDeferred(bool force = false);
public:
explicit OBSBasic(QWidget *parent = 0);