diff --git a/legacy/elementary/src/lib/Elementary.h.in b/legacy/elementary/src/lib/Elementary.h.in index c146151f24..2af29ed4c4 100644 --- a/legacy/elementary/src/lib/Elementary.h.in +++ b/legacy/elementary/src/lib/Elementary.h.in @@ -11078,6 +11078,39 @@ extern "C" { * @return The selected text within the entry or NULL on failure */ EAPI const char *elm_entry_selection_get(const Evas_Object *obj) EINA_ARG_NONNULL(1); + /** + * Returns the actual textblock object of the entry. + * + * This function exposes the internal textblock object that actually + * contains and draws the text. This should be used for low-level + * manipulations that are otherwise not possible. + * + * Changing the textblock directly from here will not notify edje/elm to + * recalculate the textblock size automatically, so any modifications + * done to the textblock returned by this function should be followed by + * a call to elm_entry_calc_force(). + * + * The return value is marked as const as an additional warning. + * One should not use the returned object with any of the generic evas + * functions (geometry_get/resize/move and etc), but only with the textblock + * functions; The former will either not work at all, or break the correct + * functionality. + * + * @param obj The entry object + * @return The textblock object. + */ + EAPI const Evas_Object *elm_entry_textblock_get(const Evas_Object *obj) EINA_ARG_NONNULL(1); + /** + * Forces calculation of the entry size and text layouting. + * + * This should be used after modifying the textblock object directly. See + * elm_entry_textblock_get() for more information. + * + * @param obj The entry object + * + * @see elm_entry_textblock_get() + */ + EAPI void elm_entry_calc_force(const Evas_Object *obj) EINA_ARG_NONNULL(1); /** * Inserts the given text into the entry at the current cursor position. * diff --git a/legacy/elementary/src/lib/elm_entry.c b/legacy/elementary/src/lib/elm_entry.c index 48b5b1d26e..ea2665f77c 100644 --- a/legacy/elementary/src/lib/elm_entry.c +++ b/legacy/elementary/src/lib/elm_entry.c @@ -2488,6 +2488,27 @@ elm_entry_is_empty(const Evas_Object *obj) return !ret; } +EAPI const Evas_Object * +elm_entry_textblock_get(const Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype) NULL; + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return NULL; + + return edje_object_part_object_get(wd->ent, "elm.text"); +} + +EAPI void +elm_entry_calc_force(const Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype); + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; + + edje_object_calc_force(wd->ent); +} + + EAPI const char * elm_entry_selection_get(const Evas_Object *obj) {