summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Hirt <daniel.hirt@samsung.com>2016-06-15 18:29:03 +0000
committerDaniel Hirt <daniel.hirt@samsung.com>2016-06-15 18:34:33 +0000
commit1cc55b1ee87443bd9f3cadbd2f747fc46d058fe8 (patch)
tree75ef86a90747c560ad4f0792c9a593da8c2c4d03
parent991de2967bd90792f27250740960569a8b5d9520 (diff)
downloadefl-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.c142
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