diff options
author | Mike Blumenkrantz <zmike@samsung.com> | 2019-08-30 14:47:46 -0400 |
---|---|---|
committer | Mike Blumenkrantz <zmike@samsung.com> | 2019-08-30 14:47:46 -0400 |
commit | 23220764e27ed84698914cc7739b363bf2ed1c69 (patch) | |
tree | a19a04b48bc369fa56f36d67db27a7d6ed822215 | |
parent | 228bed4c8c8ab00773151dc67ea80fe261997d3b (diff) | |
download | efl-23220764e27ed84698914cc7739b363bf2ed1c69.tar.gz |
efl_ui/pan: remove pan content,changed event
Summary:
this was being emitted as a catch-all for pan changes, where something else
should have been monitored/used instead
ref T7708
Reviewers: bu5hm4n
Reviewed By: bu5hm4n
Subscribers: bu5hm4n, cedric, #reviewers, #committers
Tags: #efl_widgets
Maniphest Tasks: T7708
Differential Revision: https://phab.enlightenment.org/D9787
-rw-r--r-- | src/lib/elementary/efl_ui_image_zoomable.c | 12 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_list_view.c | 2 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_pan.c | 13 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_pan.eo | 1 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_scroll_manager.c | 65 | ||||
-rw-r--r-- | src/lib/elementary/efl_ui_widget_scroll_manager.h | 1 |
6 files changed, 56 insertions, 38 deletions
diff --git a/src/lib/elementary/efl_ui_image_zoomable.c b/src/lib/elementary/efl_ui_image_zoomable.c index ee9ad073da..9ab2238b5d 100644 --- a/src/lib/elementary/efl_ui_image_zoomable.c +++ b/src/lib/elementary/efl_ui_image_zoomable.c @@ -143,7 +143,7 @@ _calc_job_cb(void *data) sd->minw = minw; sd->minh = minh; - efl_event_callback_call(sd->pan_obj, EFL_UI_PAN_EVENT_PAN_CONTENT_CHANGED, NULL); + efl_event_callback_call(sd->pan_obj, EFL_UI_PAN_EVENT_PAN_POSITION_CHANGED, NULL); _sizing_eval(obj); } sd->calc_job = NULL; @@ -1823,17 +1823,17 @@ _efl_ui_image_zoomable_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Image_Zoomable priv->pan_obj = efl_add(MY_PAN_CLASS, obj); + pan_data = efl_data_scope_get(priv->pan_obj, MY_PAN_CLASS); + efl_data_ref(obj, MY_CLASS); + pan_data->wobj = obj; + pan_data->wsd = priv; + efl_ui_scroll_manager_pan_set(priv->smanager, priv->pan_obj); if (elm_widget_is_legacy(obj)) edje_object_part_swallow(edje, "elm.swallow.content", priv->pan_obj); else edje_object_part_swallow(edje, "efl.content", priv->pan_obj); - pan_data = efl_data_scope_get(priv->pan_obj, MY_PAN_CLASS); - efl_data_ref(obj, MY_CLASS); - pan_data->wobj = obj; - pan_data->wsd = priv; - efl_event_callback_add(obj, EFL_UI_EVENT_SCROLL, _scroll_cb, obj); priv->g_layer_start = 1.0; diff --git a/src/lib/elementary/efl_ui_list_view.c b/src/lib/elementary/efl_ui_list_view.c index 25ef87fc94..d992a3fafd 100644 --- a/src/lib/elementary/efl_ui_list_view.c +++ b/src/lib/elementary/efl_ui_list_view.c @@ -863,7 +863,7 @@ _efl_ui_list_view_efl_ui_list_view_model_min_size_set(Eo *obj, Efl_Ui_List_View_ pd->min.h = min.h; efl_gfx_hint_size_min_set(wd->resize_obj, EINA_SIZE2D(pd->min.w, pd->min.h)); - efl_event_callback_call(pd->pan_obj, EFL_UI_PAN_EVENT_PAN_CONTENT_CHANGED, NULL); + efl_event_callback_call(pd->pan_obj, EFL_CONTENT_EVENT_CONTENT_CHANGED, NULL); } EOLIAN static void diff --git a/src/lib/elementary/efl_ui_pan.c b/src/lib/elementary/efl_ui_pan.c index 753793606d..9fb68eed2c 100644 --- a/src/lib/elementary/efl_ui_pan.c +++ b/src/lib/elementary/efl_ui_pan.c @@ -122,12 +122,7 @@ _efl_ui_pan_content_del_cb(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { - Evas_Object *pobj = data; - EFL_UI_PAN_DATA_GET_OR_RETURN(pobj, psd); - - psd->content = NULL; - psd->content_w = psd->content_h = psd->px = psd->py = 0; - efl_event_callback_call(pobj, EFL_UI_PAN_EVENT_PAN_CONTENT_CHANGED, NULL); + efl_content_unset(data); } static void @@ -146,7 +141,6 @@ _efl_ui_pan_content_resize_cb(void *data, psd->content_h = sz.h; evas_object_smart_changed(pobj); } - efl_event_callback_call(pobj, EFL_UI_PAN_EVENT_PAN_CONTENT_CHANGED, NULL); efl_event_callback_call(pobj, EFL_UI_PAN_EVENT_PAN_POSITION_CHANGED, NULL); } @@ -160,7 +154,7 @@ _efl_ui_pan_efl_content_content_set(Evas_Object *obj, Efl_Ui_Pan_Data *psd, Evas { efl_content_unset(obj); } - if (!content) goto end; + if (!content) return EINA_TRUE; psd->content = content; efl_canvas_group_member_add(obj, content); @@ -179,9 +173,7 @@ _efl_ui_pan_efl_content_content_set(Evas_Object *obj, Efl_Ui_Pan_Data *psd, Evas evas_object_smart_changed(obj); -end: efl_event_callback_call(obj, EFL_CONTENT_EVENT_CONTENT_CHANGED, content); - efl_event_callback_call(obj, EFL_UI_PAN_EVENT_PAN_CONTENT_CHANGED, NULL); return EINA_TRUE; } @@ -205,7 +197,6 @@ _efl_ui_pan_efl_content_content_unset(Eo *obj EINA_UNUSED, Efl_Ui_Pan_Data *pd) pd->content = NULL; pd->content_w = pd->content_h = pd->px = pd->py = 0; efl_event_callback_call(obj, EFL_CONTENT_EVENT_CONTENT_CHANGED, NULL); - efl_event_callback_call(obj, EFL_UI_PAN_EVENT_PAN_CONTENT_CHANGED, NULL); return old_content; } diff --git a/src/lib/elementary/efl_ui_pan.eo b/src/lib/elementary/efl_ui_pan.eo index 894fd719ad..db06b48e71 100644 --- a/src/lib/elementary/efl_ui_pan.eo +++ b/src/lib/elementary/efl_ui_pan.eo @@ -64,7 +64,6 @@ class @beta Efl.Ui.Pan extends Efl.Canvas.Group implements Efl.Content Efl.Canvas.Group.group_calculate; } events { - pan,content,changed: void; [[The content has changed.]] pan,viewport,changed: void; [[This widget's position or size has changed.]] pan,position,changed: void; [[The content's position has changed.]] } diff --git a/src/lib/elementary/efl_ui_scroll_manager.c b/src/lib/elementary/efl_ui_scroll_manager.c index 393f5eef45..b8d3cdeaf6 100644 --- a/src/lib/elementary/efl_ui_scroll_manager.c +++ b/src/lib/elementary/efl_ui_scroll_manager.c @@ -1964,25 +1964,46 @@ _scroll_event_object_attach(Evas_Object *obj) } static void -_efl_ui_scroll_manager_pan_content_changed_cb(void *data, const Efl_Event *event EINA_UNUSED) +_efl_ui_scroll_manager_content_resized(Efl_Ui_Scroll_Manager_Data *sd, Eina_Size2D content) +{ + sd->content_info.w = content.w; + sd->content_info.h = content.h; + + sd->content_info.resized = EINA_TRUE; + efl_event_callback_call(sd->parent, EFL_UI_SCROLLBAR_EVENT_BAR_SIZE_CHANGED, NULL); + efl_event_callback_call(sd->parent, EFL_UI_SCROLLBAR_EVENT_BAR_POS_CHANGED, NULL); + efl_ui_scrollbar_bar_visibility_update(sd->obj); + _efl_ui_scroll_manager_wanted_region_set(sd->obj); +} + +static void +_efl_ui_scroll_manager_pan_content_resized_cb(void *data, const Efl_Event *event) { Efl_Ui_Scroll_Manager_Data *sd = data; - Eina_Size2D content = {0, 0}; + Eina_Size2D *content = event->info; - if (!sd->pan_obj) return; + _efl_ui_scroll_manager_content_resized(sd, *content); +} - content = efl_ui_pan_content_size_get(sd->pan_obj); - if ((content.w != sd->content_info.w) || (content.h != sd->content_info.h)) - { - sd->content_info.w = content.w; - sd->content_info.h = content.h; +static void +_efl_ui_scroll_manager_pan_content_changed(Efl_Ui_Scroll_Manager_Data *sd, Eo *content) +{ + Eina_Size2D sz = {0, 0}; - sd->content_info.resized = EINA_TRUE; - efl_event_callback_call(sd->parent, EFL_UI_SCROLLBAR_EVENT_BAR_SIZE_CHANGED, NULL); - efl_event_callback_call(sd->parent, EFL_UI_SCROLLBAR_EVENT_BAR_POS_CHANGED, NULL); - efl_ui_scrollbar_bar_visibility_update(sd->obj); - _efl_ui_scroll_manager_wanted_region_set(sd->obj); - } + /* protect against widgets that synthesize these events to trigger this codepath */ + if (content && (content != sd->pan_content)) + efl_event_callback_add(sd->pan_content, EFL_GFX_ENTITY_EVENT_SIZE_CHANGED, _efl_ui_scroll_manager_pan_content_resized_cb, sd); + else if (sd->pan_content) + efl_event_callback_del(sd->pan_content, EFL_GFX_ENTITY_EVENT_SIZE_CHANGED, _efl_ui_scroll_manager_pan_content_resized_cb, sd); + sd->pan_content = content; + sz = efl_ui_pan_content_size_get(sd->pan_obj); + _efl_ui_scroll_manager_content_resized(sd, sz); +} + +static void +_efl_ui_scroll_manager_pan_content_changed_cb(void *data, const Efl_Event *event) +{ + _efl_ui_scroll_manager_pan_content_changed(data, event->info); } static void @@ -2248,23 +2269,25 @@ _efl_ui_scroll_manager_efl_ui_scrollbar_bar_size_get(const Eo *obj EINA_UNUSED, EOLIAN static void _efl_ui_scroll_manager_pan_set(Eo *obj, Efl_Ui_Scroll_Manager_Data *sd, Eo *pan) { + if (sd->pan_obj == pan) return; + if (sd->pan_obj) { efl_event_callback_del - (sd->pan_obj, EFL_UI_PAN_EVENT_PAN_CONTENT_CHANGED, _efl_ui_scroll_manager_pan_content_changed_cb, sd); + (sd->pan_obj, EFL_CONTENT_EVENT_CONTENT_CHANGED, _efl_ui_scroll_manager_pan_content_changed_cb, sd); efl_event_callback_del (sd->pan_obj, EFL_UI_PAN_EVENT_PAN_VIEWPORT_CHANGED, _efl_ui_scroll_manager_pan_viewport_changed_cb, sd); efl_event_callback_del (sd->pan_obj, EFL_UI_PAN_EVENT_PAN_POSITION_CHANGED, _efl_ui_scroll_manager_pan_position_changed_cb, sd); + _efl_ui_scroll_manager_pan_content_changed(sd, NULL); } + sd->pan_obj = pan; if (!pan) return; - sd->pan_obj = pan; - efl_event_callback_add - (sd->pan_obj, EFL_UI_PAN_EVENT_PAN_CONTENT_CHANGED, _efl_ui_scroll_manager_pan_content_changed_cb, sd); + (sd->pan_obj, EFL_CONTENT_EVENT_CONTENT_CHANGED, _efl_ui_scroll_manager_pan_content_changed_cb, sd); efl_event_callback_add (sd->pan_obj, EFL_UI_PAN_EVENT_PAN_VIEWPORT_CHANGED, _efl_ui_scroll_manager_pan_viewport_changed_cb, sd); efl_event_callback_add @@ -2273,6 +2296,7 @@ _efl_ui_scroll_manager_pan_set(Eo *obj, Efl_Ui_Scroll_Manager_Data *sd, Eo *pan) _efl_ui_scroll_manager_pan_resized_cb, obj); evas_object_event_callback_add(sd->pan_obj, EVAS_CALLBACK_MOVE, _efl_ui_scroll_manager_pan_moved_cb, obj); + _efl_ui_scroll_manager_pan_content_changed(sd, efl_content_get(pan)); } EOLIAN static Eina_Bool @@ -2457,11 +2481,14 @@ _efl_ui_scroll_manager_efl_object_destructor(Eo *obj, Efl_Ui_Scroll_Manager_Data evas_object_event_callback_del_full(sd->pan_obj, EVAS_CALLBACK_MOVE, _efl_ui_scroll_manager_pan_moved_cb, obj); efl_event_callback_del - (sd->pan_obj, EFL_UI_PAN_EVENT_PAN_CONTENT_CHANGED, _efl_ui_scroll_manager_pan_content_changed_cb, sd); + (sd->pan_obj, EFL_CONTENT_EVENT_CONTENT_CHANGED, _efl_ui_scroll_manager_pan_content_changed_cb, sd); efl_event_callback_del (sd->pan_obj, EFL_UI_PAN_EVENT_PAN_VIEWPORT_CHANGED, _efl_ui_scroll_manager_pan_viewport_changed_cb, sd); efl_event_callback_del (sd->pan_obj, EFL_UI_PAN_EVENT_PAN_POSITION_CHANGED, _efl_ui_scroll_manager_pan_position_changed_cb, sd); + if (sd->pan_content) + efl_event_callback_del(sd->pan_content, EFL_GFX_ENTITY_EVENT_SIZE_CHANGED, _efl_ui_scroll_manager_pan_content_resized_cb, sd); + sd->pan_content = NULL; } efl_destructor(efl_super(obj, MY_CLASS)); } diff --git a/src/lib/elementary/efl_ui_widget_scroll_manager.h b/src/lib/elementary/efl_ui_widget_scroll_manager.h index d6c478eb6e..4001255c6f 100644 --- a/src/lib/elementary/efl_ui_widget_scroll_manager.h +++ b/src/lib/elementary/efl_ui_widget_scroll_manager.h @@ -18,6 +18,7 @@ typedef struct _Efl_Ui_Scroll_Manager_Data Evas_Object *obj; Evas_Object *pan_obj; + Evas_Object *pan_content; Evas_Object *event_rect; Evas_Object *parent; |