diff --git a/legacy/elementary/src/lib/elm_entry.c b/legacy/elementary/src/lib/elm_entry.c index 81a35db490..cc155c37a8 100644 --- a/legacy/elementary/src/lib/elm_entry.c +++ b/legacy/elementary/src/lib/elm_entry.c @@ -594,6 +594,8 @@ _elm_entry_smart_theme(Eo *obj, void *_pd, va_list *list) (sd->entry_edje, "elm.text", (Edje_Input_Panel_Return_Key_Type)sd->input_panel_return_key_type); edje_object_part_text_input_panel_return_key_disabled_set (sd->entry_edje, "elm.text", sd->input_panel_return_key_disabled); + edje_object_part_text_input_panel_show_on_demand_set + (sd->entry_edje, "elm.text", sd->input_panel_show_on_demand); // elm_entry_cursor_pos_set -> cursor,changed -> widget_show_region_set // -> smart_objects_calculate will call all smart calculate functions, @@ -918,7 +920,7 @@ _elm_entry_smart_on_focus(Eo *obj, void *_pd EINA_UNUSED, va_list *list) { evas_object_focus_set(sd->entry_edje, EINA_TRUE); edje_object_signal_emit(sd->entry_edje, "elm,action,focus", "elm"); - if (top && top_is_win && sd->input_panel_enable && + if (top && top_is_win && sd->input_panel_enable && !sd->input_panel_show_on_demand && !edje_object_part_text_imf_context_get(sd->entry_edje, "elm.text")) elm_win_keyboard_mode_set(top, ELM_WIN_KEYBOARD_ON); evas_object_smart_callback_call(obj, SIG_FOCUSED, NULL); @@ -1576,6 +1578,8 @@ _mouse_up_cb(void *data, void *event_info) { Evas_Event_Mouse_Up *ev = event_info; + Eina_Bool top_is_win = EINA_FALSE; + Evas_Object *top; ELM_ENTRY_DATA_GET(data, sd); @@ -1588,6 +1592,19 @@ _mouse_up_cb(void *data, _magnifier_hide(data); _menu_call(data); } + else + { + top = elm_widget_top_get(data); + if (top) + { + if (!strcmp(evas_object_type_get(top), "elm_win")) + top_is_win = EINA_TRUE; + + if (top_is_win && sd->input_panel_enable && sd->input_panel_show_on_demand && + !edje_object_part_text_imf_context_get(sd->entry_edje, "elm.text")) + elm_win_keyboard_mode_set(top, ELM_WIN_KEYBOARD_ON); + } + } } else if ((ev->button == 3) && (!_elm_config->desktop_entry)) { @@ -5600,6 +5617,44 @@ _input_panel_return_key_autoenabled_set(Eo *obj, void *_pd, va_list *list) _return_key_enabled_check(obj); } +EAPI void +elm_entry_input_panel_show_on_demand_set(Evas_Object *obj, + Eina_Bool ondemand) +{ + ELM_ENTRY_CHECK(obj); + eo_do(obj, elm_obj_entry_input_panel_show_on_demand_set(ondemand)); +} + +static void +_input_panel_show_on_demand_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +{ + Eina_Bool ondemand = va_arg(*list, int); + Elm_Entry_Smart_Data *sd = _pd; + + sd->input_panel_show_on_demand = ondemand; + + edje_object_part_text_input_panel_show_on_demand_set + (sd->entry_edje, "elm.text", ondemand); +} + +EAPI Eina_Bool +elm_entry_input_panel_show_on_demand_get(const Evas_Object *obj) +{ + ELM_ENTRY_CHECK(obj) EINA_FALSE; + Eina_Bool ret = EINA_FALSE; + eo_do((Eo *) obj, elm_obj_entry_input_panel_show_on_demand_get(&ret)); + return ret; +} + +static void +_input_panel_show_on_demand_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +{ + Eina_Bool *ret = va_arg(*list, Eina_Bool *); + Elm_Entry_Smart_Data *sd = _pd; + + if (ret) *ret = sd->input_panel_show_on_demand; +} + EAPI void * elm_entry_imf_context_get(Evas_Object *obj) { @@ -5868,6 +5923,8 @@ _class_constructor(Eo_Class *klass) EO_OP_FUNC(ELM_OBJ_ENTRY_ID(ELM_OBJ_ENTRY_SUB_ID_ANCHOR_HOVER_END), _anchor_hover_end), EO_OP_FUNC(ELM_OBJ_ENTRY_ID(ELM_OBJ_ENTRY_SUB_ID_INPUT_PANEL_LAYOUT_VARIATION_SET), _input_panel_layout_variation_set), EO_OP_FUNC(ELM_OBJ_ENTRY_ID(ELM_OBJ_ENTRY_SUB_ID_INPUT_PANEL_LAYOUT_VARIATION_GET), _input_panel_layout_variation_get), + EO_OP_FUNC(ELM_OBJ_ENTRY_ID(ELM_OBJ_ENTRY_SUB_ID_INPUT_PANEL_SHOW_ON_DEMAND_SET), _input_panel_show_on_demand_set), + EO_OP_FUNC(ELM_OBJ_ENTRY_ID(ELM_OBJ_ENTRY_SUB_ID_INPUT_PANEL_SHOW_ON_DEMAND_GET), _input_panel_show_on_demand_get), EO_OP_FUNC_SENTINEL }; eo_class_funcs_set(klass, func_desc); @@ -5965,6 +6022,8 @@ static const Eo_Op_Description op_desc[] = { EO_OP_DESCRIPTION(ELM_OBJ_ENTRY_SUB_ID_ANCHOR_HOVER_END, "Ends the hover popup in the entry."), EO_OP_DESCRIPTION(ELM_OBJ_ENTRY_SUB_ID_INPUT_PANEL_LAYOUT_VARIATION_SET, "Set the input panel layout variation of the entry."), EO_OP_DESCRIPTION(ELM_OBJ_ENTRY_SUB_ID_INPUT_PANEL_LAYOUT_VARIATION_GET, "Get the input panel layout variation of the entry."), + EO_OP_DESCRIPTION(ELM_OBJ_ENTRY_SUB_ID_INPUT_PANEL_SHOW_ON_DEMAND_SET, "Set the attribute to show the input panel in case of only an user's explicit Mouse Up event."), + EO_OP_DESCRIPTION(ELM_OBJ_ENTRY_SUB_ID_INPUT_PANEL_SHOW_ON_DEMAND_GET, "Get the attribute to show the input panel in case of only an user's explicit Mouse Up event."), EO_OP_DESCRIPTION_SENTINEL }; diff --git a/legacy/elementary/src/lib/elm_entry_eo.h b/legacy/elementary/src/lib/elm_entry_eo.h index 62da6a16d9..e168ce5b5e 100644 --- a/legacy/elementary/src/lib/elm_entry_eo.h +++ b/legacy/elementary/src/lib/elm_entry_eo.h @@ -95,6 +95,8 @@ enum ELM_OBJ_ENTRY_SUB_ID_ANCHOR_HOVER_END, ELM_OBJ_ENTRY_SUB_ID_INPUT_PANEL_LAYOUT_VARIATION_SET, ELM_OBJ_ENTRY_SUB_ID_INPUT_PANEL_LAYOUT_VARIATION_GET, + ELM_OBJ_ENTRY_SUB_ID_INPUT_PANEL_SHOW_ON_DEMAND_SET, + ELM_OBJ_ENTRY_SUB_ID_INPUT_PANEL_SHOW_ON_DEMAND_GET, ELM_OBJ_ENTRY_SUB_ID_LAST }; @@ -1270,6 +1272,34 @@ enum */ #define elm_obj_entry_input_panel_return_key_autoenabled_set(enabled) ELM_OBJ_ENTRY_ID(ELM_OBJ_ENTRY_SUB_ID_INPUT_PANEL_RETURN_KEY_AUTOENABLED_SET), EO_TYPECHECK(Eina_Bool, enabled) +/** + * @def elm_obj_entry_input_panel_show_on_demand_set + * @since 1.9 + * + * Set the attribute to show the input panel in case of only an user's explicit Mouse Up event. + * + * @param[in] ondemand + * + * @see elm_entry_input_panel_show_on_demand_set + * + * @ingroup Entry + */ +#define elm_obj_entry_input_panel_show_on_demand_set(ondemand) ELM_OBJ_ENTRY_ID(ELM_OBJ_ENTRY_SUB_ID_INPUT_PANEL_SHOW_ON_DEMAND_SET), EO_TYPECHECK(Eina_Bool, ondemand) + +/** + * @def elm_obj_entry_input_panel_show_on_demand_get + * @since 1.9 + * + * Get the attribute to show the input panel in case of only an user's explicit Mouse Up event. + * + * @param[out] ret + * + * @see elm_entry_input_panel_show_on_demand_get + * + * @ingroup Entry + */ +#define elm_obj_entry_input_panel_show_on_demand_get(ret) ELM_OBJ_ENTRY_ID(ELM_OBJ_ENTRY_SUB_ID_INPUT_PANEL_SHOW_ON_DEMAND_GET), EO_TYPECHECK(Eina_Bool *, ret) + /** * @def elm_obj_entry_imf_context_get * @since 1.8 diff --git a/legacy/elementary/src/lib/elm_entry_legacy.h b/legacy/elementary/src/lib/elm_entry_legacy.h index 40d1e47a90..b3f5506b1b 100644 --- a/legacy/elementary/src/lib/elm_entry_legacy.h +++ b/legacy/elementary/src/lib/elm_entry_legacy.h @@ -1191,3 +1191,27 @@ EAPI void elm_entry_input_panel_layout_variation_set(Evas_Obje * @since 1.8 */ EAPI int elm_entry_input_panel_layout_variation_get(const Evas_Object *obj); + +/** + * Set the attribute to show the input panel in case of only an user's explicit Mouse Up event. + * It doesn't request to show the input panel even though it has focus. + * + * @param obj The entry object + * @param ondemand If true, the input panel will be shown in case of only Mouse up event. + * (Focus event will be ignored.) + * @since 1.9 + * + * @ingroup Entry + */ +EAPI void elm_entry_input_panel_show_on_demand_set(Evas_Object *obj, Eina_Bool ondemand); + +/** + * Get the attribute to show the input panel in case of only an user's explicit Mouse Up event. + * + * @param obj The entry object + * @return @c EINA_TRUE if the input panel will be shown in case of only Mouse up event. + * @since 1.9 + * + * @ingroup Entry + */ +EAPI Eina_Bool elm_entry_input_panel_show_on_demand_get(const Evas_Object *obj); diff --git a/legacy/elementary/src/lib/elm_widget_entry.h b/legacy/elementary/src/lib/elm_widget_entry.h index 4e37a106c4..dc2b96d82d 100644 --- a/legacy/elementary/src/lib/elm_widget_entry.h +++ b/legacy/elementary/src/lib/elm_widget_entry.h @@ -102,6 +102,7 @@ struct _Elm_Entry_Smart_Data Eina_Bool sel_mode : 1; Eina_Bool changed : 1; Eina_Bool scroll : 1; + Eina_Bool input_panel_show_on_demand : 1; }; typedef struct _Elm_Entry_Item_Provider Elm_Entry_Item_Provider;