X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Frunxdg.cpp;fp=src%2Frunxdg.cpp;h=1ce3881a1b3e58be4cb175cfafb935b8ec995e01;hb=68adbfd5174f21830d7ddea2c102cb69d527a3c1;hp=3ff942c1bdd196c2ef7372e21cce12598c79b4bd;hpb=3227f2bf56642ea0b5495a461353b2f195112a51;p=staging%2Fxdg-launcher.git diff --git a/src/runxdg.cpp b/src/runxdg.cpp index 3ff942c..1ce3881 100644 --- a/src/runxdg.cpp +++ b/src/runxdg.cpp @@ -83,7 +83,8 @@ void RunXDG::notify_ivi_control_cb (ilmObjectType object, t_ilm_uint id, m_launcher->register_surfpid(surf_pid); if (m_launcher->m_rid && surf_pid == m_launcher->find_surfpid_by_rid(m_launcher->m_rid)) { - setup_surface(id); + m_ivi_id = id; + setup_surface(); } m_surfaces[surf_pid] = id; } else if (object == ILM_LAYER) { @@ -279,12 +280,16 @@ int RunXDG::init_wm (void) return -1; } - std::function< void(json_object*) > h_active = [](json_object* object) { + std::function< void(json_object*) > h_active = [this](json_object* object) { AGL_DEBUG("Got Event_Active"); + t_ilm_surface s_ids[1] = { this->m_ivi_id }; + ilm_setInputFocus(s_ids, 1, ILM_INPUT_DEVICE_KEYBOARD, ILM_TRUE); }; - std::function< void(json_object*) > h_inactive = [](json_object* object) { + std::function< void(json_object*) > h_inactive = [this](json_object* object) { AGL_DEBUG("Got Event_Inactive"); + t_ilm_surface s_ids[1] = { this->m_ivi_id }; + ilm_setInputFocus(s_ids, 1, ILM_INPUT_DEVICE_KEYBOARD, ILM_FALSE); }; std::function< void(json_object*) > h_visible = [](json_object* object) { @@ -332,9 +337,13 @@ int RunXDG::init_hs (void) if (json_object_object_get_ex(object, "application_name", &val)) { const char *name = json_object_get_string(val); - AGL_DEBUG("Event_TapShortcut <%s>", name); + const char *app_id = this->m_id.c_str(); + int len = strlen(name); - if (strcmp(name, this->m_role.c_str()) == 0) { + AGL_DEBUG("Event_TapShortcut ", name, app_id, len); + + if (strcmp(name, app_id) == 0 || + (strncmp(name, app_id, len) == 0 && ('@' == app_id[len]))) { // check app exist and re-launch if needed AGL_DEBUG("Activesurface %s ", this->m_role.c_str()); @@ -454,7 +463,7 @@ RunXDG::RunXDG (int port, const char* token, const char* id) AGL_FATAL("Error in config"); } - AGL_DEBUG("id=[%s], name=[%s], path=[%s], port=%lu, token=[%s]", + AGL_DEBUG("id=[%s], role=[%s], path=[%s], port=%lu, token=[%s]", m_id.c_str(), m_role.c_str(), m_path.c_str(), m_port, m_token.c_str()); @@ -471,9 +480,9 @@ RunXDG::RunXDG (int port, const char* token, const char* id) AGL_DEBUG("RunXDG created."); } -void RunXDG::setup_surface (int id) +void RunXDG::setup_surface (void) { - std::string sid = std::to_string(id); + std::string sid = std::to_string(m_ivi_id); // This surface is mine, register pair app_name and ivi id. json_object *obj = json_object_new_object(); @@ -599,7 +608,8 @@ void RunXDG::start (void) int id = itr->second; AGL_DEBUG("surface %d for <%s> already exists", id, m_role.c_str()); - setup_surface(id); + m_ivi_id = id; + setup_surface(); } } }