From b2764f149e726b45b228a716ca93835a6a17ad67 Mon Sep 17 00:00:00 2001 From: InHong Han Date: Tue, 21 Aug 2018 14:32:36 +0900 Subject: [PATCH] Fix issue IME doesn't appear after IME is restarted Change-Id: If12e3323ee14e92e6166b1153afbf81bea869994 --- ism/modules/panelagent/wayland/wayland_panel_agent_module.cpp | 8 ++++++++ ism/src/isf_info_manager.cpp | 1 + ism/src/isf_panel_agent_base.cpp | 4 ++++ ism/src/isf_panel_agent_base.h | 9 +++++++++ ism/src/isf_panel_agent_manager.cpp | 8 ++++++++ ism/src/isf_panel_agent_manager.h | 1 + 6 files changed, 31 insertions(+) diff --git a/ism/modules/panelagent/wayland/wayland_panel_agent_module.cpp b/ism/modules/panelagent/wayland/wayland_panel_agent_module.cpp index 3690fa4..15e99fe 100644 --- a/ism/modules/panelagent/wayland/wayland_panel_agent_module.cpp +++ b/ism/modules/panelagent/wayland/wayland_panel_agent_module.cpp @@ -3509,6 +3509,14 @@ public: wsc_context_input_panel_layout_variation_get (ic), wsc_context_autocapital_type_get (ic), ic->return_key_disabled); } } + + void request_ise_reshow (int id, uint32 context_id) { + LOGD ("client id:%d", id); + WSCContextISF* ic = find_ic (context_id); + if (!ic) return; + + wl_input_method_context_reshow_input_panel (ic->im_ctx); + } }; extern "C" { diff --git a/ism/src/isf_info_manager.cpp b/ism/src/isf_info_manager.cpp index 4887551..1fab5b7 100644 --- a/ism/src/isf_info_manager.cpp +++ b/ism/src/isf_info_manager.cpp @@ -2275,6 +2275,7 @@ public: focused_context = 0; } + m_panel_agent_manager.request_ise_reshow (focused_client, focused_context); m_panel_agent_manager.update_entry_metadata (focused_client, focused_context); uint32 ctx = get_helper_ic (focused_client, focused_context); bool ret = show_helper (m_current_helper_uuid, m_ise_context_buffer, m_ise_context_length, ctx); diff --git a/ism/src/isf_panel_agent_base.cpp b/ism/src/isf_panel_agent_base.cpp index 99f76a1..77b2339 100644 --- a/ism/src/isf_panel_agent_base.cpp +++ b/ism/src/isf_panel_agent_base.cpp @@ -531,6 +531,10 @@ void PanelAgentBase::send_fail_reply (int client) void PanelAgentBase::update_entry_metadata (int client, uint32 context) { } + +void PanelAgentBase::request_ise_reshow (int client, uint32 context) +{ +} } /* namespace scim */ /* diff --git a/ism/src/isf_panel_agent_base.h b/ism/src/isf_panel_agent_base.h index 39a27fb..ccc3d8c 100644 --- a/ism/src/isf_panel_agent_base.h +++ b/ism/src/isf_panel_agent_base.h @@ -1033,6 +1033,15 @@ public: * @return none. */ virtual void update_entry_metadata (int client, uint32 context); + + /** + * @brief request_ise_reshow. + * + * @param + * + * @return none. + */ + virtual void request_ise_reshow (int client, uint32 context); }; /** @} */ diff --git a/ism/src/isf_panel_agent_manager.cpp b/ism/src/isf_panel_agent_manager.cpp index 6a57c4a..961396d 100644 --- a/ism/src/isf_panel_agent_manager.cpp +++ b/ism/src/isf_panel_agent_manager.cpp @@ -998,6 +998,14 @@ void PanelAgentManager::update_entry_metadata (int id, uint32 context_id) _p->update_entry_metadata (id, context_id); } +void PanelAgentManager::request_ise_reshow (int id, uint32 context_id) +{ + PanelAgentPointer _p = m_impl->get_panel_agent_by_id (id); + + if (!_p.null ()) + _p->request_ise_reshow (id, context_id); +} + } /* namespace scim */ /* diff --git a/ism/src/isf_panel_agent_manager.h b/ism/src/isf_panel_agent_manager.h index c9faa9f..5ddfb77 100644 --- a/ism/src/isf_panel_agent_manager.h +++ b/ism/src/isf_panel_agent_manager.h @@ -369,6 +369,7 @@ public: void set_prediction_allow (int id, uint32 context_id, String uuid, int mode); void send_fail_reply (int client); void update_entry_metadata(int client, uint32 context_id); + void request_ise_reshow(int client, uint32 context_id); }; /** @} */ -- 2.7.4