{
const char *str;
Evas_Object *edj;
-
+
edj = elm_smart_scroller_edje_object_get(wd->scroller);
str = edje_object_data_get(edj, "focus_highlight");
if ((str) && (!strcmp(str, "on")))
wd->entmw = minw;
wd->entmh = minh;
elm_coords_finger_size_adjust(1, &minw, 1, &minh);
-
+
if ((minw > 0) && (vw < minw)) vw = minw;
if (minh > vh) vh = minh;
if (wd->scroll)
{
Evas_Coord vw = 0, vh = 0, vmw = 0, vmh = 0, w = -1, h = -1;
-
+
edje_object_size_min_calc(wd->ent, &minw, &minh);
wd->entmw = minw;
wd->entmh = minh;
elm_coords_finger_size_adjust(1, &minw, 1, &minh);
-
+
elm_smart_scroller_child_viewport_size_get(wd->scroller, &vw, &vh);
if ((minw > 0) && (vw < minw)) vw = minw;
{
Widget_Data *wd = elm_widget_data_get(data);
if (!wd) return;
-
+
if (wd->linewrap)
{
_sizing_eval(data);
else if (wd->scroll)
{
Evas_Coord vw = 0, vh = 0;
-
+
elm_smart_scroller_child_viewport_size_get(wd->scroller, &vw, &vh);
if (vw < wd->entmw) vw = wd->entmw;
if (vh < wd->entmh) vh = wd->entmh;
elm_hoversel_horizontal_set(wd->hoversel, EINA_TRUE);
elm_object_style_set(wd->hoversel, "entry");
elm_widget_sub_object_add(obj, wd->hoversel);
- elm_hoversel_label_set(wd->hoversel, "Text");
+ elm_object_text_set(wd->hoversel, "Text");
top = elm_widget_top_get(obj);
if (top) elm_hoversel_hover_parent_set(wd->hoversel, top);
evas_object_smart_callback_add(wd->hoversel, "dismissed", _dismissed, obj);
_sizing_eval(data);
if (wd->text) eina_stringshare_del(wd->text);
wd->text = NULL;
- evas_object_smart_callback_call(data, SIG_CHANGED, NULL);
+ evas_object_smart_callback_call(data, event, NULL);
if (wd->delay_write)
{
ecore_timer_del(wd->delay_write);
evas_object_smart_callback_call(obj, "maxlength,reached", NULL);
}
+static void
+_elm_entry_text_set(Evas_Object *obj, const char *item, const char *entry)
+{
+ int len = 0;
+ ELM_CHECK_WIDTYPE(obj, widtype);
+ if (item) return;
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (!wd) return;
+ if (!entry) entry = "";
+ if (wd->text) eina_stringshare_del(wd->text);
+ wd->text = NULL;
+ wd->changed = EINA_TRUE;
+
+ /* Clear currently pending job if there is one */
+ if (wd->append_text_idler)
+ {
+ ecore_idler_del(wd->append_text_idler);
+ free(wd->append_text_left);
+ wd->append_text_left = NULL;
+ wd->append_text_idler = NULL;
+ }
+
+ len = strlen(entry);
+ /* Split to ~_CHUNK_SIZE chunks */
+ if (len > _CHUNK_SIZE)
+ {
+ wd->append_text_left = (char *) malloc(len + 1);
+ }
+
+ /* If we decided to use the idler */
+ if (wd->append_text_left)
+ {
+ /* Need to clear the entry first */
+ edje_object_part_text_set(wd->ent, "elm.text", "");
+ memcpy(wd->append_text_left, entry, len + 1);
+ wd->append_text_position = 0;
+ wd->append_text_len = len;
+ wd->append_text_idler = ecore_idler_add(_text_append_idler, obj);
+ }
+ else
+ {
+ edje_object_part_text_set(wd->ent, "elm.text", entry);
+ }
+}
+
+static const char *
+_elm_entry_text_get(const Evas_Object *obj, const char *item)
+{
+ ELM_CHECK_WIDTYPE(obj, widtype) NULL;
+ Widget_Data *wd = elm_widget_data_get(obj);
+ if (item) return NULL;
+ const char *text;
+ if (!wd) return NULL;
+ if (wd->text) return wd->text;
+ text = edje_object_part_text_get(wd->ent, "elm.text");
+ if (!text)
+ {
+ ERR("text=NULL for edje %p, part 'elm.text'", wd->ent);
+ return NULL;
+ }
+ eina_stringshare_replace(&wd->text, text);
+ return wd->text;
+}
+
/**
* This adds an entry to @p parent object.
*
elm_object_cursor_set(obj, ELM_CURSOR_XTERM);
elm_widget_can_focus_set(obj, EINA_TRUE);
elm_widget_highlight_ignore_set(obj, EINA_TRUE);
-
+ elm_widget_text_set_hook_set(obj, _elm_entry_text_set);
+ elm_widget_text_get_hook_set(obj, _elm_entry_text_get);
+
wd->scroller = elm_smart_scroller_add(e);
elm_widget_sub_object_add(obj, wd->scroller);
elm_smart_scroller_widget_set(wd->scroller, obj);
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);
-
+
wd->linewrap = ELM_WRAP_WORD;
wd->editable = EINA_TRUE;
wd->disabled = EINA_FALSE;
evas_object_event_callback_add(wd->ent, EVAS_CALLBACK_MOUSE_MOVE,
_mouse_move, obj);
evas_object_event_callback_add(obj, EVAS_CALLBACK_RESIZE, _resize, obj);
-
+
_elm_theme_object_set(obj, wd->ent, "entry", "base", "default");
edje_object_signal_callback_add(wd->ent, "entry,changed", "elm.text",
_signal_entry_changed, obj);
if (wd->scroller)
{
if (wd->single_line)
- elm_smart_scroller_policy_set(wd->scroller,
- ELM_SMART_SCROLLER_POLICY_OFF,
+ elm_smart_scroller_policy_set(wd->scroller,
+ ELM_SMART_SCROLLER_POLICY_OFF,
ELM_SMART_SCROLLER_POLICY_OFF);
else
{
ELM_SMART_SCROLLER_POLICY_ON,
ELM_SMART_SCROLLER_POLICY_OFF
};
- elm_smart_scroller_policy_set(wd->scroller,
- map[wd->policy_h],
+ elm_smart_scroller_policy_set(wd->scroller,
+ map[wd->policy_h],
map[wd->policy_v]);
}
_sizing_eval(obj);
EAPI void
elm_entry_entry_set(Evas_Object *obj, const char *entry)
{
- int len = 0;
- ELM_CHECK_WIDTYPE(obj, widtype);
- Widget_Data *wd = elm_widget_data_get(obj);
- if (!wd) return;
- if (!entry) entry = "";
- if (wd->text) eina_stringshare_del(wd->text);
- wd->text = NULL;
- wd->changed = EINA_TRUE;
-
- /* Clear currently pending job if there is one */
- if (wd->append_text_idler)
- {
- ecore_idler_del(wd->append_text_idler);
- free(wd->append_text_left);
- wd->append_text_left = NULL;
- wd->append_text_idler = NULL;
- }
-
- len = strlen(entry);
- /* Split to ~_CHUNK_SIZE chunks */
- if (len > _CHUNK_SIZE)
- {
- wd->append_text_left = (char *) malloc(len + 1);
- }
-
- /* If we decided to use the idler */
- if (wd->append_text_left)
- {
- /* Need to clear the entry first */
- edje_object_part_text_set(wd->ent, "elm.text", "");
- memcpy(wd->append_text_left, entry, len + 1);
- wd->append_text_position = 0;
- wd->append_text_len = len;
- wd->append_text_idler = ecore_idler_add(_text_append_idler, obj);
- }
- else
- {
- edje_object_part_text_set(wd->ent, "elm.text", entry);
- }
+ _elm_entry_text_set(obj, NULL, entry);
}
/**
EAPI const char *
elm_entry_entry_get(const Evas_Object *obj)
{
- ELM_CHECK_WIDTYPE(obj, widtype) NULL;
- Widget_Data *wd = elm_widget_data_get(obj);
- const char *text;
- if (!wd) return NULL;
- if (wd->text) return wd->text;
- text = edje_object_part_text_get(wd->ent, "elm.text");
- if (!text)
- {
- ERR("text=NULL for edje %p, part 'elm.text'", wd->ent);
- return NULL;
- }
- eina_stringshare_replace(&wd->text, text);
- return wd->text;
+ return _elm_entry_text_get(obj, NULL);
}
/**
* Enable or disable scrolling in entry
*
* Normally the entry is not scrollable unless you enable it with this call.
- *
+ *
* @param obj The entry object
* @param scroll EINA_TRUE if it is to be scrollable, EINA_FALSE otherwise
*
*
* Normally the entry is not scrollable. This gets the scrollable state
* of the entry. See elm_entry_scrollable_set() for more information.
- *
+ *
* @param obj The entry object
* @return The scrollable state
*
if (!wd) return;
wd->policy_h = h;
wd->policy_v = v;
- elm_smart_scroller_policy_set(wd->scroller,
- map[wd->policy_h],
+ elm_smart_scroller_policy_set(wd->scroller,
+ map[wd->policy_h],
map[wd->policy_v]);
}