From 342d90b82ad1f32550caabecc1c895acc46c7152 Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Wed, 19 Aug 2020 21:43:47 -0500 Subject: [PATCH] Add function to unregister update callback when device page is deleted --- RGBController/RGBController.cpp | 14 ++++++++++++++ RGBController/RGBController.h | 1 + qt/OpenRGBDevicePage.cpp | 3 ++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/RGBController/RGBController.cpp b/RGBController/RGBController.cpp index 4802f053..7d42ae4a 100644 --- a/RGBController/RGBController.cpp +++ b/RGBController/RGBController.cpp @@ -1334,6 +1334,20 @@ void RGBController::RegisterUpdateCallback(RGBControllerCallback new_callback, v UpdateCallbackArgs.push_back(new_callback_arg); } +void RGBController::UnregisterUpdateCallback(void * callback_arg) +{ + for(unsigned int callback_idx = 0; callback_idx < UpdateCallbackArgs.size(); callback_idx++ ) + { + if(UpdateCallbackArgs[callback_idx] == callback_arg) + { + UpdateCallbackArgs.erase(UpdateCallbackArgs.begin() + callback_idx); + UpdateCallbacks.erase(UpdateCallbacks.begin() + callback_idx); + + break; + } + } +} + void RGBController::SignalUpdate() { UpdateMutex.lock(); diff --git a/RGBController/RGBController.h b/RGBController/RGBController.h index e4805eb8..69153669 100644 --- a/RGBController/RGBController.h +++ b/RGBController/RGBController.h @@ -192,6 +192,7 @@ public: void SetSingleLEDColorDescription(unsigned char* data_buf); void RegisterUpdateCallback(RGBControllerCallback new_callback, void * new_callback_arg); + void UnregisterUpdateCallback(void * callback_arg); void SignalUpdate(); void UpdateLEDs(); diff --git a/qt/OpenRGBDevicePage.cpp b/qt/OpenRGBDevicePage.cpp index e54efd28..2f5c9ec1 100644 --- a/qt/OpenRGBDevicePage.cpp +++ b/qt/OpenRGBDevicePage.cpp @@ -8,7 +8,7 @@ static void UpdateCallback(void * this_ptr) { OpenRGBDevicePage * this_obj = (OpenRGBDevicePage *)this_ptr; - //QMetaObject::invokeMethod(this_obj, "UpdateInterface", Qt::QueuedConnection); + QMetaObject::invokeMethod(this_obj, "UpdateInterface", Qt::QueuedConnection); } OpenRGBDevicePage::OpenRGBDevicePage(RGBController *dev, QWidget *parent) : @@ -97,6 +97,7 @@ OpenRGBDevicePage::OpenRGBDevicePage(RGBController *dev, QWidget *parent) : OpenRGBDevicePage::~OpenRGBDevicePage() { + device->UnregisterUpdateCallback(this); delete ui; }