libobs, UI: Implement item_locked event

Similar to item_visible, this event fires whenever a scene item is
locked or unlocked. This allows the UI and libobs to remain in sync
regarding scene elements' statuses.
This commit is contained in:
Chris Angelico
2019-05-24 21:34:41 +10:00
committed by jp9000
parent dd607b422f
commit 2fe641b8a4
5 changed files with 46 additions and 0 deletions

View File

@@ -130,6 +130,7 @@ void SourceTreeItem::DisconnectSignals()
itemRemoveSignal.Disconnect();
deselectSignal.Disconnect();
visibleSignal.Disconnect();
lockedSignal.Disconnect();
renameSignal.Disconnect();
removeSignal.Disconnect();
}
@@ -177,6 +178,18 @@ void SourceTreeItem::ReconnectSignals()
Q_ARG(bool, visible));
};
auto itemLocked = [] (void *data, calldata_t *cd)
{
SourceTreeItem *this_ = reinterpret_cast<SourceTreeItem*>(data);
obs_sceneitem_t *curItem =
(obs_sceneitem_t*)calldata_ptr(cd, "item");
bool locked = calldata_bool(cd, "locked");
if (curItem == this_->sceneitem)
QMetaObject::invokeMethod(this_, "LockedChanged",
Q_ARG(bool, locked));
};
auto itemDeselect = [] (void *data, calldata_t *cd)
{
SourceTreeItem *this_ = reinterpret_cast<SourceTreeItem*>(data);
@@ -200,6 +213,7 @@ void SourceTreeItem::ReconnectSignals()
sceneRemoveSignal.Connect(signal, "remove", removeItem, this);
itemRemoveSignal.Connect(signal, "item_remove", removeItem, this);
visibleSignal.Connect(signal, "item_visible", itemVisible, this);
lockedSignal.Connect(signal, "item_locked", itemLocked, this);
if (obs_sceneitem_is_group(sceneitem)) {
obs_source_t *source = obs_sceneitem_get_source(sceneitem);
@@ -368,6 +382,11 @@ void SourceTreeItem::VisibilityChanged(bool visible)
vis->setChecked(visible);
}
void SourceTreeItem::LockedChanged(bool locked)
{
lock->setChecked(locked);
}
void SourceTreeItem::Renamed(const QString &name)
{
label->setText(name);