From c69f560ea1368ed507a03f0972a90455541cbc60 Mon Sep 17 00:00:00 2001 From: Jihoon Kim Date: Wed, 14 Aug 2013 18:32:42 +0900 Subject: [PATCH] Add elm_entry_input_panel_show_on_demand_set/get() --- legacy/elementary/ChangeLog | 4 ++ legacy/elementary/NEWS | 1 + legacy/elementary/src/lib/elm_entry.c | 61 +++++++++++++++++++- legacy/elementary/src/lib/elm_entry_eo.h | 30 ++++++++++ legacy/elementary/src/lib/elm_entry_legacy.h | 24 ++++++++ legacy/elementary/src/lib/elm_widget_entry.h | 1 + 6 files changed, 120 insertions(+), 1 deletion(-) diff --git a/legacy/elementary/ChangeLog b/legacy/elementary/ChangeLog index b424df7e81..bafc3661f9 100644 --- a/legacy/elementary/ChangeLog +++ b/legacy/elementary/ChangeLog @@ -1558,3 +1558,7 @@ * Mapbuf: Ensure that content size calculation is correctly finished because the mapbuf is willing to block the size calculation forcely. + +2013-08-14 Jihoon Kim (jihoon) + + * Entry: Add elm_entry_input_panel_show_on_demand_set/get(). diff --git a/legacy/elementary/NEWS b/legacy/elementary/NEWS index 7a956701cb..8eda4a0daf 100644 --- a/legacy/elementary/NEWS +++ b/legacy/elementary/NEWS @@ -83,6 +83,7 @@ Additions: * File Selector : Support elm_object_part_text_set() for the ok, cancel part to change the OK, Cancel button label. * Add _elm_access_object_get, deprecate _elm_access_info_get * Add elm_win_focus_highlight_animate_set/get(). + * Add elm_entry_input_panel_show_on_demand_set/get(). Improvements: diff --git a/legacy/elementary/src/lib/elm_entry.c b/legacy/elementary/src/lib/elm_entry.c index 3bad6f797f..e6bd510d41 100644 --- a/legacy/elementary/src/lib/elm_entry.c +++ b/legacy/elementary/src/lib/elm_entry.c @@ -519,6 +519,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); if (sd->cursor_pos != 0) elm_entry_cursor_pos_set(obj, sd->cursor_pos); @@ -831,7 +833,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); @@ -1540,6 +1542,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); @@ -1552,6 +1556,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)) { @@ -5337,6 +5354,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; + + *ret = sd->input_panel_show_on_demand; +} + EAPI void * elm_entry_imf_context_get(Evas_Object *obj) { @@ -5601,6 +5656,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); @@ -5696,6 +5753,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 47fdbd62cd..216145ed43 100644 --- a/legacy/elementary/src/lib/elm_entry_eo.h +++ b/legacy/elementary/src/lib/elm_entry_eo.h @@ -93,6 +93,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 }; @@ -1239,6 +1241,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.8 + * + * 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.8 + * + * 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 90c6264326..24aa4cf8e2 100644 --- a/legacy/elementary/src/lib/elm_entry_legacy.h +++ b/legacy/elementary/src/lib/elm_entry_legacy.h @@ -1170,3 +1170,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.8 + * + * @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.8 + * + * @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 4ca6bdf166..2c37e88ef1 100644 --- a/legacy/elementary/src/lib/elm_widget_entry.h +++ b/legacy/elementary/src/lib/elm_widget_entry.h @@ -95,6 +95,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;