Text: enhance cursor_get to ask for a "get type"
authorDaniel Hirt <hirt.danny@gmail.com>
Thu, 8 Jun 2017 13:46:42 +0000 (16:46 +0300)
committerDaniel Hirt <hirt.danny@gmail.com>
Sun, 11 Jun 2017 21:10:05 +0000 (00:10 +0300)
src/bin/elementary/test_efl_ui_text.c
src/lib/efl/interfaces/efl_text_cursor.eo
src/lib/efl/interfaces/efl_text_types.eot
src/lib/elementary/efl_ui_internal_text_interactive.c
src/lib/elementary/efl_ui_text.c
src/lib/evas/canvas/evas_object_textblock.c

index 99c23a5..28bcb7f 100644 (file)
@@ -114,7 +114,7 @@ static void
 my_efl_ui_text_bt_4(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
 {
    Evas_Object *en = data;
-   efl_text_cursor_object_item_insert(en, efl_text_cursor_get(en),
+   efl_text_cursor_object_item_insert(en, efl_text_cursor_get(en, EFL_TEXT_CURSOR_GET_MAIN),
          "size=32x32 href=emoticon");
 }
 
@@ -181,7 +181,7 @@ test_efl_ui_text(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *eve
    efl_text_font_width_set(en, EFL_TEXT_FONT_WIDTH_ULTRACONDENSED);
    efl_text_style_normal_color_set(en, 255, 255, 255, 255);
 
-   main_cur = efl_text_cursor_get(en);
+   main_cur = efl_text_cursor_get(en, EFL_TEXT_CURSOR_GET_MAIN);
    cur = efl_text_cursor_new(en);
 
    efl_text_cursor_position_set(en, cur, 2);
index c2aeb3b..4255cc1 100644 (file)
@@ -17,6 +17,9 @@ interface Efl.Text.Cursor {
             legacy: null;
             return: ptr(Efl.Text.Cursor.Cursor_Data); [[Text cursor object]]
          }
+         keys {
+            get_type: Efl.Text.Cursor.Cursor_Get_Type;
+         }
       }
       @property cursor_position {
          set { legacy: null; }
index 739e42c..08bdb3a 100644 (file)
@@ -7,6 +7,19 @@ enum Efl.Text.Bidirectional_Type {
    inherit [[Inherit text type]]
 }
 
+enum Efl.Text.Cursor.Cursor_Get_Type {
+   [[All available cursor states]]
+   legacy: efl_text_cursor_get;
+   default = 0,     [[Main cursor state (alias to "main")]]
+   main,            [[Main cursor state]]
+   selection_begin, [[Selection begin cursor state]]
+   selection_end,   [[Selection end cursor state]]
+   preedit_start,   [[Pre-edit start cursor state]]
+   preedit_end,     [[Pre-edit end cursor starge]]
+   user,            [[User cursor state]]
+   user_extra       [[User extra cursor state]]
+}
+
 struct Efl.Canvas.Text.Annotation; [[EFL text annotations data structure]]
 
 struct Efl.Text.Cursor.Cursor_Data; [[Text cursor data structure]]
index 8353a82..b6f7dda 100644 (file)
@@ -75,7 +75,7 @@ static Eina_Bool
 _entry_imf_retrieve_surrounding_cb(void *data, Ecore_IMF_Context *ctx EINA_UNUSED, char **text, int *cursor_pos)
 {
    Efl_Canvas_Text *obj = data;
-   Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj);
+   Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
    const char *str;
 
    if (text)
@@ -177,7 +177,7 @@ static void
 _entry_imf_event_preedit_changed_cb(void *data, Ecore_IMF_Context *ctx EINA_UNUSED, void *event_info EINA_UNUSED)
 {
    Efl_Canvas_Text *obj = data;
-   Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj);
+   Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
    Efl_Ui_Internal_Text_Interactive_Data *en = efl_data_scope_get(obj, MY_CLASS);
    int cursor_pos;
    int preedit_start_pos, preedit_end_pos;
@@ -330,7 +330,7 @@ static void
 _entry_imf_event_delete_surrounding_cb(void *data, Ecore_IMF_Context *ctx EINA_UNUSED, void *event_info)
 {
    Efl_Canvas_Text *obj = data;
-   Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj);
+   Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
    Efl_Ui_Internal_Text_Interactive_Data *en = efl_data_scope_get(obj, MY_CLASS);
    Ecore_IMF_Event_Delete_Surrounding *ev = event_info;
    Evas_Textblock_Cursor *del_start, *del_end;
@@ -373,7 +373,7 @@ static void
 _entry_imf_event_selection_set_cb(void *data, Ecore_IMF_Context *ctx EINA_UNUSED, void *event_info)
 {
    Efl_Canvas_Text *obj = data;
-   Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj);
+   Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
    Efl_Ui_Internal_Text_Interactive_Data *en = efl_data_scope_get(obj, MY_CLASS);
    Ecore_IMF_Event_Selection *ev = event_info;
 
@@ -464,7 +464,7 @@ _focus_in_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
 
    if (!en->imf_context) return;
 
-   cur = efl_text_cursor_get(obj);
+   cur = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
    ecore_imf_context_focus_in(en->imf_context);
    _entry_imf_cursor_info_set(obj, cur, en);
 #endif
@@ -719,7 +719,7 @@ _key_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
    /* FIXME: Maybe allow selctions to happen even when not editable. */
    if (!en->editable) return;
 
-   cur = efl_text_cursor_get(obj);
+   cur = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
    old_cur_pos = evas_textblock_cursor_pos_get(cur);
 
    control = evas_key_modifier_is_set(ev->modifiers, "Control");
@@ -1098,7 +1098,7 @@ _mouse_down_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj EIN
    Evas_Coord cx, cy;
    Evas_Event_Mouse_Down *ev = event_info;
    Efl_Ui_Internal_Text_Interactive_Data *en = efl_data_scope_get(obj, MY_CLASS);
-   Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj);
+   Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
    Evas_Textblock_Cursor *tc = NULL;
    Eina_Bool dosel = EINA_FALSE;
    Eina_Bool shift;
@@ -1209,7 +1209,7 @@ _mouse_up_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, void
 {
    Evas_Coord cx, cy;
    Efl_Ui_Internal_Text_Interactive_Data *en = efl_data_scope_get(obj, MY_CLASS);
-   Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj);
+   Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
    Evas_Event_Mouse_Up *ev = event_info;
 
    if ((!ev) || (ev->button != 1)) return;
@@ -1250,7 +1250,7 @@ _mouse_move_cb(void *data EINA_UNUSED, Evas *e EINA_UNUSED, Evas_Object *obj, vo
 {
    Evas_Coord cx, cy;
    Efl_Ui_Internal_Text_Interactive_Data *en = efl_data_scope_get(obj, MY_CLASS);
-   Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj);
+   Efl_Canvas_Text_Cursor *cur = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
    Evas_Event_Mouse_Move *ev = event_info;
    Evas_Coord x, y, w, h;
    Evas_Textblock_Cursor *tc;
index a9b9a47..620f432 100644 (file)
@@ -763,7 +763,7 @@ _selection_data_cb(void *data EINA_UNUSED,
           {
              efl_canvas_text_range_delete(obj, start, end);
           }
-        cur = efl_text_cursor_get(obj);
+        cur = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
         efl_text_cursor_text_insert(obj, cur, buf);
      }
    free(buf);
@@ -1049,7 +1049,7 @@ _cursor_geometry_recalc(Evas_Object *obj)
    x = y = w = h = 0;
 
    Efl_Canvas_Text_Cursor *main_cur =
-      efl_text_cursor_get(obj);
+      efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
 
    efl_text_cursor_geometry_get(obj, main_cur,
          EFL_TEXT_CURSOR_TYPE_BEFORE,
@@ -2772,7 +2772,7 @@ _selection_handlers_offset_calc(Evas_Object *obj, Evas_Object *handler, Evas_Coo
 
    evas_object_geometry_get(sd->entry_edje, &ex, &ey, NULL, NULL);
    efl_text_cursor_geometry_get(obj, 
-         efl_text_cursor_get(obj),
+         efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN),
          EFL_TEXT_CURSOR_TYPE_BEFORE,
          &cx, &cy, &cw, &ch,
          NULL, NULL, NULL, NULL);
@@ -2813,7 +2813,7 @@ _start_handler_mouse_down_cb(void *data,
 
    /* Get the cursors */
    efl_ui_text_interactive_selection_cursors_get(text_obj, &sel_start, &sel_end);
-   main_cur = efl_text_cursor_get(text_obj);
+   main_cur = efl_text_cursor_get(text_obj, EFL_TEXT_CURSOR_GET_MAIN);
 
    start_pos = efl_text_cursor_position_get(obj, sel_start);
    end_pos = efl_text_cursor_position_get(obj, sel_end);
@@ -2873,7 +2873,7 @@ _start_handler_mouse_move_cb(void *data,
    pos = efl_text_cursor_position_get(obj, sd->sel_handler_cursor);
 
    /* Set the main cursor. */
-   efl_text_cursor_position_set(obj, efl_text_cursor_get(data), pos);
+   efl_text_cursor_position_set(obj, efl_text_cursor_get(data, EFL_TEXT_CURSOR_GET_MAIN), pos);
 
    ELM_SAFE_FREE(sd->longpress_timer, ecore_timer_del);
    sd->long_pressed = EINA_FALSE;
@@ -2899,7 +2899,7 @@ _end_handler_mouse_down_cb(void *data,
    Eo *text_obj = edje_object_part_swallow_get(sd->entry_edje, "elm.text");
 
    efl_ui_text_interactive_selection_cursors_get(text_obj, &sel_start, &sel_end);
-   main_cur = efl_text_cursor_get(text_obj);
+   main_cur = efl_text_cursor_get(text_obj, EFL_TEXT_CURSOR_GET_MAIN);
 
    start_pos = efl_text_cursor_position_get(obj, sel_start);
    end_pos = efl_text_cursor_position_get(obj, sel_end);
@@ -2959,7 +2959,7 @@ _end_handler_mouse_move_cb(void *data,
    efl_text_cursor_coord_set(obj, sd->sel_handler_cursor, cx, cy);
    pos = efl_text_cursor_position_get(obj, sd->sel_handler_cursor);
    /* Set the main cursor. */
-   efl_text_cursor_position_set(obj, efl_text_cursor_get(data), pos);
+   efl_text_cursor_position_set(obj, efl_text_cursor_get(data, EFL_TEXT_CURSOR_GET_MAIN), pos);
    ELM_SAFE_FREE(sd->longpress_timer, ecore_timer_del);
    sd->long_pressed = EINA_FALSE;
    if (_elm_config->magnifier_enable)
@@ -3451,7 +3451,7 @@ _efl_ui_text_selection_handler_disabled_get(Eo *obj EINA_UNUSED, Efl_Ui_Text_Dat
 static void
 _efl_ui_text_entry_insert(Eo *obj, Efl_Ui_Text_Data *sd, const char *entry)
 {
-   Efl_Canvas_Text_Cursor *cur_obj = efl_text_cursor_get(obj);
+   Efl_Canvas_Text_Cursor *cur_obj = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
    efl_text_cursor_text_insert(obj, cur_obj, entry);
    sd->changed = EINA_TRUE;
    elm_layout_sizing_eval(obj);
@@ -4217,13 +4217,13 @@ fail:
 EOLIAN static int
 _efl_ui_text_elm_interface_atspi_text_caret_offset_get(Eo *obj, Efl_Ui_Text_Data *_pd EINA_UNUSED)
 {
-   return efl_text_cursor_position_get(obj, efl_text_cursor_get(obj));
+   return efl_text_cursor_position_get(obj, efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN));
 }
 
 EOLIAN static Eina_Bool
 _efl_ui_text_elm_interface_atspi_text_caret_offset_set(Eo *obj, Efl_Ui_Text_Data *_pd EINA_UNUSED, int offset)
 {
-   efl_text_cursor_position_set(obj, efl_text_cursor_get(obj), offset);
+   efl_text_cursor_position_set(obj, efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN), offset);
    return EINA_TRUE;
 }
 
@@ -4529,7 +4529,7 @@ _efl_ui_text_elm_interface_atspi_text_editable_content_set(Eo *obj, Efl_Ui_Text_
 EOLIAN static Eina_Bool
 _efl_ui_text_elm_interface_atspi_text_editable_insert(Eo *obj, Efl_Ui_Text_Data *pd, const char *string, int position)
 {
-   Efl_Canvas_Text_Cursor *cur_obj = efl_text_cursor_get(obj);
+   Efl_Canvas_Text_Cursor *cur_obj = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
    efl_text_cursor_position_set(obj, cur_obj, position);
    _efl_ui_text_entry_insert(obj, pd, string);
 
@@ -4579,7 +4579,7 @@ _efl_ui_text_elm_interface_atspi_text_editable_delete(Eo *obj, Efl_Ui_Text_Data
 EOLIAN static Eina_Bool
 _efl_ui_text_elm_interface_atspi_text_editable_paste(Eo *obj, Efl_Ui_Text_Data *_pd EINA_UNUSED, int position)
 {
-   Efl_Canvas_Text_Cursor *cur_obj = efl_text_cursor_get(obj);
+   Efl_Canvas_Text_Cursor *cur_obj = efl_text_cursor_get(obj, EFL_TEXT_CURSOR_GET_MAIN);
    efl_text_cursor_position_set(obj, cur_obj, position);
    efl_ui_text_selection_paste(obj);
    return EINA_TRUE;
@@ -4701,7 +4701,7 @@ _update_text_cursors(Eo *obj)
    xx = yy = ww = hh = -1;
    _decoration_calc_offset(sd, &x, &y);
    bidi_cursor = efl_text_cursor_geometry_get(obj, 
-         efl_text_cursor_get(text_obj),
+         efl_text_cursor_get(text_obj, EFL_TEXT_CURSOR_GET_MAIN),
          EFL_TEXT_CURSOR_TYPE_BEFORE, &xx, &yy, &ww, &hh, &xx2, &yy2,
          NULL, NULL);
    if (ww < 1) ww = 1;
index a9bd949..299c103 100644 (file)
@@ -15548,15 +15548,19 @@ ppar(Evas_Object_Textblock_Paragraph *par)
    EFL_OBJECT_OP_FUNC(efl_dbg_info_get, _efl_canvas_text_efl_object_dbg_info_get)
 
 EOLIAN static Efl_Canvas_Text_Cursor *
-_efl_canvas_text_efl_text_cursor_cursor_get(Eo *eo_obj EINA_UNUSED, Efl_Canvas_Text_Data *o)
+_efl_canvas_text_efl_text_cursor_cursor_get(Eo *eo_obj EINA_UNUSED, Efl_Canvas_Text_Data *o, Efl_Text_Cursor_Cursor_Get_Type get_type)
 {
+   if (get_type > EFL_TEXT_CURSOR_GET_MAIN)
+     {
+        ERR("Unsupported cursor types other than main!");
+     }
    return o->cursor;
 }
 
 EAPI Efl_Canvas_Text_Cursor *
 evas_object_textblock_cursor_get(Eo *eo_obj EINA_UNUSED)
 {
-   return efl_text_cursor_get(eo_obj);
+   return efl_text_cursor_get(eo_obj, EFL_TEXT_CURSOR_GET_MAIN);
 }
 
 EOLIAN static Efl_Canvas_Text_Cursor *