X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Flib%2Felm_entry.c;h=a83bd10d61f36c1c8ab8f95e9d08a96114fc32cd;hb=e837d6e35156ab4ef962d4984034c51312e0a624;hp=6d862a7f07722ff6cd02f81288bfc34ef0c8a632;hpb=c32ea4ee89e7ff0d7ac50e45c15553849e8dcf15;p=framework%2Fuifw%2Felementary.git diff --git a/src/lib/elm_entry.c b/src/lib/elm_entry.c index 6d862a7..a83bd10 100644 --- a/src/lib/elm_entry.c +++ b/src/lib/elm_entry.c @@ -123,6 +123,7 @@ static const char SIG_PRESS[] = "press"; static const char SIG_LONGPRESSED[] = "longpressed"; static const char SIG_CLICKED[] = "clicked"; static const char SIG_CLICKED_DOUBLE[] = "clicked,double"; +static const char SIG_CLICKED_TRIPLE[] = "clicked,triple"; static const char SIG_FOCUSED[] = "focused"; static const char SIG_UNFOCUSED[] = "unfocused"; static const char SIG_SELECTION_PASTE[] = "selection,paste"; @@ -145,6 +146,7 @@ static const Evas_Smart_Cb_Description _signals[] = { {SIG_LONGPRESSED, ""}, {SIG_CLICKED, ""}, {SIG_CLICKED_DOUBLE, ""}, + {SIG_CLICKED_TRIPLE, ""}, {SIG_FOCUSED, ""}, {SIG_UNFOCUSED, ""}, {SIG_SELECTION_PASTE, ""}, @@ -546,6 +548,7 @@ _recalc_cursor_geometry(Evas_Object *obj) Widget_Data *wd = elm_widget_data_get(obj); if (!wd) return; evas_object_smart_callback_call(obj, SIG_CURSOR_CHANGED, NULL); + if (!elm_object_focus_get(obj)) return; if (!wd->deferred_recalc_job) { Evas_Coord cx, cy, cw, ch; @@ -617,7 +620,7 @@ _elm_win_recalc_job(void *data) } } - if (wd->deferred_cur) + if ((wd->deferred_cur) && (elm_object_focus_get(data))) { Evas_Coord cx, cy, cw, ch; edje_object_part_text_cursor_geometry_get(wd->ent, "elm.text", @@ -949,6 +952,7 @@ _store_selection(Elm_Sel_Type seltype, Evas_Object *obj) if (!wd) return; sel = edje_object_part_text_selection_get(wd->ent, "elm.text"); + if ((!sel) || (!sel[0])) return; /* avoid deleting our own selection */ elm_selection_set(seltype, obj, ELM_SEL_FORMAT_MARKUP, sel); if (seltype == ELM_SEL_CLIPBOARD) eina_stringshare_replace(&wd->cut_sel, sel); @@ -969,6 +973,7 @@ _cut(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) _store_selection(ELM_SEL_CLIPBOARD, data); edje_object_part_text_insert(wd->ent, "elm.text", ""); edje_object_part_text_select_none(wd->ent, "elm.text"); + _sizing_eval(data); } static void @@ -1312,14 +1317,29 @@ _signal_selection_start(void *data, Evas_Object *obj __UNUSED__, const char *emi } static void +_signal_selection_all(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__) +{ + Widget_Data *wd = elm_widget_data_get(data); + if (!wd) return; + elm_entry_select_all(data); +} + +static void +_signal_selection_none(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__) +{ + Widget_Data *wd = elm_widget_data_get(data); + if (!wd) return; + elm_entry_select_none(data); +} + +static void _signal_selection_changed(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__) { Widget_Data *wd = elm_widget_data_get(data); if (!wd) return; wd->have_selection = EINA_TRUE; evas_object_smart_callback_call(data, SIG_SELECTION_CHANGED, NULL); - elm_selection_set(ELM_SEL_PRIMARY, obj, ELM_SEL_FORMAT_MARKUP, - elm_entry_selection_get(data)); + _store_selection(ELM_SEL_PRIMARY, data); } static void @@ -1384,24 +1404,13 @@ _signal_entry_paste_request(void *data, Evas_Object *obj __UNUSED__, const char static void _signal_entry_copy_notify(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__) { - Widget_Data *wd = elm_widget_data_get(data); - if (!wd) return; - evas_object_smart_callback_call(data, SIG_SELECTION_COPY, NULL); - elm_selection_set(ELM_SEL_CLIPBOARD, obj, ELM_SEL_FORMAT_MARKUP, - elm_entry_selection_get(data)); + _copy(data, NULL, NULL); } static void _signal_entry_cut_notify(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__) { - Widget_Data *wd = elm_widget_data_get(data); - if (!wd) return; - evas_object_smart_callback_call(data, SIG_SELECTION_CUT, NULL); - elm_selection_set(ELM_SEL_CLIPBOARD, obj, ELM_SEL_FORMAT_MARKUP, - elm_entry_selection_get(data)); - edje_object_part_text_insert(wd->ent, "elm.text", ""); - wd->changed = EINA_TRUE; - _sizing_eval(data); + _cut(data, NULL, NULL); } static void @@ -1569,6 +1578,14 @@ _signal_mouse_double(void *data, Evas_Object *obj __UNUSED__, const char *emissi evas_object_smart_callback_call(data, SIG_CLICKED_DOUBLE, NULL); } +static void +_signal_mouse_triple(void *data, Evas_Object *obj __UNUSED__, const char *emission __UNUSED__, const char *source __UNUSED__) +{ + Widget_Data *wd = elm_widget_data_get(data); + if (!wd) return; + evas_object_smart_callback_call(data, SIG_CLICKED_TRIPLE, NULL); +} + #ifdef HAVE_ELEMENTARY_X static Eina_Bool _event_selection_notify(void *data, int type __UNUSED__, void *event) @@ -1896,7 +1913,28 @@ _elm_entry_text_get(const Evas_Object *obj, const char *item) ERR("text=NULL for edje %p, part 'elm.text'", wd->ent); return NULL; } - eina_stringshare_replace(&wd->text, text); + + if (wd->append_text_len > 0) + { + char *tmpbuf; + size_t tlen; + tlen = strlen(text); + tmpbuf = malloc(tlen + wd->append_text_len + 1); + if (!tmpbuf) + { + ERR("Failed to allocate memory for entry's text %p", obj); + return NULL; + } + memcpy(tmpbuf, text, tlen); + memcpy(tmpbuf + tlen, wd->append_text_left, wd->append_text_len); + tmpbuf[tlen + wd->append_text_len] = '\0'; + eina_stringshare_replace(&wd->text, tmpbuf); + free(tmpbuf); + } + else + { + eina_stringshare_replace(&wd->text, text); + } return wd->text; } @@ -1938,6 +1976,8 @@ elm_entry_add(Evas_Object *parent) evas_object_size_hint_align_set(wd->scroller, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_smart_scroller_bounce_allow_set(wd->scroller, EINA_FALSE, EINA_FALSE); evas_object_propagate_events_set(wd->scroller, EINA_TRUE); + evas_object_propagate_events_set(elm_smart_scroller_edje_object_get( + wd->scroller), EINA_TRUE); wd->linewrap = ELM_WRAP_WORD; wd->editable = EINA_TRUE; @@ -1968,11 +2008,13 @@ elm_entry_add(Evas_Object *parent) _signal_selection_start, obj); edje_object_signal_callback_add(wd->ent, "selection,changed", "elm.text", _signal_selection_changed, obj); + edje_object_signal_callback_add(wd->ent, "entry,selection,all,request", "elm.text", + _signal_selection_all, obj); + edje_object_signal_callback_add(wd->ent, "entry,selection,none,request", "elm.text", + _signal_selection_none, obj); edje_object_signal_callback_add(wd->ent, "selection,cleared", "elm.text", _signal_selection_cleared, obj); - edje_object_signal_callback_add(wd->ent, "entry,paste,request,1", "elm.text", - _signal_entry_paste_request, obj); - edje_object_signal_callback_add(wd->ent, "entry,paste,request,3", "elm.text", + edje_object_signal_callback_add(wd->ent, "entry,paste,request,*", "elm.text", _signal_entry_paste_request, obj); edje_object_signal_callback_add(wd->ent, "entry,copy,notify", "elm.text", _signal_entry_copy_notify, obj); @@ -2000,6 +2042,8 @@ elm_entry_add(Evas_Object *parent) _signal_mouse_clicked, obj); edje_object_signal_callback_add(wd->ent, "mouse,down,1,double", "elm.text", _signal_mouse_double, obj); + edje_object_signal_callback_add(wd->ent, "mouse,down,1,triple", "elm.text", + _signal_mouse_triple, obj); edje_object_part_text_set(wd->ent, "elm.text", ""); if (_elm_config->desktop_entry) edje_object_part_text_select_allow_set(wd->ent, "elm.text", EINA_TRUE);