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
This commit is contained in:
Mike Blumenkrantz 2019-08-30 14:47:46 -04:00
parent 228bed4c8c
commit 23220764e2
6 changed files with 56 additions and 38 deletions

View File

@ -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;

View File

@ -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

View File

@ -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;
}

View File

@ -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.]]
}

View File

@ -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));
}

View File

@ -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;