From 8bfdbd2ba6c8a60c1590b564e9ef76a01e0ae942 Mon Sep 17 00:00:00 2001 From: Daniel Juyung Seo Date: Fri, 7 Jun 2013 01:13:37 +0900 Subject: [PATCH] elm: all the focusable widget now emits "focused" and "unfocused" smart callbacks. 1. documentations, NEWS, and ChangeLog will be updated later after some more test. 2. need to check entry. --- legacy/elementary/src/lib/elm_datetime.c | 6 ++++++ legacy/elementary/src/lib/elm_glview.c | 14 ++++++-------- legacy/elementary/src/lib/elm_layout.c | 5 ++++- legacy/elementary/src/lib/elm_map.c | 4 ++++ legacy/elementary/src/lib/elm_photocam.c | 4 ++++ legacy/elementary/src/lib/elm_toolbar.c | 4 ++++ legacy/elementary/src/lib/elm_web.c | 4 ++++ legacy/elementary/src/lib/elm_widget.c | 11 ++++++++++- legacy/elementary/src/lib/elm_win.c | 5 ++++- 9 files changed, 46 insertions(+), 11 deletions(-) diff --git a/legacy/elementary/src/lib/elm_datetime.c b/legacy/elementary/src/lib/elm_datetime.c index 0622684a6e..e8f1d2c0bd 100644 --- a/legacy/elementary/src/lib/elm_datetime.c +++ b/legacy/elementary/src/lib/elm_datetime.c @@ -452,6 +452,12 @@ static void _elm_datetime_smart_on_focus(Eo *obj, void *_pd, va_list *list) { Eina_Bool *ret = va_arg(*list, Eina_Bool *); + if (ret) *ret = EINA_FALSE; + Eina_Bool int_ret = EINA_FALSE; + + eo_do_super(obj, MY_CLASS, elm_wdg_on_focus(&int_ret)); + if (!int_ret) return; + if (!elm_widget_focus_get(obj)) { Elm_Datetime_Smart_Data *sd = _pd; diff --git a/legacy/elementary/src/lib/elm_glview.c b/legacy/elementary/src/lib/elm_glview.c index a96a940599..f3bf7aeb2d 100644 --- a/legacy/elementary/src/lib/elm_glview.c +++ b/legacy/elementary/src/lib/elm_glview.c @@ -39,17 +39,15 @@ _elm_glview_smart_on_focus(Eo *obj, void *_pd EINA_UNUSED, va_list *list) { Eina_Bool *ret = va_arg(*list, Eina_Bool *); Elm_Widget_Smart_Data *wd = eo_data_scope_get(obj, ELM_OBJ_WIDGET_CLASS); + Eina_Bool int_ret = EINA_FALSE; + + eo_do_super(obj, MY_CLASS, elm_wdg_on_focus(&int_ret)); + if (!int_ret) return; if (elm_widget_focus_get(obj)) - { - evas_object_focus_set(wd->resize_obj, EINA_TRUE); - evas_object_smart_callback_call(obj, SIG_FOCUSED, NULL); - } + evas_object_focus_set(wd->resize_obj, EINA_TRUE); else - { - evas_object_focus_set(wd->resize_obj, EINA_FALSE); - evas_object_smart_callback_call(obj, SIG_UNFOCUSED, NULL); - } + evas_object_focus_set(wd->resize_obj, EINA_FALSE); if (ret) *ret = EINA_TRUE; } diff --git a/legacy/elementary/src/lib/elm_layout.c b/legacy/elementary/src/lib/elm_layout.c index db3bab43be..b92917ae4a 100644 --- a/legacy/elementary/src/lib/elm_layout.c +++ b/legacy/elementary/src/lib/elm_layout.c @@ -370,9 +370,12 @@ static void _elm_layout_smart_on_focus(Eo *obj, void *_pd EINA_UNUSED, va_list *list) { Elm_Widget_Smart_Data *wd = eo_data_scope_get(obj, ELM_OBJ_WIDGET_CLASS); - Eina_Bool *ret = va_arg(*list, Eina_Bool *); if (ret) *ret = EINA_FALSE; + Eina_Bool int_ret = EINA_FALSE; + + eo_do_super(obj, MY_CLASS, elm_wdg_on_focus(&int_ret)); + if (!int_ret) return; if (elm_widget_focus_get(obj)) { diff --git a/legacy/elementary/src/lib/elm_map.c b/legacy/elementary/src/lib/elm_map.c index 6358a3274b..53f6b1db49 100644 --- a/legacy/elementary/src/lib/elm_map.c +++ b/legacy/elementary/src/lib/elm_map.c @@ -3804,6 +3804,10 @@ _elm_map_smart_on_focus(Eo *obj, void *_pd EINA_UNUSED, va_list *list) Eina_Bool *ret = va_arg(*list, Eina_Bool *); if (ret) *ret = EINA_FALSE; Elm_Widget_Smart_Data *wd = eo_data_scope_get(obj, ELM_OBJ_WIDGET_CLASS); + Eina_Bool int_ret = EINA_FALSE; + + eo_do_super(obj, MY_CLASS, elm_wdg_on_focus(&int_ret)); + if (!int_ret) return; if (elm_widget_focus_get(obj)) { diff --git a/legacy/elementary/src/lib/elm_photocam.c b/legacy/elementary/src/lib/elm_photocam.c index 2f8024daf6..019bacb50f 100644 --- a/legacy/elementary/src/lib/elm_photocam.c +++ b/legacy/elementary/src/lib/elm_photocam.c @@ -863,6 +863,10 @@ _elm_photocam_smart_on_focus(Eo *obj, void *_pd EINA_UNUSED, va_list *list) { Eina_Bool *ret = va_arg(*list, Eina_Bool *); Elm_Widget_Smart_Data *wd = eo_data_scope_get(obj, ELM_OBJ_WIDGET_CLASS); + Eina_Bool int_ret = EINA_FALSE; + + eo_do_super(obj, MY_CLASS, elm_wdg_on_focus(&int_ret)); + if (!int_ret) return; if (elm_widget_focus_get(obj)) { diff --git a/legacy/elementary/src/lib/elm_toolbar.c b/legacy/elementary/src/lib/elm_toolbar.c index 5e18fcd07e..db234148e8 100644 --- a/legacy/elementary/src/lib/elm_toolbar.c +++ b/legacy/elementary/src/lib/elm_toolbar.c @@ -571,6 +571,10 @@ _elm_toolbar_smart_on_focus(Eo *obj, void *_pd EINA_UNUSED, va_list *list) Eina_Bool *ret = va_arg(*list, Eina_Bool *); Elm_Widget_Smart_Data *wd = eo_data_scope_get(obj, ELM_OBJ_WIDGET_CLASS); ELM_TOOLBAR_DATA_GET(obj, sd); + Eina_Bool int_ret = EINA_FALSE; + + eo_do_super(obj, MY_CLASS, elm_wdg_on_focus(&int_ret)); + if (!int_ret) return; if (elm_widget_focus_get(obj)) evas_object_focus_set(wd->resize_obj, EINA_TRUE); diff --git a/legacy/elementary/src/lib/elm_web.c b/legacy/elementary/src/lib/elm_web.c index 8c78ccdb06..ae08fa01e8 100644 --- a/legacy/elementary/src/lib/elm_web.c +++ b/legacy/elementary/src/lib/elm_web.c @@ -154,6 +154,10 @@ _elm_web_smart_on_focus(Eo *obj, void *_pd, va_list *list) Elm_Web_Smart_Data *sd = _pd; Elm_Widget_Smart_Data *wd = eo_data_scope_get(obj, ELM_OBJ_WIDGET_CLASS); + Eina_Bool int_ret = EINA_FALSE; + + eo_do_super(obj, MY_CLASS, elm_wdg_on_focus(&int_ret)); + if (!int_ret) return; top = elm_widget_top_get(obj); diff --git a/legacy/elementary/src/lib/elm_widget.c b/legacy/elementary/src/lib/elm_widget.c index bb618b0ca5..70c3d775b1 100644 --- a/legacy/elementary/src/lib/elm_widget.c +++ b/legacy/elementary/src/lib/elm_widget.c @@ -5852,7 +5852,16 @@ static void _elm_widget_on_focus(Eo *obj EINA_UNUSED, void *_pd EINA_UNUSED, va_list *list) { Eina_Bool *ret = va_arg(*list, Eina_Bool *); - if (ret) *ret = EINA_FALSE; + + if (elm_widget_can_focus_get(obj)) + { + if (elm_widget_focus_get(obj)) + evas_object_smart_callback_call(obj, "focused", NULL); + else + evas_object_smart_callback_call(obj, "unfocused", NULL); + } + + if (ret) *ret = EINA_TRUE; } static void diff --git a/legacy/elementary/src/lib/elm_win.c b/legacy/elementary/src/lib/elm_win.c index 3ec6ddd17b..f1d055e195 100644 --- a/legacy/elementary/src/lib/elm_win.c +++ b/legacy/elementary/src/lib/elm_win.c @@ -1128,8 +1128,11 @@ _elm_win_smart_on_focus(Eo *obj, void *_pd, va_list *list) { Eina_Bool *ret = va_arg(*list, Eina_Bool *); if (ret) *ret = EINA_TRUE; - Elm_Win_Smart_Data *sd = _pd; + Eina_Bool int_ret = EINA_FALSE; + + eo_do_super(obj, MY_CLASS, elm_wdg_on_focus(&int_ret)); + if (!int_ret) return; if (sd->img_obj) evas_object_focus_set(sd->img_obj, elm_widget_focus_get(obj));