*/
#include "aul/api/aul_app_event.h"
+
+#include <glib.h>
+
#include "aul/app_manager/app_event.hh"
#include "aul/common/api.hh"
#include "aul/common/exception.hh"
user_data_(user_data) {
}
- void OnAppLaunched(const AppContext* context) override {
- AppContext* ctx = const_cast<AppContext*>(context);
- launched_cb_(static_cast<aul_app_context_h>(ctx), user_data_);
- }
+ void OnAppLaunched(const AppContext* context) override {
+ if (disposing_)
+ return;
+
+ AppContext* ctx = const_cast<AppContext*>(context);
+ launched_cb_(static_cast<aul_app_context_h>(ctx), user_data_);
+ }
+
+ void OnAppTerminated(const AppContext* context) override {
+ if (disposing_)
+ return;
- void OnAppTerminated(const AppContext* context) override {
- AppContext* ctx = const_cast<AppContext*>(context);
- terminated_cb_(static_cast<aul_app_context_h>(ctx), user_data_);
- }
+ AppContext* ctx = const_cast<AppContext*>(context);
+ terminated_cb_(static_cast<aul_app_context_h>(ctx), user_data_);
+ }
+
+ void Dispose() {
+ if (disposing_)
+ return;
+
+ disposing_ = true;
+ g_idle_add_full(G_PRIORITY_HIGH,
+ [](gpointer user_data) {
+ auto* event = static_cast<AppEventStub*>(user_data);
+ delete event;
+ return G_SOURCE_REMOVE;
+ }, this, nullptr);
+ }
private:
+ bool disposing_ = false;
aul_app_event_launched_cb launched_cb_;
aul_app_event_terminated_cb terminated_cb_;
void* user_data_;
}
*app_event = static_cast<aul_app_event_h>(handle);
-
return AUL_R_OK;
}
}
*app_event = static_cast<aul_app_event_h>(handle);
-
return AUL_R_OK;
}
}
auto* handle = static_cast<AppEventStub*>(app_event);
- delete handle;
-
+ handle->Dispose();
return AUL_R_OK;
}