diff --git a/obs/window-basic-main.cpp b/obs/window-basic-main.cpp index 2c19ace85..cb19c6052 100644 --- a/obs/window-basic-main.cpp +++ b/obs/window-basic-main.cpp @@ -622,17 +622,18 @@ bool OBSBasic::InitBasicConfig() void OBSBasic::InitOBSCallbacks() { - signal_handler_connect(obs_get_signal_handler(), "source_add", + signalHandlers.reserve(signalHandlers.size() + 6); + signalHandlers.emplace_back(obs_get_signal_handler(), "source_add", OBSBasic::SourceAdded, this); - signal_handler_connect(obs_get_signal_handler(), "source_remove", + signalHandlers.emplace_back(obs_get_signal_handler(), "source_remove", OBSBasic::SourceRemoved, this); - signal_handler_connect(obs_get_signal_handler(), "channel_change", + signalHandlers.emplace_back(obs_get_signal_handler(), "channel_change", OBSBasic::ChannelChanged, this); - signal_handler_connect(obs_get_signal_handler(), "source_activate", + signalHandlers.emplace_back(obs_get_signal_handler(), "source_activate", OBSBasic::SourceActivated, this); - signal_handler_connect(obs_get_signal_handler(), "source_deactivate", + signalHandlers.emplace_back(obs_get_signal_handler(), "source_deactivate", OBSBasic::SourceDeactivated, this); - signal_handler_connect(obs_get_signal_handler(), "source_rename", + signalHandlers.emplace_back(obs_get_signal_handler(), "source_rename", OBSBasic::SourceRenamed, this); } @@ -1974,6 +1975,8 @@ void OBSBasic::closeEvent(QCloseEvent *event) if (logUploadThread) logUploadThread->wait(); + signalHandlers.clear(); + /* Check all child dialogs and ensure they run their proper closeEvent * methods before exiting the application. Otherwise Qt doesn't send * the proper QCloseEvent messages. */ diff --git a/obs/window-basic-main.hpp b/obs/window-basic-main.hpp index a8b3582b0..2ccd1406e 100644 --- a/obs/window-basic-main.hpp +++ b/obs/window-basic-main.hpp @@ -66,6 +66,8 @@ private: std::vector volumes; + std::vector signalHandlers; + bool loaded = false; QPointer saveTimer;