diff --git a/main/ui/ui_handler.cpp b/main/ui/ui_handler.cpp index b01a146..b7ef8c9 100644 --- a/main/ui/ui_handler.cpp +++ b/main/ui/ui_handler.cpp @@ -1,6 +1,7 @@ #include "ui/ui_handler.h" #include "ui/apps/registry.h" #include "esp_log.h" +#include #define TAG "UIHandler" @@ -11,6 +12,11 @@ struct AppClickUserData { UIHandler::~UIHandler() { deinit(); + // Clean up all allocated AppClickUserData + for (void* data : app_click_user_data_) { + delete static_cast(data); + } + app_click_user_data_.clear(); } esp_err_t UIHandler::init(void) { @@ -267,6 +273,10 @@ esp_err_t UIHandler::create_main_screen_(lv_obj_t* parent) { // Center the icon container lv_obj_center(app_icon_container); + // Create and track user data for the callback + auto* click_data = new AppClickUserData { this, name }; + app_click_user_data_.push_back(click_data); + // Register click event to switch to the app lv_obj_add_event_cb(app_icon_container, [](lv_event_t* e) { @@ -282,7 +292,7 @@ esp_err_t UIHandler::create_main_screen_(lv_obj_t* parent) { } }, LV_EVENT_CLICKED, - new AppClickUserData { this, name } + click_data ); } diff --git a/main/ui/ui_handler.h b/main/ui/ui_handler.h index 4a9ce68..531a031 100644 --- a/main/ui/ui_handler.h +++ b/main/ui/ui_handler.h @@ -7,6 +7,7 @@ #include "ui/interaction_handler.h" #include "lvgl.h" #include +#include /** * @brief UI Handler - manages app lifecycle and rendering @@ -115,4 +116,7 @@ private: lv_obj_t* main_screen_ = nullptr; ///< Root screen RootLayout root_layout_; ///< Main screen layout manager AppDescriptor* active_descriptor_ = nullptr; ///< Currently active app descriptor (managed by AppRegistry) + + // Track allocated user data for cleanup + std::vector app_click_user_data_; };