Add elm_entry_input_panel_show_on_demand_set/get()
authorJihoon Kim <jihoon48.kim@samsung.com>
Wed, 14 Aug 2013 09:32:42 +0000 (18:32 +0900)
committerJihoon Kim <jihoon48.kim@samsung.com>
Wed, 14 Aug 2013 09:32:42 +0000 (18:32 +0900)
ChangeLog
NEWS
src/lib/elm_entry.c
src/lib/elm_entry_eo.h
src/lib/elm_entry_legacy.h
src/lib/elm_widget_entry.h

index b424df7e818add230bb2412789b37979c74fb9b3..bafc3661f9e4c876c7589450bd7fb72e84f84422 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
 
         * 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/NEWS b/NEWS
index 7a956701cb94b90c454eabbf62f4369973d5945e..8eda4a0daf16acb159f6f337b98fc65a4ac32306 100644 (file)
--- a/NEWS
+++ b/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:
 
index 3bad6f797f59f2447569cb03cb4c1efe6fc3e4f9..e6bd510d4119df0c575e2f16cf9aaeeb4789acd8 100644 (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
 };
 
index 47fdbd62cd4e92bbd7872c13ff059d599a093184..216145ed430e4586040ae7c196b28aead6a88c46 100644 (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
index 90c626432619a129a5be61ac9eb38c776d4c785b..24aa4cf8e2987ff08f56cf2a8e1955119ee9639c 100644 (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);
index 4ca6bdf16698a11ff5a2343462cd731b9a5a9776..2c37e88ef1c8a472dee933d6450cf817811e9b3d 100644 (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;