diff --git a/obs/window-basic-main.cpp b/obs/window-basic-main.cpp index e805258cc..5e6f7aec1 100644 --- a/obs/window-basic-main.cpp +++ b/obs/window-basic-main.cpp @@ -29,6 +29,20 @@ void OBSBasic::SceneAdded(obs_source_t source) scenes->Append(wxString(name, wxConvUTF8), scene); } +void OBSBasic::SceneRemoved(obs_source_t source) +{ + const char *name = obs_source_getname(source); + + int item = scenes->FindString(name); + if (item == wxNOT_FOUND) { + blog(LOG_WARNING, "Tried to remove the scene '%s', but " + "apparently it wasn't found", name); + return; + } + + scenes->Delete(item); +} + void OBSBasic::SourceAdded(void *data, calldata_t params) { OBSBasic *window = (OBSBasic*)data; @@ -50,7 +64,11 @@ void OBSBasic::SourceDestroyed(void *data, calldata_t params) calldata_getptr(params, "source", (void**)&source); - /* TODO */ + obs_source_type type; + obs_source_gettype(source, &type, NULL); + + if (type == SOURCE_SCENE) + window->SceneRemoved(source); } bool OBSBasic::Init() diff --git a/obs/window-basic-main.hpp b/obs/window-basic-main.hpp index 7d33b0eb5..155f3c58b 100644 --- a/obs/window-basic-main.hpp +++ b/obs/window-basic-main.hpp @@ -26,6 +26,7 @@ using namespace std; class OBSBasic : public OBSBasicBase { void SceneAdded(obs_source_t scene); + void SceneRemoved(obs_source_t scene); static void SourceAdded(void *data, calldata_t params); static void SourceDestroyed(void *data, calldata_t params);