From: Jihoon Kim Date: Mon, 10 Aug 2020 08:07:00 +0000 (+0900) Subject: Add option to load imengine in IME process X-Git-Tag: accepted/tizen/5.5/unified/20200811.021525~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F38%2F240638%2F3;p=platform%2Fcore%2Fuifw%2Fise-default.git Add option to load imengine in IME process Change-Id: I8f9e38361f1f739ededd61ddd5e19ca189f8e37e Signed-off-by: Jihoon Kim --- diff --git a/data/layout/mobile/ise_lang_table.xml b/data/layout/mobile/ise_lang_table.xml index 8068f92..f4bba41 100644 --- a/data/layout/mobile/ise_lang_table.xml +++ b/data/layout/mobile/ise_lang_table.xml @@ -12,7 +12,7 @@ - + @@ -56,7 +56,7 @@ --> - + diff --git a/data/layout/tv/ise_lang_table.xml b/data/layout/tv/ise_lang_table.xml index 52366cb..2b76d59 100644 --- a/data/layout/tv/ise_lang_table.xml +++ b/data/layout/tv/ise_lang_table.xml @@ -12,7 +12,7 @@ - + @@ -56,7 +56,7 @@ --> - + diff --git a/data/layout/wearable/ise_lang_table.xml b/data/layout/wearable/ise_lang_table.xml index d516d8a..0c62487 100644 --- a/data/layout/wearable/ise_lang_table.xml +++ b/data/layout/wearable/ise_lang_table.xml @@ -12,7 +12,7 @@ - + diff --git a/packaging/ise-default.spec b/packaging/ise-default.spec index d768a87..66640ab 100644 --- a/packaging/ise-default.spec +++ b/packaging/ise-default.spec @@ -29,6 +29,7 @@ BuildRequires: pkgconfig(glib-2.0) BuildRequires: pkgconfig(gio-2.0) BuildRequires: pkgconfig(pkgmgr-info) Requires: ise-engine-glm +Requires: ise-engine-default # This is for old profile-based OBS project optimizations. # In 4.0 unified build env, this if statement is always true. diff --git a/src/include/languages.h b/src/include/languages.h index 00190b3..66b6522 100644 --- a/src/include/languages.h +++ b/src/include/languages.h @@ -61,6 +61,7 @@ typedef struct _LANGUAGE_INFO { priority = LANGAUGE_PRIORITY_NONE; is_latin_language = false; accepts_caps_mode = false; + load_in_ime = false; } /* Indicates whether this language was enabled in option window's language selection list */ sclboolean enabled; @@ -91,6 +92,7 @@ typedef struct _LANGUAGE_INFO { sclboolean is_latin_language; /* If this language accepts caps mode, try to handle AutoCapitalization option */ sclboolean accepts_caps_mode; + sclboolean load_in_ime; } LANGUAGE_INFO; diff --git a/src/ise-dbus.cpp b/src/ise-dbus.cpp index eba40ca..06260bb 100644 --- a/src/ise-dbus.cpp +++ b/src/ise-dbus.cpp @@ -654,6 +654,8 @@ void engine_loader_set_imengine(const char *engine_id, const char *module_name) GVariant *reply_body = NULL; bool result = false; + LOGD("engine id : %s, module name : %s", engine_id, module_name); + if (!dbus_info) { LOGW("dbus info is not allocated."); return; diff --git a/src/ise.cpp b/src/ise.cpp index c5845ec..8ebe3e7 100644 --- a/src/ise.cpp +++ b/src/ise.cpp @@ -145,12 +145,16 @@ static sclu32 _context_layout_variation = 0; Candidate *g_candidate = NULL; +static ISELanguageManager _language_manager; + class CandidateEventListener: public EventListener { public: void on_event(const EventDesc &desc) { const MultiEventDesc &multidesc = dynamic_cast(desc); + LANGUAGE_INFO *info = _language_manager.get_language_info(_language_manager.get_current_language()); + switch (multidesc.type) { case MultiEventDesc::CANDIDATE_ITEM_MOUSE_DOWN: if (g_autofill_exist) { @@ -163,13 +167,20 @@ class CandidateEventListener: public EventListener } else if (multidesc.index < (int)g_smartreply_size + 1) { ise_send_string(g_softcandidate_string[multidesc.index].c_str()); } else { - engine_loader_select_candidate(multidesc.index - g_smartreply_size - 1); + if (info && info->load_in_ime) + ime_select_candidate(multidesc.index - g_smartreply_size - 1); + else + engine_loader_select_candidate(multidesc.index - g_smartreply_size - 1); } } else { if (multidesc.index < (int)g_smartreply_size) ise_send_string(g_softcandidate_string[multidesc.index].c_str()); - else - engine_loader_select_candidate(multidesc.index - g_smartreply_size); + else { + if (info && info->load_in_ime) + ime_select_candidate(multidesc.index - g_smartreply_size); + else + engine_loader_select_candidate(multidesc.index - g_smartreply_size); + } } break; case MultiEventDesc::CANDIDATE_MORE_VIEW_SHOW: @@ -194,7 +205,6 @@ class CandidateEventListener: public EventListener }; static CandidateEventListener g_candidate_event_listener; -static ISELanguageManager _language_manager; #define MVK_Shift_L 0xffe1 #define MVK_Caps_Lock 0xffe5 #define MVK_Shift_Off 0xffe1 @@ -618,10 +628,16 @@ on_input_mode_changed(const sclchar *key_value, sclulong key_event, sclint key_t LANGUAGE_INFO *info = _language_manager.get_language_info(cur_lang); if (info) { if (info->accepts_caps_mode) { - engine_loader_send_imengine_event(MVK_Shift_Enable, 0); + if (info->load_in_ime) + ime_send_imengine_event(MVK_Shift_Enable, 0); + else + engine_loader_send_imengine_event(MVK_Shift_Enable, 0); set_caps_mode(g_keyboard_state.caps_mode); } else { - engine_loader_send_imengine_event(MVK_Shift_Disable, 0); + if (info->load_in_ime) + ime_send_imengine_event(MVK_Shift_Disable, 0); + else + engine_loader_send_imengine_event(MVK_Shift_Disable, 0); g_ui->set_shift_state(SCL_SHIFT_STATE_OFF); } } @@ -685,11 +701,20 @@ SCLEventReturnType CUIEventCallback::on_event_notification(SCLUINotiType noti_ty if (info->accepts_caps_mode) { LOGD("shift state: %d\n", desc->shift_state); if (desc->shift_state == SCL_SHIFT_STATE_OFF) { - engine_loader_send_imengine_event(MVK_Shift_Off, 0); + if (info->load_in_ime) + ime_send_imengine_event(MVK_Shift_Off, 0); + else + engine_loader_send_imengine_event(MVK_Shift_Off, 0); } else if (desc->shift_state == SCL_SHIFT_STATE_ON) { - engine_loader_send_imengine_event(MVK_Shift_On, 0); + if (info->load_in_ime) + ime_send_imengine_event(MVK_Shift_On, 0); + else + engine_loader_send_imengine_event(MVK_Shift_On, 0); } else if (desc->shift_state == SCL_SHIFT_STATE_LOCK) { - engine_loader_send_imengine_event(MVK_Shift_Lock, 0); + if (info->load_in_ime) + ime_send_imengine_event(MVK_Shift_Lock, 0); + else + engine_loader_send_imengine_event(MVK_Shift_Lock, 0); } ret = SCL_EVENT_PASS_ON; } @@ -1415,7 +1440,7 @@ ise_show(int ic) g_keyboard_state.layout == ISE_LAYOUT_STYLE_IP || g_keyboard_state.layout == ISE_LAYOUT_STYLE_MONTH || g_keyboard_state.layout == ISE_LAYOUT_STYLE_NUMBERONLY) { - + ime_set_engine_loader_flag(true); engine_loader_set_imengine(DEFAULT_KEYBOARD_ISE_UUID, DEFAULT_KEYBOARD_ISE_PKGID); } } diff --git a/src/sdk/ise_lang_table.cpp b/src/sdk/ise_lang_table.cpp index 4183e57..365aa5e 100644 --- a/src/sdk/ise_lang_table.cpp +++ b/src/sdk/ise_lang_table.cpp @@ -262,6 +262,7 @@ ISELangTableMgr::parse_lang_table(const xmlNodePtr p_node) { m_table[m_size].flush_command = get_prop_int(cur_node, "flush_command"); m_table[m_size].is_latin_language = get_prop_bool(cur_node, "is_latin_language"); m_table[m_size].accepts_caps_mode = get_prop_bool(cur_node, "accepts_caps_mode"); + m_table[m_size].load_in_ime = get_prop_bool(cur_node, "load_in_ime"); m_size++; } diff --git a/src/sdk/ise_lang_table.h b/src/sdk/ise_lang_table.h index 945186d..1327e42 100644 --- a/src/sdk/ise_lang_table.h +++ b/src/sdk/ise_lang_table.h @@ -38,6 +38,7 @@ typedef struct ISE_LANG_TABLE { flush_command = 0; is_latin_language = false; accepts_caps_mode = false; + load_in_ime = false; } /* This is the string ID of this language, used in ISE side. For example, ISE developer can use this string to select this language, by passing "Korean" to ISELanguageManager::select_language() function */ char *language; @@ -78,6 +79,7 @@ typedef struct ISE_LANG_TABLE { bool is_latin_language; /* If this language accepts caps mode, try to handle AutoCapitalization option */ bool accepts_caps_mode; + bool load_in_ime; } ISE_LANG_TABLE; typedef struct Keyboard_UUID { diff --git a/src/sdk/sdk.cpp b/src/sdk/sdk.cpp index b084d8d..26fa074 100644 --- a/src/sdk/sdk.cpp +++ b/src/sdk/sdk.cpp @@ -79,6 +79,7 @@ public : language.resource_file = MAIN_ENTRY_XML_PATH; language.is_latin_language = table[loop].is_latin_language; language.accepts_caps_mode = table[loop].accepts_caps_mode; + language.load_in_ime = table[loop].load_in_ime; /* These variable should be read from stored setting values */ language.enabled = FALSE; @@ -264,15 +265,26 @@ SCLEventReturnType CSDKISE::on_event_key_clicked(SclUIEventDesc event_desc) { SCLEventReturnType ret = SCL_EVENT_PASS_ON; const sclchar *cur_lang = _language_manager.get_current_language(); - if (event_desc.key_modifier == KEY_MODIFIER_LONGKEY) - engine_loader_flush_imengine(); + LANGUAGE_INFO *info = NULL; + if (cur_lang) + info = _language_manager.get_language_info(cur_lang); + if (event_desc.key_modifier == KEY_MODIFIER_LONGKEY) { + if (info && info->load_in_ime) + ime_flush_imengine(); + else + engine_loader_flush_imengine(); + } switch (event_desc.key_type) { case KEY_TYPE_CHAR: ret = process_key_type_char(event_desc); break; case KEY_TYPE_STRING: - engine_loader_flush_imengine(); + if (info && info->load_in_ime) + ime_flush_imengine(); + else + engine_loader_flush_imengine(); + if (cur_lang && strcmp(cur_lang, "Korean") == 0) { process_korean_automata(false, SIPKEY_ERROR); } @@ -283,7 +295,11 @@ SCLEventReturnType CSDKISE::on_event_key_clicked(SclUIEventDesc event_desc) break; case KEY_TYPE_MODECHANGE: { - engine_loader_flush_imengine(); + if (info && info->load_in_ime) + ime_flush_imengine(); + else + engine_loader_flush_imengine(); + if (cur_lang && strcmp(cur_lang, "Korean") == 0) { process_korean_automata(false, SIPKEY_ERROR); } @@ -303,14 +319,20 @@ SCLEventReturnType CSDKISE::on_event_key_clicked(SclUIEventDesc event_desc) } else if (event_desc.key_event == MVK_space) { if (_language_manager.get_enabled_languages_num() > 1) { if (event_desc.key_modifier == KEY_MODIFIER_DIRECTION_LEFT) { - engine_loader_flush_imengine(); + if (info && info->load_in_ime) + ime_flush_imengine(); + else + engine_loader_flush_imengine(); /* If flick event upon space key was detected, perform a language change and don't proceed anymore */ _language_manager.select_previous_language(); g_keyboard_state.disable_force_latin = TRUE; ret = SCL_EVENT_DONE; } else if (event_desc.key_modifier == KEY_MODIFIER_DIRECTION_RIGHT) { - engine_loader_flush_imengine(); + if (info && info->load_in_ime) + ime_flush_imengine(); + else + engine_loader_flush_imengine(); /* If flick event upon space key was detected, perform a language change and don't proceed anymore */ _language_manager.select_next_language(); @@ -398,7 +420,16 @@ sclboolean CSDKISE::on_language_selected(const sclchar *language, const sclchar if (ret == PMINFO_R_OK) { ret = pkgmgrinfo_appinfo_get_pkgid(handle, &pkgid); if (ret == PMINFO_R_OK) { - engine_loader_set_imengine(table[loop].keyboard_ise_uuid, pkgid); + if (table[loop].load_in_ime) { + engine_loader_set_imengine(DEFAULT_KEYBOARD_ISE_UUID, DEFAULT_KEYBOARD_ISE_PKGID); + ime_set_engine_loader_flag(false); + ime_set_imengine(table[loop].keyboard_ise_uuid); + } + else { + ime_set_imengine(DEFAULT_KEYBOARD_ISE_UUID); + ime_set_engine_loader_flag(true); + engine_loader_set_imengine(table[loop].keyboard_ise_uuid, pkgid); + } } else { LOGE("Retrieve pkgid failed : %s, %p", table[loop].keyboard_ise_uuid, handle); @@ -428,11 +459,17 @@ sclboolean CSDKISE::on_language_selected(const sclchar *language, const sclchar if (info->accepts_caps_mode) { if (g_keyboard_state.caps_mode) { g_ui->set_shift_state(SCL_SHIFT_STATE_ON); - engine_loader_send_imengine_event(MVK_Shift_On, 0); + if (table[loop].load_in_ime) + ime_send_imengine_event(MVK_Shift_On, 0); + else + engine_loader_send_imengine_event(MVK_Shift_On, 0); g_keyboard_state.caps_mode = TRUE; } else { g_ui->set_shift_state(SCL_SHIFT_STATE_OFF); - engine_loader_send_imengine_event(MVK_Shift_Off, 0); + if (table[loop].load_in_ime) + ime_send_imengine_event(MVK_Shift_Off, 0); + else + engine_loader_send_imengine_event(MVK_Shift_Off, 0); g_keyboard_state.caps_mode = FALSE; } } else { @@ -573,7 +610,10 @@ sclboolean CSDKISE::flush_imengine(const sclchar *language) */ bRet = true; } else { - engine_loader_reset_imengine(); + if (table[lang_id].load_in_ime) + ime_reset_imengine(); + else + engine_loader_reset_imengine(); bRet = true; } }