Add elm_entry_input_panel_show_on_demand_set/get()

This commit is contained in:
Jihoon Kim 2013-08-14 18:32:42 +09:00
parent f2d0b1b567
commit c69f560ea1
6 changed files with 120 additions and 1 deletions

View File

@ -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().

View File

@ -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:

View File

@ -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
};

View File

@ -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

View File

@ -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);

View File

@ -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;