diff --git a/legacy/edje/src/lib/edje_callbacks.c b/legacy/edje/src/lib/edje_callbacks.c index 2453a31b5f..86f0c467a0 100644 --- a/legacy/edje/src/lib/edje_callbacks.c +++ b/legacy/edje/src/lib/edje_callbacks.c @@ -364,3 +364,57 @@ _edje_pending_timer_cb(void *data) free(pp); return 0; } + +void +_edje_callbacks_add(Evas_Object *obj, Edje *ed, Edje_Real_Part *rp) +{ + evas_object_event_callback_add(obj, + EVAS_CALLBACK_MOUSE_IN, + _edje_mouse_in_cb, + ed); + evas_object_event_callback_add(obj, + EVAS_CALLBACK_MOUSE_OUT, + _edje_mouse_out_cb, + ed); + evas_object_event_callback_add(obj, + EVAS_CALLBACK_MOUSE_DOWN, + _edje_mouse_down_cb, + ed); + evas_object_event_callback_add(obj, + EVAS_CALLBACK_MOUSE_UP, + _edje_mouse_up_cb, + ed); + evas_object_event_callback_add(obj, + EVAS_CALLBACK_MOUSE_MOVE, + _edje_mouse_move_cb, + ed); + evas_object_event_callback_add(obj, + EVAS_CALLBACK_MOUSE_WHEEL, + _edje_mouse_wheel_cb, + ed); + evas_object_data_set(obj, "real_part", rp); +} + +void +_edje_callbacks_del(Evas_Object *obj) +{ + evas_object_event_callback_del(obj, + EVAS_CALLBACK_MOUSE_IN, + _edje_mouse_in_cb); + evas_object_event_callback_del(obj, + EVAS_CALLBACK_MOUSE_OUT, + _edje_mouse_out_cb); + evas_object_event_callback_del(obj, + EVAS_CALLBACK_MOUSE_DOWN, + _edje_mouse_down_cb); + evas_object_event_callback_del(obj, + EVAS_CALLBACK_MOUSE_UP, + _edje_mouse_up_cb); + evas_object_event_callback_del(obj, + EVAS_CALLBACK_MOUSE_MOVE, + _edje_mouse_move_cb); + evas_object_event_callback_del(obj, + EVAS_CALLBACK_MOUSE_WHEEL, + _edje_mouse_wheel_cb); + evas_object_data_del(obj, "real_part"); +} diff --git a/legacy/edje/src/lib/edje_load.c b/legacy/edje/src/lib/edje_load.c index abd7de3b98..d5e9f94298 100644 --- a/legacy/edje/src/lib/edje_load.c +++ b/legacy/edje/src/lib/edje_load.c @@ -131,31 +131,7 @@ edje_object_file_set(Evas_Object *obj, const char *file, const char *part) { if (ep->mouse_events) { - evas_object_event_callback_add(rp->object, - EVAS_CALLBACK_MOUSE_IN, - _edje_mouse_in_cb, - ed); - evas_object_event_callback_add(rp->object, - EVAS_CALLBACK_MOUSE_OUT, - _edje_mouse_out_cb, - ed); - evas_object_event_callback_add(rp->object, - EVAS_CALLBACK_MOUSE_DOWN, - _edje_mouse_down_cb, - ed); - evas_object_event_callback_add(rp->object, - EVAS_CALLBACK_MOUSE_UP, - _edje_mouse_up_cb, - ed); - evas_object_event_callback_add(rp->object, - EVAS_CALLBACK_MOUSE_MOVE, - _edje_mouse_move_cb, - ed); - evas_object_event_callback_add(rp->object, - EVAS_CALLBACK_MOUSE_WHEEL, - _edje_mouse_wheel_cb, - ed); - evas_object_data_set(rp->object, "real_part", rp); + _edje_callbacks_add(rp->object, ed, rp); if (ep->repeat_events) evas_object_repeat_events_set(rp->object, 1); } @@ -537,25 +513,8 @@ _edje_file_del(Edje *ed) ed->parts = evas_list_remove(ed->parts, rp); if (rp->object) { - evas_object_event_callback_del(rp->object, - EVAS_CALLBACK_MOUSE_IN, - _edje_mouse_in_cb); - evas_object_event_callback_del(rp->object, - EVAS_CALLBACK_MOUSE_OUT, - _edje_mouse_out_cb); - evas_object_event_callback_del(rp->object, - EVAS_CALLBACK_MOUSE_DOWN, - _edje_mouse_down_cb); - evas_object_event_callback_del(rp->object, - EVAS_CALLBACK_MOUSE_UP, - _edje_mouse_up_cb); - evas_object_event_callback_del(rp->object, - EVAS_CALLBACK_MOUSE_MOVE, - _edje_mouse_move_cb); - evas_object_event_callback_del(rp->object, - EVAS_CALLBACK_MOUSE_WHEEL, - _edje_mouse_wheel_cb); _edje_text_real_part_on_del(ed, rp); + _edje_callbacks_del(rp->object); evas_object_del(rp->object); } if (rp->swallowed_object) @@ -565,6 +524,8 @@ _edje_file_del(Edje *ed) EVAS_CALLBACK_FREE, _edje_object_part_swallow_free_cb); evas_object_clip_unset(rp->swallowed_object); + if (rp->part->mouse_events) + _edje_callbacks_del(rp->swallowed_object); rp->swallowed_object = NULL; /* I think it would be better swallowed objects dont get deleted */ /* evas_object_del(rp->swallowed_object);*/ diff --git a/legacy/edje/src/lib/edje_private.h b/legacy/edje/src/lib/edje_private.h index c1c3f6ead8..0de84b2bc0 100644 --- a/legacy/edje/src/lib/edje_private.h +++ b/legacy/edje/src/lib/edje_private.h @@ -912,6 +912,8 @@ void _edje_mouse_move_cb(void *data, Evas * e, Evas_Object * obj, void *event_i void _edje_mouse_wheel_cb(void *data, Evas * e, Evas_Object * obj, void *event_info); int _edje_timer_cb(void *data); int _edje_pending_timer_cb(void *data); +void _edje_callbacks_add(Evas_Object *obj, Edje *ed, Edje_Real_Part *rp); +void _edje_callbacks_del(Evas_Object *obj); void _edje_edd_setup(void); void _edje_edd_free(void); diff --git a/legacy/edje/src/lib/edje_util.c b/legacy/edje/src/lib/edje_util.c index 18fa6875dc..4c1ef5e60b 100644 --- a/legacy/edje/src/lib/edje_util.c +++ b/legacy/edje/src/lib/edje_util.c @@ -785,6 +785,8 @@ edje_object_part_swallow(Evas_Object *obj, const char *part, Evas_Object *obj_sw _edje_object_part_swallow_free_cb); evas_object_clip_unset(rp->swallowed_object); evas_object_data_del(rp->swallowed_object, "\377 edje.swallowing_part"); + if (rp->part->mouse_events) + _edje_callbacks_del(rp->swallowed_object); rp->swallowed_object = NULL; } if (!obj_swallow) return; @@ -845,6 +847,17 @@ edje_object_part_swallow(Evas_Object *obj, const char *part, Evas_Object *obj_sw rp->swallow_params.aspect.h = ah; evas_object_data_set(rp->swallowed_object, "\377 edje.swallowing_part", rp); } + + if (rp->part->mouse_events) + { + _edje_callbacks_add(obj_swallow, ed, rp); + if (rp->part->repeat_events) + evas_object_repeat_events_set(obj_swallow, 1); + } + else + evas_object_pass_events_set(obj_swallow, 1); + + ed->dirty = 1; _edje_recalc(ed); } @@ -1004,6 +1017,10 @@ edje_object_part_unswallow(Evas_Object *obj, Evas_Object *obj_swallow) _edje_object_part_swallow_free_cb); evas_object_clip_unset(rp->swallowed_object); evas_object_data_del(rp->swallowed_object, "\377 edje.swallowing_part"); + + if (rp->part->mouse_events) + _edje_callbacks_del(rp->swallowed_object); + rp->swallowed_object = NULL; rp->swallow_params.min.w = 0; rp->swallow_params.min.h = 0;