From 584a87e89f31b8e98354821acbc091d459036019 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Wed, 8 Oct 2008 15:09:00 +0000 Subject: [PATCH] clean up tracking SVN revision: 36528 --- src/lib/Elementary.h | 30 +++++++++++++---------------- src/lib/elm_hover.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 65 insertions(+), 18 deletions(-) diff --git a/src/lib/Elementary.h b/src/lib/Elementary.h index 2a61387..188920b 100644 --- a/src/lib/Elementary.h +++ b/src/lib/Elementary.h @@ -87,13 +87,13 @@ extern "C" { EAPI void elm_win_alpha_set(Evas_Object *obj, Evas_Bool alpha); EAPI void elm_win_override_set(Evas_Object *obj, Evas_Bool override); // FIXME: implement more of the above calls - /* smart callbacks elm_win objects will call: + /* smart callbacks called: * "delete-request" - the user requested to delete the window */ EAPI Evas_Object *elm_bg_add(Evas_Object *parent); EAPI void elm_bg_file_set(Evas_Object *obj, const char *file, const char *group); - /* smart callbacks elm_win objects will call: + /* smart callbacks called: */ EAPI Evas_Object *elm_icon_add(Evas_Object *parent); @@ -102,7 +102,7 @@ extern "C" { EAPI void elm_icon_no_scale_set(Evas_Object *obj, Evas_Bool no_scale); EAPI void elm_icon_scale_set(Evas_Object *obj, Evas_Bool scale_up, Evas_Bool scale_down); EAPI void elm_icon_fill_outside_set(Evas_Object *obj, Evas_Bool fill_outside); - /* smart callbacks elm_win objects will call: + /* smart callbacks called: * "clicked" - the user clicked the icon */ @@ -113,24 +113,24 @@ extern "C" { EAPI void elm_box_pack_end(Evas_Object *obj, Evas_Object *subobj); EAPI void elm_box_pack_before(Evas_Object *obj, Evas_Object *subobj, Evas_Object *before); EAPI void elm_box_pack_after(Evas_Object *obj, Evas_Object *subobj, Evas_Object *after); - /* smart callbacks elm_win objects will call: + /* smart callbacks called: */ EAPI Evas_Object *elm_button_add(Evas_Object *parent); EAPI void elm_button_label_set(Evas_Object *obj, const char *label); EAPI void elm_button_icon_set(Evas_Object *obj, Evas_Object *icon); - /* smart callbacks elm_win objects will call: + /* smart callbacks called: * "clicked" - the user clicked the button */ EAPI Evas_Object *elm_scroller_add(Evas_Object *parent); EAPI void elm_scroller_content_set(Evas_Object *obj, Evas_Object *child); - /* smart callbacks elm_win objects will call: + /* smart callbacks called: */ EAPI Evas_Object *elm_label_add(Evas_Object *parent); EAPI void elm_label_label_set(Evas_Object *obj, const char *label); - /* smart callbacks elm_win objects will call: + /* smart callbacks called: */ EAPI Evas_Object *elm_toggle_add(Evas_Object *parent); @@ -139,20 +139,20 @@ extern "C" { EAPI void elm_toggle_states_labels_set(Evas_Object *obj, const char *onlabel, const char *offlabel); EAPI void elm_toggle_state_set(Evas_Object *obj, Evas_Bool state); EAPI void elm_toggle_state_pointer_set(Evas_Object *obj, Evas_Bool *statep); - /* smart callbacks elm_win objects will call: + /* smart callbacks called: * "changed" - the user toggled the state */ EAPI Evas_Object *elm_frame_add(Evas_Object *parent); EAPI void elm_frame_label_set(Evas_Object *obj, const char *label); EAPI void elm_frame_content_set(Evas_Object *obj, Evas_Object *content); - /* smart callbacks elm_win objects will call: + /* smart callbacks called: */ EAPI Evas_Object *elm_table_add(Evas_Object *parent); EAPI void elm_table_homogenous_set(Evas_Object *obj, Evas_Bool homogenous); EAPI void elm_table_pack(Evas_Object *obj, Evas_Object *subobj, int x, int y, int w, int h); - /* smart callbacks elm_win objects will call: + /* smart callbacks called: */ EAPI Evas_Object *elm_clock_add(Evas_Object *parent); @@ -161,7 +161,7 @@ extern "C" { EAPI void elm_clock_edit_set(Evas_Object *obj, Evas_Bool edit); EAPI void elm_clock_show_am_pm_set(Evas_Object *obj, Evas_Bool am_pm); EAPI void elm_clock_show_seconds_set(Evas_Object *obj, Evas_Bool seconds); - /* smart callbacks elm_win objects will call: + /* smart callbacks called: * "changed" - the user changed the time */ @@ -169,15 +169,14 @@ extern "C" { EAPI void elm_layout_file_set(Evas_Object *obj, const char *file, const char *group); EAPI void elm_layout_content_set(Evas_Object *obj, const char *swallow, Evas_Object *content); EAPI Evas_Object *elm_layout_edje_get(Evas_Object *obj); - /* smart callbacks elm_win objects will call: + /* smart callbacks called: */ EAPI Evas_Object *elm_hover_add(Evas_Object *parent); EAPI void elm_hover_target_set(Evas_Object *obj, Evas_Object *target); EAPI void elm_hover_parent_set(Evas_Object *obj, Evas_Object *parent); EAPI void elm_hover_content_set(Evas_Object *obj, const char *swallow, Evas_Object *content); - - /* smart callbacks elm_win objects will call: + /* smart callbacks called: */ // FIXME: fixes to do @@ -185,11 +184,8 @@ extern "C" { // * scroller could do with page up/down/left/right buttons and and idea of // a page size // * tab widget focusing (not useful for touchscreen tho...) -// * icon should optionally be able to collect events and call clicked -// callbacks // * hover needs a way to animate show/hide (slide out slots) and have some // graphics for around middle -// * hover needs to track move/resize and del of parent // * hover needs to be able to use custom hover style // * frame needs to be able to use custom frame style // * all widgets need a way to use a custom style diff --git a/src/lib/elm_hover.c b/src/lib/elm_hover.c index 23182fd..86dae99 100644 --- a/src/lib/elm_hover.c +++ b/src/lib/elm_hover.c @@ -28,6 +28,7 @@ static void _del_hook(Evas_Object *obj) { Widget_Data *wd = elm_widget_data_get(obj); + elm_hover_parent_set(obj, NULL); while (wd->subs) { Subinfo *si = wd->subs->data; @@ -126,6 +127,40 @@ _signal_dismiss(void *data, Evas_Object *obj, const char *emission, const char * evas_object_hide(data); } +static void +_parent_move(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + _sizing_eval(data); +} + +static void +_parent_resize(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + _sizing_eval(data); +} + +static void +_parent_show(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Widget_Data *wd = elm_widget_data_get(data); + evas_object_show(wd->cov); +} + +static void +_parent_hide(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Widget_Data *wd = elm_widget_data_get(data); + evas_object_hide(wd->cov); +} + +static void +_parent_del(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Widget_Data *wd = elm_widget_data_get(data); + wd->parent = NULL; + _sizing_eval(data); +} + EAPI Evas_Object * elm_hover_add(Evas_Object *parent) { @@ -185,8 +220,24 @@ EAPI void elm_hover_parent_set(Evas_Object *obj, Evas_Object *parent) { Widget_Data *wd = elm_widget_data_get(obj); + if (wd->parent) + { + evas_object_event_callback_del(wd->parent, EVAS_CALLBACK_MOVE, _parent_move); + evas_object_event_callback_del(wd->parent, EVAS_CALLBACK_RESIZE, _parent_resize); + evas_object_event_callback_del(wd->parent, EVAS_CALLBACK_SHOW, _parent_show); + evas_object_event_callback_del(wd->parent, EVAS_CALLBACK_HIDE, _parent_hide); + evas_object_event_callback_del(wd->parent, EVAS_CALLBACK_DEL, _parent_del); + } wd->parent = parent; - elm_widget_sub_object_add(parent, obj); + if (wd->parent) + { + evas_object_event_callback_add(wd->parent, EVAS_CALLBACK_MOVE, _parent_move, obj); + evas_object_event_callback_add(wd->parent, EVAS_CALLBACK_RESIZE, _parent_resize, obj); + evas_object_event_callback_add(wd->parent, EVAS_CALLBACK_SHOW, _parent_show, obj); + evas_object_event_callback_add(wd->parent, EVAS_CALLBACK_HIDE, _parent_hide, obj); + evas_object_event_callback_add(wd->parent, EVAS_CALLBACK_DEL, _parent_del, obj); + elm_widget_sub_object_add(parent, obj); + } _sizing_eval(obj); } -- 2.7.4