diff --git a/legacy/elementary/src/lib/Elementary.h.in b/legacy/elementary/src/lib/Elementary.h.in index 0459d3553c..3716144cee 100644 --- a/legacy/elementary/src/lib/Elementary.h.in +++ b/legacy/elementary/src/lib/Elementary.h.in @@ -781,6 +781,9 @@ extern "C" { EAPI void elm_scroller_page_relative_set(Evas_Object *obj, double h_pagerel, double v_pagerel) EINA_ARG_NONNULL(1); EAPI void elm_scroller_page_size_set(Evas_Object *obj, Evas_Coord h_pagesize, Evas_Coord v_pagesize) EINA_ARG_NONNULL(1); EAPI void elm_scroller_region_bring_in(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_Coord w, Evas_Coord h) EINA_ARG_NONNULL(1); + EAPI void elm_scroller_propagate_events_set(Evas_Object *obj, Eina_Bool propagation); + EAPI Eina_Bool elm_scroller_propagate_events_get(const Evas_Object *obj); + /* smart callbacks called: * "edge,left" * "edge,right" diff --git a/legacy/elementary/src/lib/elc_scrolled_entry.c b/legacy/elementary/src/lib/elc_scrolled_entry.c index a72e00bde1..afd3db06f7 100644 --- a/legacy/elementary/src/lib/elc_scrolled_entry.c +++ b/legacy/elementary/src/lib/elc_scrolled_entry.c @@ -129,12 +129,15 @@ static void _sizing_eval(Evas_Object *obj) { Widget_Data *wd; - Evas_Coord minw, minh; - + Evas_Coord minw, minh, minw_scr, minh_scr; wd = elm_widget_data_get(obj); - if (!wd) - return; - evas_object_size_hint_min_get(wd->scroller, &minw, &minh); + if (!wd) return; + + evas_object_size_hint_min_get(obj, &minw, &minh); + evas_object_size_hint_min_get(wd->scroller, &minw_scr, &minh_scr); + if (minw < minw_scr) minw = minw_scr; + if (minh < minh_scr) minh = minh_scr; + evas_object_size_hint_min_set(obj, minw, minh); if (wd->single_line) evas_object_size_hint_max_set(obj, -1, minh); @@ -386,6 +389,7 @@ elm_scrolled_entry_add(Evas_Object *parent) evas_object_size_hint_weight_set(wd->scroller, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_size_hint_align_set(wd->scroller, EVAS_HINT_FILL, EVAS_HINT_FILL); elm_scroller_bounce_set(wd->scroller, EINA_FALSE, EINA_FALSE); + elm_scroller_propagate_events_set(wd->scroller, EINA_TRUE); evas_object_show(wd->scroller); wd->entry = elm_entry_add(obj); diff --git a/legacy/elementary/src/lib/elm_scroller.c b/legacy/elementary/src/lib/elm_scroller.c index c6167fc3f3..1bd94a0b49 100644 --- a/legacy/elementary/src/lib/elm_scroller.c +++ b/legacy/elementary/src/lib/elm_scroller.c @@ -874,3 +874,46 @@ elm_scroller_region_bring_in(Evas_Object *obj, Evas_Coord x, Evas_Coord y, Evas_ if ((!wd) || (!wd->scr)) return; elm_smart_scroller_region_bring_in(wd->scr, x, y, w, h); } + + +/** + * Set event propagation on a scroller + * + * This enables or disabled event propagation from the scroller content to + * the scroller and its parent. By default event propagation is disabled. + * + * @param obj The scroller object + * @param propagation If propagation is enabled or not + * + * @ingroup Scroller + */ +EAPI void +elm_scroller_propagate_events_set(Evas_Object *obj, Eina_Bool propagation) +{ + ELM_CHECK_WIDTYPE(obj, widtype); + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return; + + evas_object_propagate_events_set(wd->scr, propagation); +} + +/** + * Get event propagation for a scroller + * + * This gets the event propagation for a scroller. See + * elm_scroller_propagate_events_set() for more information + * + * @param obj The scroller object + * @return The propagation state + * + * @ingroup Scroller + */ +EAPI Eina_Bool +elm_scroller_propagate_events_get(const Evas_Object *obj) +{ + ELM_CHECK_WIDTYPE(obj, widtype) EINA_FALSE; + Widget_Data *wd = elm_widget_data_get(obj); + if (!wd) return EINA_FALSE; + + return evas_object_propagate_events_get(wd->scr); +}