void Component::Finish() {
auto& mgr = internal::ComponentManager::GetInst();
- mgr.Exit(impl_->GetInstanceID());
+ mgr.ExitAtIdle(impl_->GetInstanceID());
}
Component::Type Component::GetType() {
#include <aul_app_group.h>
#include <app_control_internal.h>
#include <bundle_internal.h>
+#include <glib.h>
#include <algorithm>
#include <memory>
appcore_multiwindow_base_instance_exit(context);
}
+void ComponentManager::ExitAtIdle(const std::string& inst_id) {
+ g_idle_add([](gpointer data) -> gboolean {
+ char* inst_id = static_cast<char*>(data);
+ ComponentManager::GetInst().Exit(inst_id);
+ free(inst_id);
+ return G_SOURCE_REMOVE;
+ }, strdup(inst_id.c_str()));
+}
+
void ComponentManager::ExitAll() {
if (inst_map_.empty())
return;
ev->OnStop();
ev->OnDestroy();
mgr.Remove(inst_id);
+
+ if (appcore_multiwindow_base_instance_get_cnt() == 1) {
+ LOGD("Exit");
+ appcore_multiwindow_base_exit();
+ }
}
void ComponentManager::OnPauseCB(appcore_multiwindow_base_instance_h context,
void Stop(const std::string& inst_id);
void Exit(const std::string& inst_id);
+ void ExitAtIdle(const std::string& inst_id);
void ExitAll();
bool Bind(const std::string& inst_id, std::unique_ptr<IWindow> win);
void Unbind(const std::string& inst_id);