summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLi Zhang <li2012.zhang@samsung.com>2016-08-23 12:57:59 +0800
committerLi Zhang <li2012.zhang@samsung.com>2016-08-23 12:57:59 +0800
commit3bea39c34729fa26a8d6401b2c643076f6e6075a (patch)
tree25f2ef720ea1543594a172b61526e0774eac008f
parentc1a228aa343105ce52de710d04003e209765ebe6 (diff)
downloadisf-3bea39c34729fa26a8d6401b2c643076f6e6075a.tar.gz
isf-3bea39c34729fa26a8d6401b2c643076f6e6075a.tar.bz2
isf-3bea39c34729fa26a8d6401b2c643076f6e6075a.zip
Fix infinite loop issue in case of EcoreSocket PanelAgent module unloading
Change-Id: I1b59096fd5a28d5c11a9ec9ad6d5adea521ad55c
-rw-r--r--ism/modules/panelagent/wayland/wayland_panel_agent_module.cpp9
-rw-r--r--ism/src/isf_info_manager.cpp5
-rw-r--r--ism/src/scim_helper.cpp1
3 files changed, 5 insertions, 10 deletions
diff --git a/ism/modules/panelagent/wayland/wayland_panel_agent_module.cpp b/ism/modules/panelagent/wayland/wayland_panel_agent_module.cpp
index e57e5434..65849b8f 100644
--- a/ism/modules/panelagent/wayland/wayland_panel_agent_module.cpp
+++ b/ism/modules/panelagent/wayland/wayland_panel_agent_module.cpp
@@ -252,6 +252,7 @@ static Input_Language input_lang
static struct weescim _wsc = {0};
InfoManager* g_info_manager = NULL;
+static scim::PanelAgentPointer instance;
/////////////////////////////////////////////////////////////////////////////
@@ -1773,13 +1774,12 @@ isf_wsc_context_filter_key_event (WSCContextISF* wsc_ctx,
if (!ignore_key) {
if (!_focused_ic || !_focused_ic->impl || !_focused_ic->impl->is_on) {
LOGD ("ic is off");
- } else {
- g_info_manager->process_key_event (key, serial);
+ } else if (g_info_manager->process_key_event (key, serial)){
return;
}
}
-
- wl_input_method_context_filter_key_event_done (wsc_ctx->im_ctx, serial, EINA_FALSE);
+ if (!instance.null())
+ instance->process_key_event_done(WAYLAND_MODULE_CLIENT_ID, wsc_ctx->id, key, EINA_FALSE, serial);
}
#endif
@@ -3060,7 +3060,6 @@ public:
}
};
-static scim::PanelAgentPointer instance;
extern "C" {
EXAPI void scim_module_init (void)
diff --git a/ism/src/isf_info_manager.cpp b/ism/src/isf_info_manager.cpp
index ab3bea25..7c597b82 100644
--- a/ism/src/isf_info_manager.cpp
+++ b/ism/src/isf_info_manager.cpp
@@ -1386,11 +1386,6 @@ public:
ctx = get_helper_ic (client, context);
return m_panel_agent_manager.process_key_event (it->second.id, ctx, m_current_helper_uuid, key, serial);
}
- else {
-#if !(ENABLE_GRAB_KEYBOARD)
- process_key_event_done (key, false, serial);
-#endif
- }
return false;
}
diff --git a/ism/src/scim_helper.cpp b/ism/src/scim_helper.cpp
index b4f7ee9c..417965ba 100644
--- a/ism/src/scim_helper.cpp
+++ b/ism/src/scim_helper.cpp
@@ -530,6 +530,7 @@ public:
}
public:
void process_key_event_done(KeyEvent &key, uint32 ret, uint32 serial) {
+ LOGD ("ret: %d, serial: %d", ret, serial);
if (socket_active.is_connected ()) {
send.clear ();
send.put_command (SCIM_TRANS_CMD_REQUEST);