seoz pushed a commit to branch master.

commit 37ba7ada80519bc73cb7500aa3428cb2e52e732d
Author: Daniel Juyung Seo <[email protected]>
Date:   Fri Jun 7 01:13:37 2013 +0900

    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.
---
 src/lib/elm_datetime.c |  6 ++++++
 src/lib/elm_glview.c   | 14 ++++++--------
 src/lib/elm_layout.c   |  5 ++++-
 src/lib/elm_map.c      |  4 ++++
 src/lib/elm_photocam.c |  4 ++++
 src/lib/elm_toolbar.c  |  4 ++++
 src/lib/elm_web.c      |  4 ++++
 src/lib/elm_widget.c   | 11 ++++++++++-
 src/lib/elm_win.c      |  5 ++++-
 9 files changed, 46 insertions(+), 11 deletions(-)

diff --git a/src/lib/elm_datetime.c b/src/lib/elm_datetime.c
index 0622684..e8f1d2c 100644
--- a/src/lib/elm_datetime.c
+++ b/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/src/lib/elm_glview.c b/src/lib/elm_glview.c
index a96a940..f3bf7ae 100644
--- a/src/lib/elm_glview.c
+++ b/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/src/lib/elm_layout.c b/src/lib/elm_layout.c
index db3bab4..b92917a 100644
--- a/src/lib/elm_layout.c
+++ b/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/src/lib/elm_map.c b/src/lib/elm_map.c
index 6358a32..53f6b1d 100644
--- a/src/lib/elm_map.c
+++ b/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/src/lib/elm_photocam.c b/src/lib/elm_photocam.c
index 2f8024d..019bacb 100644
--- a/src/lib/elm_photocam.c
+++ b/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/src/lib/elm_toolbar.c b/src/lib/elm_toolbar.c
index 5e18fcd..db23414 100644
--- a/src/lib/elm_toolbar.c
+++ b/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/src/lib/elm_web.c b/src/lib/elm_web.c
index 8c78ccd..ae08fa0 100644
--- a/src/lib/elm_web.c
+++ b/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/src/lib/elm_widget.c b/src/lib/elm_widget.c
index bb618b0..70c3d77 100644
--- a/src/lib/elm_widget.c
+++ b/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/src/lib/elm_win.c b/src/lib/elm_win.c
index 3ec6ddd..f1d055e 100644
--- a/src/lib/elm_win.c
+++ b/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));

-- 

------------------------------------------------------------------------------
How ServiceNow helps IT people transform IT departments:
1. A cloud service to automate IT design, transition and operations
2. Dashboards that offer high-level views of enterprise services
3. A single system of record for all IT processes
http://p.sf.net/sfu/servicenow-d2d-j

Reply via email to