jihoon pushed a commit to branch master.

http://git.enlightenment.org/core/elementary.git/commit/?id=c8f021ba302279a91666ddda04f0247b3a2931f6

commit c8f021ba302279a91666ddda04f0247b3a2931f6
Author: Jihoon Kim <[email protected]>
Date:   Fri Jan 3 18:51:38 2014 +0900

    entry: Add elm_entry_input_panel_show_on_demand_set/get API
    
    This API sets 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.
---
 src/lib/elm_entry.c        | 61 +++++++++++++++++++++++++++++++++++++++++++++-
 src/lib/elm_entry_eo.h     | 30 +++++++++++++++++++++++
 src/lib/elm_entry_legacy.h | 24 ++++++++++++++++++
 src/lib/elm_widget_entry.h |  1 +
 4 files changed, 115 insertions(+), 1 deletion(-)

diff --git a/src/lib/elm_entry.c b/src/lib/elm_entry.c
index 81a35db..cc155c3 100644
--- a/src/lib/elm_entry.c
+++ b/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/src/lib/elm_entry_eo.h b/src/lib/elm_entry_eo.h
index 62da6a1..e168ce5 100644
--- a/src/lib/elm_entry_eo.h
+++ b/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
 };
 
@@ -1271,6 +1273,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/src/lib/elm_entry_legacy.h b/src/lib/elm_entry_legacy.h
index 40d1e47..b3f5506 100644
--- a/src/lib/elm_entry_legacy.h
+++ b/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/src/lib/elm_widget_entry.h b/src/lib/elm_widget_entry.h
index 4e37a10..dc2b96d 100644
--- a/src/lib/elm_widget_entry.h
+++ b/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;

-- 


Reply via email to