From e82018579bc4a69d55c653d175a910b9a06bd3bb Mon Sep 17 00:00:00 2001 From: Palana Date: Sat, 27 Jun 2015 09:28:40 +0200 Subject: [PATCH] UI: Remove scene signal handlers in closeEvent --- obs/window-basic-main.cpp | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/obs/window-basic-main.cpp b/obs/window-basic-main.cpp index 5d48c2d3a..5ebe71f10 100644 --- a/obs/window-basic-main.cpp +++ b/obs/window-basic-main.cpp @@ -62,6 +62,7 @@ Q_DECLARE_METATYPE(OBSScene); Q_DECLARE_METATYPE(OBSSceneItem); Q_DECLARE_METATYPE(OBSSource); Q_DECLARE_METATYPE(obs_order_movement); +Q_DECLARE_METATYPE(std::vector>); template static T GetOBSRef(QListWidgetItem *item) @@ -1091,16 +1092,22 @@ void OBSBasic::AddScene(OBSSource source) }, static_cast(source)); signal_handler_t *handler = obs_source_get_signal_handler(source); - signal_handler_connect(handler, "item_add", - OBSBasic::SceneItemAdded, this); - signal_handler_connect(handler, "item_remove", - OBSBasic::SceneItemRemoved, this); - signal_handler_connect(handler, "item_select", - OBSBasic::SceneItemSelected, this); - signal_handler_connect(handler, "item_deselect", - OBSBasic::SceneItemDeselected, this); - signal_handler_connect(handler, "reorder", - OBSBasic::SceneReordered, this); + + std::vector> handlers{ + std::make_shared(handler, "item_add", + OBSBasic::SceneItemAdded, this), + std::make_shared(handler, "item_remove", + OBSBasic::SceneItemRemoved, this), + std::make_shared(handler, "item_select", + OBSBasic::SceneItemSelected, this), + std::make_shared(handler, "item_deselect", + OBSBasic::SceneItemDeselected, this), + std::make_shared(handler, "reorder", + OBSBasic::SceneReordered, this), + }; + + item->setData(static_cast(QtDataRole::OBSSignals), + QVariant::fromValue(handlers)); } void OBSBasic::RemoveScene(OBSSource source) @@ -2017,7 +2024,10 @@ void OBSBasic::closeEvent(QCloseEvent *event) * their internal data */ ClearVolumeControls(); ui->sources->clear(); - ui->scenes->clear(); + + QListWidgetItem *item = nullptr; + while ((item = ui->scenes->takeItem(0))) + delete item; } void OBSBasic::changeEvent(QEvent *event)