tasn pushed a commit to branch master.

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

commit 35fdd7b817c822285a47b3a5338cd905398e5fd8
Author: Jihoon Kim <[email protected]>
Date:   Wed Feb 5 10:16:13 2014 +0000

    entry: Add elm_entry_select_region_set API
    
    Summary:
    in case of GTK, it provides API to select a region of text 
(gtk_editable_select_region).
    However, there are only API to select all or none in EFL.
    This API will provide the way to select a region of text.
    
    Test Plan: elementary_test > entry3 > press 'Region' button
    
    Reviewers: woohyun, tasn, id213sin
    
    Reviewed By: tasn
    
    Differential Revision: https://phab.enlightenment.org/D520
---
 src/bin/test_entry.c       | 17 +++++++++++++++++
 src/lib/elm_entry.c        | 32 ++++++++++++++++++++++++++++++++
 src/lib/elm_entry_eo.h     | 16 ++++++++++++++++
 src/lib/elm_entry_legacy.h | 11 +++++++++++
 4 files changed, 76 insertions(+)

diff --git a/src/bin/test_entry.c b/src/bin/test_entry.c
index c6483d8..9371692 100644
--- a/src/bin/test_entry.c
+++ b/src/bin/test_entry.c
@@ -658,6 +658,13 @@ my_ent_bt_non(void *data, Evas_Object *obj EINA_UNUSED, 
void *event_info EINA_UN
 }
 
 static void
