Eina_Bool needs_size_calc:1;
Eina_Bool show_guide_text:1;
Eina_Bool editing:1;
+ Eina_Bool clicked:1;
Eina_Bool single_line:1;
Eina_Bool eraser_show:1;
};
static void _on_focus_hook(void *data, Evas_Object *obj);
static Eina_Bool _empty_entry(Evas_Object *entry);
+static const char SIG_FOCUSED[] = "focused";
+
+static const Evas_Smart_Cb_Description _signals[] = {
+ {SIG_FOCUSED, ""},
+ {NULL, NULL}
+};
+
static void
_del_hook(Evas_Object *obj)
{
Widget_Data *wd = elm_widget_data_get(obj);
if (!wd || !wd->base)
return;
- if (!elm_widget_focus_get(obj) && !(elm_widget_disabled_get(obj)) )
+ if (!elm_widget_focus_get(obj))
{
evas_object_smart_callback_call(obj, "unfocused", NULL);
wd->editing = EINA_FALSE;
+ wd->clicked = EINA_FALSE;
edje_object_signal_emit(wd->base, "elm,state,over,show", "elm");
if (!wd->single_line) // FIXME : if textblock works well, delete
}
}
}
+ else
+ {
+ evas_object_smart_callback_call(obj, SIG_FOCUSED, NULL);
+ }
}
static void
edje_object_part_swallow(wd->base, "elm.swallow.content", wd->entry);
if(!wd->editing)
edje_object_signal_emit(wd->base, "elm,state,over,show", "elm");
+ if(wd->single_line)
+ edje_object_signal_emit(wd->base, "elm,state,text,singleline", "elm");
+ else
+ edje_object_signal_emit(wd->base, "elm,state,text,multiline", "elm");
if(wd->show_guide_text)
{
if(_empty_entry(wd->entry))
{
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
- if ((wd->single_line) && (!wd->editing)) // FIXME : single_line is not needed for this conditional state after TEXTBLOCK fixing
+ if ((wd->single_line) && (wd->clicked) && (!wd->editing)) // FIXME : single_line is not needed for this conditional state after TEXTBLOCK fixing
{
elm_object_focus(wd->entry);
elm_entry_cursor_end_set(wd->entry);
wd->editing = EINA_TRUE;
+ wd->clicked = EINA_FALSE;
}
}
int len = 0;
text = elm_entry_entry_get(entry);
- if(!text) return EINA_FALSE;
+ if(!text) return EINA_TRUE;
strip_text = elm_entry_markup_to_utf8(text);
if (strip_text) {
len = strlen(strip_text);
{
if(wd->eraser_show)
edje_object_signal_emit(wd->base, "elm,state,eraser,hidden", "elm");
+ if(!elm_object_focus_get(wd->entry))
+ {
+ if(wd->guide_text)
+ {
+ edje_object_part_text_set(wd->base, "elm.guidetext", wd->guide_text);
+ edje_object_signal_emit(wd->base, "elm,state,guidetext,visible", "elm");
+ wd->show_guide_text = EINA_TRUE;
+ }
+ }
}
if (!wd->editing && wd->single_line)
else if(strcmp(source, "left_icon") && strcmp(source, "right_icon") && strcmp(source, "eraser"))
{
edje_object_signal_emit(wd->base, "elm,state,over,hide", "elm");
+ wd->clicked = EINA_TRUE;
if ((!wd->single_line) && (!wd->editing)) //FIXME : after fixing TEXTBLOCK, this should be deleted
{
evas_object_event_callback_add(wd->base, EVAS_CALLBACK_RESIZE, _resize_cb, obj);
wd->editing = EINA_FALSE;
+ wd->clicked = EINA_FALSE;
wd->single_line = EINA_FALSE;
wd->eraser_show = EINA_TRUE;
evas_object_smart_callback_add(wd->entry, "changed", _entry_changed_cb, obj);
elm_widget_sub_object_add(obj, wd->entry);
evas_object_show(wd->entry);
+ evas_object_smart_callbacks_descriptions_set(obj, _signals);
_sizing_eval(obj);
return obj;
elm_widget_sub_object_del(obj, wd->licon);
if (icon)
{
- if (!(edje_object_part_swallow(wd->base, "left_icon", icon)))
- return;
+ edje_object_part_swallow(wd->base, "left_icon", icon);
wd->licon = icon;
elm_widget_sub_object_add(obj, icon);
evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS,
elm_widget_sub_object_del(obj, wd->ricon);
if (icon)
{
- if ( !(edje_object_part_swallow(wd->base, "right_icon", icon)) )
- return;
+ edje_object_part_swallow(wd->base, "right_icon", icon);
wd->ricon = icon;
elm_widget_sub_object_add(obj, icon);
evas_object_event_callback_add(icon, EVAS_CALLBACK_CHANGED_SIZE_HINTS,