diff options
author | Daniel Hirt <daniel.hirt@samsung.com> | 2016-06-15 18:29:03 +0000 |
---|---|---|
committer | Daniel Hirt <daniel.hirt@samsung.com> | 2016-06-15 18:34:33 +0000 |
commit | 1cc55b1ee87443bd9f3cadbd2f747fc46d058fe8 (patch) | |
tree | 75ef86a90747c560ad4f0792c9a593da8c2c4d03 | |
parent | 991de2967bd90792f27250740960569a8b5d9520 (diff) | |
download | efl-devs/herdsman/efl_canvas_text.tar.gz |
Efl.Ui.Text: Make cnp work.devs/herdsman/efl_canvas_text
Also, changed the default cnp_mode to PLAINTEXT.
-rw-r--r-- | src/lib/elementary/efl_ui_text.c | 142 |
1 files changed, 98 insertions, 44 deletions
diff --git a/src/lib/elementary/efl_ui_text.c b/src/lib/elementary/efl_ui_text.c index 01b4f3f4c3..3147cc1b58 100644 --- a/src/lib/elementary/efl_ui_text.c +++ b/src/lib/elementary/efl_ui_text.c @@ -779,16 +779,14 @@ _selection_data_cb(void *data EINA_UNUSED, } else { - char *txt = _elm_util_text_to_mkup(buf); - if (txt) + Efl_Canvas_Text_Cursor *cur, *start, *end; + efl_ui_text_interactive_selection_cursors_get(obj, &start, &end); + if (!efl_canvas_text_cursor_equal(start, end)) { - _edje_entry_user_insert(obj, txt); - free(txt); - } - else - { - ERR("Failed to convert text to markup text!"); + efl_canvas_text_range_delete(obj, start, end); } + cur = efl_canvas_text_cursor_get(obj); + efl_canvas_text_cursor_text_insert(cur, buf); } free(buf); @@ -1603,16 +1601,14 @@ _efl_ui_text_entry_paste(Evas_Object *obj, } static void -_paste_cb(void *data, - Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) +_paste_cb(Eo *obj) { Elm_Sel_Format formats = ELM_SEL_FORMAT_MARKUP; - EFL_UI_TEXT_DATA_GET(data, sd); + EFL_UI_TEXT_DATA_GET(obj, sd); eo_event_callback_call - (data, EVAS_SELECTABLE_INTERFACE_EVENT_SELECTION_PASTE, NULL); + (obj, EVAS_SELECTABLE_INTERFACE_EVENT_SELECTION_PASTE, NULL); sd->selection_asked = EINA_TRUE; @@ -1622,7 +1618,15 @@ _paste_cb(void *data, formats |= ELM_SEL_FORMAT_IMAGE; elm_cnp_selection_get - (data, ELM_SEL_TYPE_CLIPBOARD, formats, _selection_data_cb, NULL); + (obj, ELM_SEL_TYPE_CLIPBOARD, formats, _selection_data_cb, NULL); +} + +static void +_hoversel_item_paste_cb(void *data, + Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + _paste_cb(data); } static void @@ -1642,29 +1646,33 @@ static void _selection_store(Elm_Sel_Type seltype, Evas_Object *obj) { - const char *sel; + char *sel; + Efl_Canvas_Text_Cursor *start, *end; EFL_UI_TEXT_DATA_GET(obj, sd); - sel = edje_object_part_text_selection_get(sd->entry_edje, "elm.text"); + efl_ui_text_interactive_selection_cursors_get(obj, &start, &end); + sel = efl_canvas_text_range_text_get(obj, start, end); + if ((!sel) || (!sel[0])) return; /* avoid deleting our own selection */ elm_cnp_selection_set - (obj, seltype, ELM_SEL_FORMAT_MARKUP, sel, strlen(sel)); + (obj, seltype, sd->cnp_mode, sel, strlen(sel)); elm_cnp_selection_loss_callback_set(obj, seltype, _selection_clear, obj); if (seltype == ELM_SEL_TYPE_CLIPBOARD) eina_stringshare_replace(&sd->cut_sel, sel); + + free(sel); } static void -_cut_cb(void *data, - Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) +_cut_cb(Eo *obj) { - EFL_UI_TEXT_DATA_GET(data, sd); + Efl_Canvas_Text_Cursor *start, *end; + EFL_UI_TEXT_DATA_GET(obj, sd); eo_event_callback_call - (data, EVAS_SELECTABLE_INTERFACE_EVENT_SELECTION_CUT, NULL); + (obj, EVAS_SELECTABLE_INTERFACE_EVENT_SELECTION_CUT, NULL); /* Store it */ sd->sel_mode = EINA_FALSE; if (!_elm_config->desktop_entry) @@ -1673,30 +1681,45 @@ _cut_cb(void *data, edje_object_signal_emit(sd->entry_edje, "elm,state,select,off", "elm"); if (!_elm_config->desktop_entry) - elm_widget_scroll_hold_pop(data); + elm_widget_scroll_hold_pop(obj); - _selection_store(ELM_SEL_TYPE_CLIPBOARD, data); - _edje_entry_user_insert(data, ""); + _selection_store(ELM_SEL_TYPE_CLIPBOARD, obj); + efl_ui_text_interactive_selection_cursors_get(obj, &start, &end); + efl_canvas_text_range_delete(obj, start, end); } static void -_copy_cb(void *data, - Evas_Object *obj EINA_UNUSED, - void *event_info EINA_UNUSED) +_hoversel_item_cut_cb(void *data, + Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) { - EFL_UI_TEXT_DATA_GET(data, sd); + _cut_cb(data); +} + +static void +_copy_cb(Eo *obj) +{ + EFL_UI_TEXT_DATA_GET(obj, sd); eo_event_callback_call - (data, EVAS_SELECTABLE_INTERFACE_EVENT_SELECTION_COPY, NULL); + (obj, EVAS_SELECTABLE_INTERFACE_EVENT_SELECTION_COPY, NULL); 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"); - elm_widget_scroll_hold_pop(data); + elm_widget_scroll_hold_pop(obj); } - _selection_store(ELM_SEL_TYPE_CLIPBOARD, data); + _selection_store(ELM_SEL_TYPE_CLIPBOARD, obj); +} + +static void +_hoversel_item_copy_cb(void *data, + Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + _copy_cb(data); } static void @@ -1783,16 +1806,16 @@ _menu_call(Evas_Object *obj) { elm_hoversel_item_add (sd->hoversel, E_("Copy"), NULL, ELM_ICON_NONE, - _copy_cb, obj); + _hoversel_item_copy_cb, obj); if (sd->editable) { elm_hoversel_item_add (sd->hoversel, E_("Cut"), NULL, ELM_ICON_NONE, - _cut_cb, obj); + _hoversel_item_cut_cb, obj); if (ownersel) elm_hoversel_item_add (sd->hoversel, E_("Paste"), NULL, ELM_ICON_NONE, - _paste_cb, obj); + _hoversel_item_paste_cb, obj); } elm_hoversel_item_add (sd->hoversel, E_("Cancel"), NULL, ELM_ICON_NONE, @@ -1815,7 +1838,7 @@ _menu_call(Evas_Object *obj) if (sd->editable) elm_hoversel_item_add (sd->hoversel, E_("Paste"), NULL, ELM_ICON_NONE, - _paste_cb, obj); + _hoversel_item_paste_cb, obj); } } else @@ -2034,10 +2057,41 @@ _key_down_cb(void *data, void *event_info) { Evas_Event_Key_Down *ev = event_info; + Eina_Bool on_hold = EINA_FALSE; + /* First check if context menu disabled is false or not, and * then check for key id */ if ((!_elm_config->context_menu_disabled) && !strcmp(ev->key, "Menu")) - _menu_call(data); + { + _menu_call(data); + on_hold = EINA_TRUE; + } + else + { + Eina_Bool control = evas_key_modifier_is_set(ev->modifiers, "Control"); + + /* Ctrl operations */ + if (control) + { + if (!strncmp(ev->key, "c", 1)) + { + _copy_cb(data); + on_hold = EINA_TRUE; + } + else if (!strncmp(ev->key, "x", 1)) + { + _cut_cb(data); + on_hold = EINA_TRUE; + } + else if (!strncmp(ev->key, "v", 1)) + { + _paste_cb(data); + on_hold = EINA_TRUE; + } + } + } + + if (on_hold) ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD; } static void @@ -2442,7 +2496,7 @@ _entry_copy_notify_signal_cb(void *data, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) { - _copy_cb(data, NULL, NULL); + _copy_cb(data); } static void @@ -2451,7 +2505,7 @@ _entry_cut_notify_signal_cb(void *data, const char *emission EINA_UNUSED, const char *source EINA_UNUSED) { - _cut_cb(data, NULL, NULL); + _cut_cb(data); } static void @@ -3368,7 +3422,7 @@ _entry_selection_callbacks_unregister(Evas_Object *obj) (sd->entry_edje, "selection,start", "elm.text", _entry_selection_start_signal_cb, obj); edje_object_signal_callback_del_full - (sd->entry_edje, "selection,changed", "elm.text", + (obj, "selection,changed", "elm.text", _entry_selection_changed_signal_cb, obj); edje_object_signal_callback_del_full (sd->entry_edje, "entry,selection,all,request", @@ -3673,7 +3727,7 @@ _efl_ui_text_evas_object_smart_add(Eo *obj, Efl_Ui_Text_Data *priv) priv->entry_edje = wd->resize_obj; - priv->cnp_mode = ELM_CNP_MODE_MARKUP; + priv->cnp_mode = ELM_CNP_MODE_PLAINTEXT; priv->line_wrap = ELM_WRAP_WORD; priv->context_menu = EINA_TRUE; priv->auto_save = EINA_TRUE; @@ -4233,21 +4287,21 @@ EOLIAN static void _efl_ui_text_selection_cut(Eo *obj, Efl_Ui_Text_Data *sd) { if ((sd->password)) return; - _cut_cb(obj, NULL, NULL); + _cut_cb(obj); } EOLIAN static void _efl_ui_text_selection_copy(Eo *obj, Efl_Ui_Text_Data *sd) { if ((sd->password)) return; - _copy_cb(obj, NULL, NULL); + _copy_cb(obj); } EOLIAN static void _efl_ui_text_selection_paste(Eo *obj, Efl_Ui_Text_Data *sd) { if ((sd->password)) return; - _paste_cb(obj, NULL, NULL); + _paste_cb(obj); } EOLIAN static void |