From 7a8d46d86b5aa042b5ddbd75e60293c807b509d8 Mon Sep 17 00:00:00 2001 From: liuxd Date: Sat, 31 Mar 2018 00:40:25 +0800 Subject: [PATCH] Fix help not show in abnormal condition and cause setting not work Signed-off-by: liuxd Change-Id: I3bf1e54a2aca72cb87814958a045b3b9428e5a26 Signed-off-by: liuxd --- src/ise.cpp | 133 +++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 82 insertions(+), 51 deletions(-) diff --git a/src/ise.cpp b/src/ise.cpp index e235dfb..fdbb38b 100644 --- a/src/ise.cpp +++ b/src/ise.cpp @@ -99,9 +99,6 @@ static int g_autofill_hint = 0; static string g_autofill_string; static vector g_lookup_table_strings; static vector g_smartreply_strings; -#ifdef _MOBILE -static Ecore_Timer *guideline_timer = NULL; -#endif #if EXIT_ISE_ON_HIDE static Ecore_Timer *exit_timer = NULL; #endif @@ -217,7 +214,8 @@ static ISELanguageManager _language_manager; static sclboolean _cm_popup_opened = FALSE; static const char *_cm_key_list[CM_KEY_LIST_SIZE] = {USER_KEYSTRING_OPTION, USER_KEYSTRING_EMOTICON, USER_KEYSTRING_CLIPBOARD, USER_KEYSTRING_VOICE, USER_KEYSTRING_FLOATING}; static scluint _current_cm_key_id = 0; -Evas_Object* _guide_popup_window = NULL; +Evas_Object* _guide_popup_setting = NULL; +Evas_Object* _guide_popup_space = NULL; /* * This callback class will receive all response events from SCL @@ -739,27 +737,26 @@ SCLEventReturnType CUIEventCallback::on_event_notification(SCLUINotiType noti_ty return ret; } -void ise_destory_guideline_popup() +void ise_destory_popup_setting() { - if (_guide_popup_window != NULL) { - evas_object_del(_guide_popup_window); - _guide_popup_window = NULL; + if (_guide_popup_setting != NULL) { + LOGD("destroy setting popup iter\n"); + evas_object_del(_guide_popup_setting); + _guide_popup_setting = NULL; + g_config_values.first_guideset = TRUE; + write_ise_config_values(); } } -void _guideline_popup_dismissed_cb(void *data, Evas_Object *obj, void *event_info) +void ise_destory_popup_space() { - evas_object_smart_callback_del(obj, "dismissed", _guideline_popup_dismissed_cb); - evas_object_del(obj); - obj = NULL; - - if (_guide_popup_window != NULL) { - evas_object_del(_guide_popup_window); - _guide_popup_window = NULL; + if (_guide_popup_space != NULL) { + LOGD("destroy space popup iter\n"); + evas_object_del(_guide_popup_space); + _guide_popup_setting = NULL; + g_config_values.first_guidechange = TRUE; + write_ise_config_values(); } - - g_config_values.first_guideset = TRUE; - write_ise_config_values(); } Evas_Object *open_message_popup(Evas_Object *parentWnd) @@ -788,6 +785,26 @@ Evas_Object *open_message_popup(Evas_Object *parentWnd) return msg_window; } +void _guideline_popup_setting_cb(void *data, Evas_Object *obj, void *event_info) +{ + evas_object_smart_callback_del(obj, "dismissed", _guideline_popup_setting_cb); + evas_object_del(obj); + obj = NULL; + ise_destory_popup_setting(); + g_config_values.first_guideset = TRUE; + write_ise_config_values(); +} + +void _guideline_popup_space_cb(void *data, Evas_Object *obj, void *event_info) +{ + evas_object_smart_callback_del(obj, "dismissed", _guideline_popup_space_cb); + evas_object_del(obj); + obj = NULL; + ise_destory_popup_space(); + g_config_values.first_guidechange = TRUE; + write_ise_config_values(); +} + void ise_show_help_popup(sclulong keyEvent) { char buf[2048] = {0, }; @@ -795,26 +812,39 @@ void ise_show_help_popup(sclulong keyEvent) sclint scr_w = 0; sclint scr_h = 0; SclRectangle rectangle = {0}; + Evas_Object *ctxpopup = NULL; + Elm_Theme *theme = NULL; if (g_ui) { g_ui->get_screen_resolution(&scr_w, &scr_h); if (keyEvent == MVK_space) { + g_config_values.first_guidechange = TRUE; + write_ise_config_values(); g_ui->get_button_geometry("SPACE_KEY", &rectangle); + _guide_popup_space = open_message_popup(NATIVE_WINDOW_CAST(ime_get_main_window())); + + theme = elm_theme_new(); + elm_theme_ref_set(theme, NULL); + elm_theme_extension_add(theme, EDJ_FILE); + + ctxpopup = elm_ctxpopup_add(_guide_popup_space); + elm_object_theme_set(ctxpopup, theme); + evas_object_smart_callback_add(ctxpopup, "dismissed", _guideline_popup_space_cb, (void *)keyEvent); } else { + g_config_values.first_guideset = TRUE; + write_ise_config_values(); g_ui->get_button_geometry("CM_KEY", &rectangle); + _guide_popup_setting = open_message_popup(NATIVE_WINDOW_CAST(ime_get_main_window())); + theme = elm_theme_new(); + elm_theme_ref_set(theme, NULL); + elm_theme_extension_add(theme, EDJ_FILE); + ctxpopup = elm_ctxpopup_add(_guide_popup_setting); + elm_object_theme_set(ctxpopup, theme); + evas_object_smart_callback_add(ctxpopup, "dismissed", _guideline_popup_setting_cb, (void *)keyEvent); } } - _guide_popup_window = open_message_popup(NATIVE_WINDOW_CAST(ime_get_main_window())); - - Elm_Theme *theme = elm_theme_new(); - elm_theme_ref_set(theme, NULL); - elm_theme_extension_add(theme, EDJ_FILE); - - Evas_Object *ctxpopup = elm_ctxpopup_add(_guide_popup_window); - elm_object_theme_set(ctxpopup, theme); - int rotation = elm_win_rotation_get(NATIVE_WINDOW_CAST(ime_get_main_window())); if (rotation == 0 || rotation == 180) { elm_object_style_set(ctxpopup, "customised_guideline_popup"); @@ -822,7 +852,6 @@ void ise_show_help_popup(sclulong keyEvent) elm_object_style_set(ctxpopup, "customised_guideline_popup_landscape"); } - evas_object_smart_callback_add(ctxpopup, "dismissed", _guideline_popup_dismissed_cb, (void *)keyEvent); elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_UP, ELM_CTXPOPUP_DIRECTION_UNKNOWN, ELM_CTXPOPUP_DIRECTION_UNKNOWN, @@ -858,14 +887,21 @@ void ise_show_help_popup(sclulong keyEvent) elm_label_line_wrap_set(text, ELM_WRAP_MIXED); evas_object_show(text); - evas_object_layer_set(_guide_popup_window, EVAS_LAYER_MAX); - evas_object_show(_guide_popup_window); + if (keyEvent == MVK_space) { + evas_object_layer_set(_guide_popup_space, EVAS_LAYER_MAX); + evas_object_show(_guide_popup_space); + } else { + evas_object_layer_set(_guide_popup_setting, EVAS_LAYER_MAX); + evas_object_show(_guide_popup_setting); + } + evas_object_layer_set(ctxpopup, EVAS_LAYER_MAX); evas_object_show(ctxpopup); } SCLEventReturnType CUIEventCallback::on_event_drag_state_changed(SclUIEventDesc event_desc) { + LOGD("button %s is clicked\n", event_desc.key_value); if (event_desc.event_type == EVENT_TYPE_MOVE) { if (event_desc.key_event == MVK_space) { SclRectangle rectangle = {0}; @@ -881,9 +917,12 @@ SCLEventReturnType CUIEventCallback::on_event_drag_state_changed(SclUIEventDesc ime_set_floating_drag_end(); } else if (event_desc.event_type == EVENT_TYPE_PRESS) { #ifdef _MOBILE - if ((!g_config_values.first_guideset) && (event_desc.key_type == KEY_TYPE_MODECHANGE)) { - ise_show_help_popup(event_desc.key_event); + if ((!g_config_values.first_guideset) && (strncmp(event_desc.key_value, "OPTION", strlen(event_desc.key_value)) == 0)) { + ise_show_help_popup(event_desc.key_event);//show help popup in on_event_drag_state_changed other than on_event_key_clicked for fixing help popup show delay issue + LOGD("setting popup show\n"); return SCL_EVENT_PASS_ON; + } else { + ise_destory_popup_setting();//destory popup manually in case of abormal situation } #endif if (g_floating_mode && event_desc.mouse_current_point.y <= FLOATING_TITLE_BAR_HEIGHT @@ -1070,8 +1109,8 @@ SCLEventReturnType CUIEventCallback::on_event_key_clicked(SclUIEventDesc event_d } case KEY_TYPE_MODECHANGE: #ifdef _MOBILE - if (!g_config_values.first_guideset) { - break; + if (_guide_popup_setting != NULL) {//popup is showing + break; } #endif if (strcmp(event_desc.key_value, USER_VOICE_LANGUAGE) == 0) { @@ -1287,20 +1326,6 @@ bool ise_is_guideline_popup_enable_layout(void) return ret; } -#ifdef _MOBILE -static Eina_Bool popup_guideline_timer_cb(void *data) -{ - if ((!g_config_values.first_guidechange) && (_language_manager.get_enabled_languages_num() > 1)) { - ise_show_help_popup(MVK_space); - g_config_values.first_guidechange = TRUE; - write_ise_config_values(); - } - - guideline_timer = NULL; - return ECORE_CALLBACK_CANCEL; -} -#endif - #if EXIT_ISE_ON_HIDE static Eina_Bool exit_timer_cb(void *data) { @@ -1527,7 +1552,12 @@ ise_show(int ic) #ifdef _MOBILE if (ise_is_guideline_popup_enable_layout()) { - guideline_timer = ecore_timer_add(0.1, popup_guideline_timer_cb, NULL); + if ((!g_config_values.first_guidechange) && (_language_manager.get_enabled_languages_num() > 1)) { + ise_show_help_popup(MVK_space); + LOGD("space popup show\n"); + } else { + ise_destory_popup_space(); + } } #endif @@ -1661,7 +1691,8 @@ ise_hide() _click_count = 0; delete_commit_timer(); - ise_destory_guideline_popup(); + ise_destory_popup_space(); + ise_destory_popup_setting(); g_keyboard_state.visible_state = FALSE; -- 2.7.4