+my_ent_bt_region(void *data, Evas_Object *obj EINA_UNUSED, void *event_info 
EINA_UNUSED)
+{
+   Evas_Object *en = data;
+   elm_entry_select_region_set(en, 10, 16);
+}
+
+static void
 my_ent_bt_ins(void *data, Evas_Object *obj EINA_UNUSED, void *event_info 
EINA_UNUSED)
 {
    Evas_Object *en = data;
@@ -935,6 +942,16 @@ test_entry3(void *data EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *event_in
    evas_object_show(bt);
 
    bt = elm_button_add(win);
+   elm_object_text_set(bt, "Region");
+   evas_object_smart_callback_add(bt, "clicked", my_ent_bt_region, en);
+   evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_size_hint_weight_set(bt, EVAS_HINT_EXPAND, 0.0);
+   elm_box_pack_end(bx2, bt);
+   evas_object_propagate_events_set(bt, EINA_FALSE);
+   elm_object_focus_allow_set(bt, EINA_FALSE);
+   evas_object_show(bt);
+
+   bt = elm_button_add(win);
    elm_object_text_set(bt, "Ins");
    evas_object_smart_callback_add(bt, "clicked", my_ent_bt_ins, en);
    evas_object_size_hint_align_set(bt, EVAS_HINT_FILL, EVAS_HINT_FILL);
diff --git a/src/lib/elm_entry.c b/src/lib/elm_entry.c
index 01b3e80..078ad9b 100644
--- a/src/lib/elm_entry.c
+++ b/src/lib/elm_entry.c
@@ -4018,6 +4018,36 @@ _select_all(Eo *obj EINA_UNUSED, void *_pd, va_list 
*list EINA_UNUSED)
    edje_object_part_text_select_all(sd->entry_edje, "elm.text");
 }
 
+EAPI void
+elm_entry_select_region_set(Evas_Object *obj, int start, int end)
+{
+   ELM_ENTRY_CHECK(obj);
+   eo_do(obj, elm_obj_entry_select_region_set(start, end));
+}
+
+static void
+_select_region_set(Eo *obj EINA_UNUSED, void *_pd, va_list *list)
+{
+   Elm_Entry_Smart_Data *sd = _pd;
+   int start = va_arg(*list, int);
+   int end = va_arg(*list, int);
+
+   if ((sd->password)) return;
+   if (sd->sel_mode)
+     {
+        sd->sel_mode = EINA_FALSE;
+        if (!_elm_config->desktop_entry)
+          edje_object_part_text_select_allow_set
+            (sd->entry_edje, "elm.text", EINA_FALSE);
+        edje_object_signal_emit(sd->entry_edje, "elm,state,select,off", "elm");
+     }
+
+   edje_object_part_text_cursor_pos_set(sd->entry_edje, "elm.text", 
EDJE_CURSOR_MAIN, start);
+   edje_object_part_text_select_begin(sd->entry_edje, "elm.text");
+   edje_object_part_text_cursor_pos_set(sd->entry_edje, "elm.text", 
EDJE_CURSOR_MAIN, end);
+   edje_object_part_text_select_extend(sd->entry_edje, "elm.text");
+}
+
 EAPI Eina_Bool
 elm_entry_cursor_geometry_get(const Evas_Object *obj,
                               Evas_Coord *x,
@@ -5880,6 +5910,7 @@ _class_constructor(Eo_Class *klass)
         EO_OP_FUNC(ELM_OBJ_ENTRY_ID(ELM_OBJ_ENTRY_SUB_ID_EDITABLE_GET), 
_editable_get),
         EO_OP_FUNC(ELM_OBJ_ENTRY_ID(ELM_OBJ_ENTRY_SUB_ID_SELECT_NONE), 
_select_none),
         EO_OP_FUNC(ELM_OBJ_ENTRY_ID(ELM_OBJ_ENTRY_SUB_ID_SELECT_ALL), 
_select_all),
+        EO_OP_FUNC(ELM_OBJ_ENTRY_ID(ELM_OBJ_ENTRY_SUB_ID_SELECT_REGION_SET), 
_select_region_set),
         EO_OP_FUNC(ELM_OBJ_ENTRY_ID(ELM_OBJ_ENTRY_SUB_ID_CURSOR_GEOMETRY_GET), 
_cursor_geometry_get),
         EO_OP_FUNC(ELM_OBJ_ENTRY_ID(ELM_OBJ_ENTRY_SUB_ID_CURSOR_NEXT), 
_cursor_next),
         EO_OP_FUNC(ELM_OBJ_ENTRY_ID(ELM_OBJ_ENTRY_SUB_ID_CURSOR_PREV), 
_cursor_prev),
@@ -5979,6 +6010,7 @@ static const Eo_Op_Description op_desc[] = {
      EO_OP_DESCRIPTION(ELM_OBJ_ENTRY_SUB_ID_EDITABLE_GET, "Get whether the 
entry is editable or not."),
      EO_OP_DESCRIPTION(ELM_OBJ_ENTRY_SUB_ID_SELECT_NONE, "This drops any 
existing text selection within the entry."),
      EO_OP_DESCRIPTION(ELM_OBJ_ENTRY_SUB_ID_SELECT_ALL, "This selects all text 
within the entry."),
+     EO_OP_DESCRIPTION(ELM_OBJ_ENTRY_SUB_ID_SELECT_REGION_SET, "This selects a 
region of text within the entry."),
      EO_OP_DESCRIPTION(ELM_OBJ_ENTRY_SUB_ID_CURSOR_GEOMETRY_GET, "This 
function returns the geometry of the cursor."),
      EO_OP_DESCRIPTION(ELM_OBJ_ENTRY_SUB_ID_CURSOR_NEXT, "This moves the 
cursor one place to the right within the entry."),
      EO_OP_DESCRIPTION(ELM_OBJ_ENTRY_SUB_ID_CURSOR_PREV, "This moves the 
cursor one place to the left within the entry."),
diff --git a/src/lib/elm_entry_eo.h b/src/lib/elm_entry_eo.h
index e168ce5..d9d7886 100644
--- a/src/lib/elm_entry_eo.h
+++ b/src/lib/elm_entry_eo.h
@@ -27,6 +27,7 @@ enum
    ELM_OBJ_ENTRY_SUB_ID_EDITABLE_GET,
    ELM_OBJ_ENTRY_SUB_ID_SELECT_NONE,
    ELM_OBJ_ENTRY_SUB_ID_SELECT_ALL,
+   ELM_OBJ_ENTRY_SUB_ID_SELECT_REGION_SET,
    ELM_OBJ_ENTRY_SUB_ID_CURSOR_GEOMETRY_GET,
    ELM_OBJ_ENTRY_SUB_ID_CURSOR_NEXT,
    ELM_OBJ_ENTRY_SUB_ID_CURSOR_PREV,
@@ -395,6 +396,21 @@ enum
 #define elm_obj_entry_select_all() 
ELM_OBJ_ENTRY_ID(ELM_OBJ_ENTRY_SUB_ID_SELECT_ALL)
 
 /**
+ * @def elm_obj_entry_select_region_set
+ * @since 1.9
+ *
+ * This selects a region of text within the entry.
+ *
+ * @param[in] start
+ * @param[in] end
+ *
+ * @see elm_entry_select_region_set
+ *
+ * @ingroup Entry
+ */
+#define elm_obj_entry_select_region_set(start, end) 
ELM_OBJ_ENTRY_ID(ELM_OBJ_ENTRY_SUB_ID_SELECT_REGION_SET), EO_TYPECHECK(int, 
start), EO_TYPECHECK(int, end)
+
+/**
  * @def elm_obj_entry_cursor_geometry_get
  * @since 1.8
  *
diff --git a/src/lib/elm_entry_legacy.h b/src/lib/elm_entry_legacy.h
index b3f5506..26141d2 100644
--- a/src/lib/elm_entry_legacy.h
+++ b/src/lib/elm_entry_legacy.h
@@ -348,6 +348,17 @@ EAPI void               elm_entry_select_none(Evas_Object 
*obj);
 EAPI void               elm_entry_select_all(Evas_Object *obj);
 
 /**
+ * This selects a region of text within the entry.
+ *
+ * @param obj The entry object
+ * @param start The starting position
+ * @param end The end position
+ *
+ * @ingroup Entry
+ */
+EAPI void               elm_entry_select_region_set(Evas_Object *obj, int 
start, int end);
+
+/**
  * This function returns the geometry of the cursor.
  *
  * It's useful if you want to draw something on the cursor (or where it is),

-- 


Reply via email to