Remove from list based upon data, not string

- Added an extra comment regarding source removal

 - Made is so that when a scene item is removed from the sources list
   box, it removes the item based upon the GetClientData rather than by
   its string name.  This is done because there may be duplicate sources
   in a particular scene, and it's important to remove the right one.
master
jp9000 2014-01-04 19:26:15 -07:00
parent 717a2538f4
commit 25acf095ab
1 changed files with 11 additions and 5 deletions

View File

@ -67,12 +67,15 @@ void OBSBasic::AddSceneItem(obs_sceneitem_t item)
void OBSBasic::RemoveSceneItem(obs_sceneitem_t item)
{
obs_source_t source = obs_sceneitem_getsource(item);
const char *name = obs_source_getname(source);
for (unsigned int idx = 0; idx < sources->GetCount(); idx++) {
obs_sceneitem_t curItem;
curItem = (obs_sceneitem_t)sources->GetClientData(idx);
int idx = sources->FindString(WX_UTF8(name));
if (idx != wxNOT_FOUND)
sources->Delete(idx);
if (item == curItem) {
sources->Delete(idx);
break;
}
}
}
void OBSBasic::UpdateSources(obs_scene_t scene)
@ -456,6 +459,9 @@ void OBSBasic::sourceRemoveClicked(wxCommandEvent &event)
obs_source_t source = obs_sceneitem_getsource(item);
int ref = obs_sceneitem_destroy(item);
/* If this is the last reference in the scene, mark the source for
* removal. Reference count being at 1 means that it's no longer in
* any more scenes. */
if (ref == 1)
obs_source_remove(source);
}