Support return key type in keyboard input mode 08/139008/5
authorsungwook79.park <sungwook79.park@samsung.com>
Mon, 17 Jul 2017 00:24:14 +0000 (09:24 +0900)
committersungwook79.park <sungwook79.park@samsung.com>
Mon, 17 Jul 2017 02:21:44 +0000 (11:21 +0900)
Change-Id: I0f352fce837060728f7b8c4c9e2270ddaa4d19de
Signed-off-by: sungwook79.park <sungwook79.park@samsung.com>
inc/w-input-selector.h
src/w-input-keyboard.cpp
src/w-input-stt-voice.cpp

index 92662e1..774f351 100755 (executable)
@@ -106,6 +106,7 @@ struct _InputKeyboardData
 {
        char *guide_text;
        char *default_text;
+       char *return_key_type;
 };
 typedef struct _InputKeyboardData InputKeyboardData;
 
index 9257a12..7fe4860 100755 (executable)
@@ -34,6 +34,7 @@ bool input_keyboard_init(app_control_h app_control)
        int ret = -1;
        char *default_text = NULL;
        char *guide_text = NULL;
+       char *return_key_type = NULL;
 
        input_keyboard_deinit();
 
@@ -45,6 +46,10 @@ bool input_keyboard_init(app_control_h app_control)
        if (ret == APP_CONTROL_ERROR_NONE) {
                g_input_keyboard_data.guide_text = guide_text;
        }
+       ret = app_control_get_extra_data(app_control, "return_key_type", &return_key_type);
+       if (ret == APP_CONTROL_ERROR_NONE) {
+               g_input_keyboard_data.return_key_type = return_key_type;
+       }
 
        return true;
 }
@@ -57,13 +62,17 @@ void input_keyboard_deinit(void)
        if (g_input_keyboard_data.default_text)
                free(g_input_keyboard_data.default_text);
 
+       if (g_input_keyboard_data.return_key_type)
+               free(g_input_keyboard_data.return_key_type);
+
        g_input_keyboard_data.default_text = NULL;
        g_input_keyboard_data.guide_text = NULL;
+       g_input_keyboard_data.return_key_type = NULL;
 
        return;
 }
 
-void btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+void exit_keyboard()
 {
        app_control_h app_control;
        int ret = app_control_create(&app_control);
@@ -84,6 +93,12 @@ void btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
        free(app_id);
        reply_to_sender_by_callback(getText, "keyboard", NULL);
        ui_app_exit();
+
+}
+
+void btn_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       exit_keyboard();
 }
 
 static Eina_Bool custom_back_cb(void *data, Elm_Object_Item *it)
@@ -97,6 +112,23 @@ static void maxlength_cb(void *data, Evas_Object *obj, void *event_info)
        LOGD("maxlength_cb : size = %d", KEYBOARD_EDITOR_CHAR_COUNT_MAX);
 }
 
+static void enter_keydown_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       LOGD("enter_keydown_cb");
+       Evas_Object *entry = obj;
+       if (entry == NULL)
+               return;
+
+       Ecore_IMF_Context *imf_context = NULL;
+       imf_context = (Ecore_IMF_Context*)elm_entry_imf_context_get(entry);
+       if (imf_context)
+               ecore_imf_context_input_panel_hide(imf_context);
+
+       elm_object_focus_set(entry, EINA_FALSE);
+
+       exit_keyboard();
+}
+
 void create_fullscreen_editor(void *data)
 {
        App_Data *ad = (App_Data *)data;
@@ -121,6 +153,10 @@ void create_fullscreen_editor(void *data)
        elm_entry_cursor_end_set(entry);
        evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
        evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       if (g_input_keyboard_data.return_key_type && strcmp(g_input_keyboard_data.return_key_type, "DONE") == 0) {
+               elm_entry_input_panel_return_key_type_set(entry, ELM_INPUT_PANEL_RETURN_KEY_TYPE_DONE);
+               evas_object_smart_callback_add(entry, "activated", enter_keydown_cb, ad);
+       }
        evas_object_show(entry);
        elm_box_pack_end(box, entry);
 
@@ -159,6 +195,7 @@ static void editfield_unfocused_cb(void *data, Evas_Object *obj, void *event_inf
 
 static Evas_Object *create_multiline_editfield_layout(Evas_Object *parent, void *data)
 {
+       App_Data *ad = (App_Data *)data;
        Evas_Object *editfield;
 
        editfield = elm_layout_add(parent);
@@ -179,6 +216,11 @@ static Evas_Object *create_multiline_editfield_layout(Evas_Object *parent, void
        elm_entry_cursor_end_set(entry);
        evas_object_smart_callback_add(entry, "focused", editfield_focused_cb, editfield);
        evas_object_smart_callback_add(entry, "unfocused", editfield_unfocused_cb, editfield);
+       if (g_input_keyboard_data.return_key_type && strcmp(g_input_keyboard_data.return_key_type, "DONE") == 0) {
+               elm_entry_input_panel_return_key_type_set(entry, ELM_INPUT_PANEL_RETURN_KEY_TYPE_DONE);
+               evas_object_smart_callback_add(entry, "activated", enter_keydown_cb, ad);
+       }
+
        evas_object_show(entry);
        elm_object_part_content_set(editfield, "elm.swallow.content", entry);
 
index 595d417..ac682cc 100755 (executable)
@@ -933,6 +933,7 @@ char *__get_genlist_item_label(void *data, Evas_Object *obj, const char *part)
                                }
                        } else {
                                strncpy(text, "", strlen(""));
+                               text[strlen("")] = '\0';
                        }
                }
                return strdup(text);
@@ -969,6 +970,7 @@ char *__get_genlist_item_label(void *data, Evas_Object *obj, const char *part)
                                }
                        } else {
                                strncpy(text, "", strlen(""));
+                               text[strlen("")] = '\0';
                        }
                        return strdup(text);
                }