jihoon pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=f24164637085d006b82b91d4bf57f35d3520d97d
commit f24164637085d006b82b91d4bf57f35d3520d97d Author: Jihoon Kim <jihoon48....@samsung.com> Date: Fri Dec 27 13:24:54 2013 +0900 Edje: add edje_object_part_text_input_panel_show_on_demand_set/get() --- src/lib/edje/Edje_Eo.h | 28 ++++++++++++++++++++++++++ src/lib/edje/Edje_Legacy.h | 21 +++++++++++++++++++ src/lib/edje/edje_entry.c | 38 +++++++++++++++++++++++++++++++++++ src/lib/edje/edje_private.h | 4 ++++ src/lib/edje/edje_smart.c | 4 ++++ src/lib/edje/edje_util.c | 49 +++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 144 insertions(+) diff --git a/src/lib/edje/Edje_Eo.h b/src/lib/edje/Edje_Eo.h index dfb887e..a10504b 100644 --- a/src/lib/edje/Edje_Eo.h +++ b/src/lib/edje/Edje_Eo.h @@ -81,6 +81,8 @@ enum EDJE_OBJ_SUB_ID_PART_TEXT_INPUT_PANEL_RETURN_KEY_TYPE_GET, EDJE_OBJ_SUB_ID_PART_TEXT_INPUT_PANEL_RETURN_KEY_DISABLED_SET, EDJE_OBJ_SUB_ID_PART_TEXT_INPUT_PANEL_RETURN_KEY_DISABLED_GET, + EDJE_OBJ_SUB_ID_PART_TEXT_INPUT_PANEL_SHOW_ON_DEMAND_SET, + EDJE_OBJ_SUB_ID_PART_TEXT_INPUT_PANEL_SHOW_ON_DEMAND_GET, EDJE_OBJ_SUB_ID_TEXT_INSERT_FILTER_CALLBACK_ADD, EDJE_OBJ_SUB_ID_TEXT_INSERT_FILTER_CALLBACK_DEL, EDJE_OBJ_SUB_ID_TEXT_INSERT_FILTER_CALLBACK_DEL_FULL, @@ -520,6 +522,32 @@ enum #define edje_obj_part_text_input_panel_return_key_disabled_get(part, ret) EDJE_OBJ_ID(EDJE_OBJ_SUB_ID_PART_TEXT_INPUT_PANEL_RETURN_KEY_DISABLED_GET), EO_TYPECHECK(const char *, part), EO_TYPECHECK(Eina_Bool *, ret) /** + * @def edje_obj_part_text_input_panel_show_on_demand_set + * @since 1.9 + * + * @brief Set the attribute to show the input panel in case of only an user's explicit Mouse Up event. + * + * @param[in] part + * @param[in] ondemand + * + * @see edje_object_part_text_input_panel_show_on_demand_set + */ +#define edje_obj_part_text_input_panel_show_on_demand_set(part, ondemand) EDJE_OBJ_ID(EDJE_OBJ_SUB_ID_PART_TEXT_INPUT_PANEL_SHOW_ON_DEMAND_SET), EO_TYPECHECK(const char *, part), EO_TYPECHECK(Eina_Bool, ondemand) + +/** + * @def edje_obj_part_text_input_panel_show_on_demand_get + * @since 1.9 + * + * @brief Get the attribute to show the input panel in case of only an user's explicit Mouse Up event. + * + * @param[in] part + * @param[out] ret + * + * @see edje_object_part_text_input_panel_show_on_demand_get + */ +#define edje_obj_part_text_input_panel_show_on_demand_get(part, ret) EDJE_OBJ_ID(EDJE_OBJ_SUB_ID_PART_TEXT_INPUT_PANEL_SHOW_ON_DEMAND_GET), EO_TYPECHECK(const char *, part), EO_TYPECHECK(Eina_Bool *, ret) + +/** * @def edje_obj_text_insert_filter_callback_add * @since 1.8 * diff --git a/src/lib/edje/Edje_Legacy.h b/src/lib/edje/Edje_Legacy.h index 9b0ae01..34bcd83 100644 --- a/src/lib/edje/Edje_Legacy.h +++ b/src/lib/edje/Edje_Legacy.h @@ -1241,6 +1241,27 @@ EAPI void edje_object_part_text_input_panel_return_key_disabled_set( EAPI Eina_Bool edje_object_part_text_input_panel_return_key_disabled_get(const Evas_Object *obj, const char *part); /** + * 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 A valid Evas_Object handle + * @param part The part name + * @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.0 + */ +EAPI void edje_object_part_text_input_panel_show_on_demand_set(Evas_Object *obj, const char *part, Eina_Bool ondemand); + +/** + * Get the attribute to show the input panel in case of only an user's explicit Mouse Up event. + * + * @param obj A valid Evas_Object handle + * @param part The part name + * @return @c EINA_TRUE if the input panel will be shown in case of only Mouse up event. + * @since 1.9.0 + */ +EAPI Eina_Bool edje_object_part_text_input_panel_show_on_demand_get(const Evas_Object *obj, const char *part); + +/** * Add a filter function for newly inserted text. * * Whenever text is inserted (not the same as set) into the given @p part, diff --git a/src/lib/edje/edje_entry.c b/src/lib/edje/edje_entry.c index 8764949..8d992d7 100644 --- a/src/lib/edje/edje_entry.c +++ b/src/lib/edje/edje_entry.c @@ -3302,6 +3302,44 @@ _edje_entry_input_panel_return_key_disabled_get(Edje_Real_Part *rp) #endif } +#ifdef HAVE_ECORE_IMF +void +_edje_entry_input_panel_show_on_demand_set(Edje_Real_Part *rp, Eina_Bool ondemand) +#else +void +_edje_entry_input_panel_show_on_demand_set(Edje_Real_Part *rp, Eina_Bool ondemand __UNUSED__) +#endif +{ + Entry *en; + + if ((rp->type != EDJE_RP_TYPE_TEXT) || + (!rp->typedata.text)) return; + en = rp->typedata.text->entry_data; + if (!en) return; +#ifdef HAVE_ECORE_IMF + if (en->imf_context) + ecore_imf_context_input_panel_show_on_demand_set(en->imf_context, ondemand); +#endif +} + +Eina_Bool +_edje_entry_input_panel_show_on_demand_get(Edje_Real_Part *rp) +{ + Entry *en; + + if ((rp->type != EDJE_RP_TYPE_TEXT) || + (!rp->typedata.text)) return EINA_FALSE; + en = rp->typedata.text->entry_data; + if (!en) return EINA_FALSE; +#ifdef HAVE_ECORE_IMF + if (en->imf_context) { + Eina_Bool ret = ecore_imf_context_input_panel_show_on_demand_get(en->imf_context); + return ret; + } +#endif + return EINA_FALSE; +} + static Evas_Textblock_Cursor * _cursor_get(Edje_Real_Part *rp, Edje_Cursor cur) { diff --git a/src/lib/edje/edje_private.h b/src/lib/edje/edje_private.h index 5c58961..d976a7f 100644 --- a/src/lib/edje/edje_private.h +++ b/src/lib/edje/edje_private.h @@ -2340,6 +2340,8 @@ void _edje_entry_input_panel_return_key_type_set(Edje_Real_Part *rp, Edje_Input_ Edje_Input_Panel_Return_Key_Type _edje_entry_input_panel_return_key_type_get(Edje_Real_Part *rp); void _edje_entry_input_panel_return_key_disabled_set(Edje_Real_Part *rp, Eina_Bool disabled); Eina_Bool _edje_entry_input_panel_return_key_disabled_get(Edje_Real_Part *rp); +void _edje_entry_input_panel_show_on_demand_set(Edje_Real_Part *rp, Eina_Bool ondemand); +Eina_Bool _edje_entry_input_panel_show_on_demand_get(Edje_Real_Part *rp); void _edje_external_init(void); void _edje_external_shutdown(void); @@ -2503,6 +2505,8 @@ void _part_text_input_panel_return_key_type_set(Eo *obj, void *_pd, va_list *lis void _part_text_input_panel_return_key_type_get(Eo *obj, void *_pd, va_list *list); void _part_text_input_panel_return_key_disabled_set(Eo *obj, void *_pd, va_list *list); void _part_text_input_panel_return_key_disabled_get(Eo *obj, void *_pd, va_list *list); +void _part_text_input_panel_show_on_demand_set(Eo *obj, void *_pd, va_list *list); +void _part_text_input_panel_show_on_demand_get(Eo *obj, void *_pd, va_list *list); void _text_insert_filter_callback_add(Eo *obj, void *_pd, va_list *list); void _text_insert_filter_callback_del(Eo *obj, void *_pd, va_list *list); void _text_insert_filter_callback_del_full(Eo *obj, void *_pd, va_list *list); diff --git a/src/lib/edje/edje_smart.c b/src/lib/edje/edje_smart.c index 2e386ed..dff9f1c 100644 --- a/src/lib/edje/edje_smart.c +++ b/src/lib/edje/edje_smart.c @@ -471,6 +471,8 @@ _edje_smart_class_constructor(Eo_Class *klass) EO_OP_FUNC(EDJE_OBJ_ID(EDJE_OBJ_SUB_ID_PART_TEXT_INPUT_PANEL_RETURN_KEY_TYPE_GET), _part_text_input_panel_return_key_type_get), EO_OP_FUNC(EDJE_OBJ_ID(EDJE_OBJ_SUB_ID_PART_TEXT_INPUT_PANEL_RETURN_KEY_DISABLED_SET), _part_text_input_panel_return_key_disabled_set), EO_OP_FUNC(EDJE_OBJ_ID(EDJE_OBJ_SUB_ID_PART_TEXT_INPUT_PANEL_RETURN_KEY_DISABLED_GET), _part_text_input_panel_return_key_disabled_get), + EO_OP_FUNC(EDJE_OBJ_ID(EDJE_OBJ_SUB_ID_PART_TEXT_INPUT_PANEL_SHOW_ON_DEMAND_SET), _part_text_input_panel_show_on_demand_set), + EO_OP_FUNC(EDJE_OBJ_ID(EDJE_OBJ_SUB_ID_PART_TEXT_INPUT_PANEL_SHOW_ON_DEMAND_GET), _part_text_input_panel_show_on_demand_get), EO_OP_FUNC(EDJE_OBJ_ID(EDJE_OBJ_SUB_ID_TEXT_INSERT_FILTER_CALLBACK_ADD), _text_insert_filter_callback_add), EO_OP_FUNC(EDJE_OBJ_ID(EDJE_OBJ_SUB_ID_TEXT_INSERT_FILTER_CALLBACK_DEL), _text_insert_filter_callback_del), EO_OP_FUNC(EDJE_OBJ_ID(EDJE_OBJ_SUB_ID_TEXT_INSERT_FILTER_CALLBACK_DEL_FULL), _text_insert_filter_callback_del_full), @@ -619,6 +621,8 @@ static const Eo_Op_Description op_desc[] = { EO_OP_DESCRIPTION(EDJE_OBJ_SUB_ID_PART_TEXT_INPUT_PANEL_RETURN_KEY_TYPE_GET, "Get the return key type."), EO_OP_DESCRIPTION(EDJE_OBJ_SUB_ID_PART_TEXT_INPUT_PANEL_RETURN_KEY_DISABLED_SET, "Set the return key on the input panel to be disabled."), EO_OP_DESCRIPTION(EDJE_OBJ_SUB_ID_PART_TEXT_INPUT_PANEL_RETURN_KEY_DISABLED_GET, "Get whether the return key on the input panel should be disabled or not."), + EO_OP_DESCRIPTION(EDJE_OBJ_SUB_ID_PART_TEXT_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(EDJE_OBJ_SUB_ID_PART_TEXT_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(EDJE_OBJ_SUB_ID_TEXT_INSERT_FILTER_CALLBACK_ADD, "Add a filter function for newly inserted text."), EO_OP_DESCRIPTION(EDJE_OBJ_SUB_ID_TEXT_INSERT_FILTER_CALLBACK_DEL, "Delete a function from the filter list."), EO_OP_DESCRIPTION(EDJE_OBJ_SUB_ID_TEXT_INSERT_FILTER_CALLBACK_DEL_FULL, "Delete a function and matching user data from the filter list."), diff --git a/src/lib/edje/edje_util.c b/src/lib/edje/edje_util.c index d161f15..515d3f0 100644 --- a/src/lib/edje/edje_util.c +++ b/src/lib/edje/edje_util.c @@ -3152,6 +3152,55 @@ _part_text_input_panel_return_key_disabled_get(Eo *obj EINA_UNUSED, void *_pd, v } EAPI void +edje_object_part_text_input_panel_show_on_demand_set(Evas_Object *obj, const char *part, Eina_Bool ondemand) +{ + if (!obj) return; + eo_do(obj, edje_obj_part_text_input_panel_show_on_demand_set(part, ondemand)); +} + +void _part_text_input_panel_show_on_demand_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +{ + const char *part = va_arg(*list, const char *); + Eina_Bool ondemand = va_arg(*list, int); + Edje *ed = _pd; + Edje_Real_Part *rp; + + if ((!ed) || (!part)) return; + rp = _edje_real_part_recursive_get(&ed, part); + if (!rp) return; + if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE) + { + _edje_entry_input_panel_show_on_demand_set(rp, ondemand); + } +} + +EAPI Eina_Bool +edje_object_part_text_input_panel_show_on_demand_get(const Evas_Object *obj, const char *part) +{ + if (!obj) return EINA_FALSE; + Eina_Bool ret = EINA_FALSE; + eo_do((Eo *)obj, edje_obj_part_text_input_panel_show_on_demand_get(part, &ret)); + return ret; +} + +void _part_text_input_panel_show_on_demand_get(Eo *obj EINA_UNUSED, void *_pd, va_list *list) +{ + const char *part = va_arg(*list, const char *); + Eina_Bool *ret = va_arg(*list, Eina_Bool *); + Edje *ed = _pd; + Edje_Real_Part *rp; + *ret = EINA_FALSE; + + if ((!ed) || (!part)) return; + rp = _edje_real_part_recursive_get(&ed, part); + if (!rp) return; + if (rp->part->entry_mode > EDJE_ENTRY_EDIT_MODE_NONE) + { + *ret = _edje_entry_input_panel_show_on_demand_get(rp); + } +} + +EAPI void edje_object_text_insert_filter_callback_add(Evas_Object *obj, const char *part, Edje_Text_Filter_Cb func, void *data) { if (!obj) return; --