elementary: add smart callback "focus-in" and "focus-out".

NOTE: Glima could you review this, I am really not sure I should
have implemented it this way.


SVN revision: 74818
This commit is contained in:
Cedric BAIL 2012-08-03 07:00:26 +00:00
parent 624f69ea2f
commit 3148dd42af
3 changed files with 27 additions and 9 deletions

View File

@ -366,3 +366,7 @@
2012-08-02 Cedric Bail
* Fix elm_image_orient_set/get.
2012-08-03 Cedric Bail
* Add smart callback "focus-in" and "focus-out".

View File

@ -19,6 +19,7 @@ Additions:
* Initialize Emotion when necessary.
* Elm_Win_Trap and elm_win_trap_set() to allow e17 integration.
* elm_flip_go_to()
* Add smart callback "focus-in" and "focus-out" when an Elementary object gain or loose focus.
Fixes:

View File

@ -367,6 +367,25 @@ _elm_widget_focus_direction_func_unimplemented(const Evas_Object *obj __UNUSED__
return EINA_FALSE;
}
static Eina_Bool
_elm_widget_focus_call(Elm_Widget_Smart_Data *sd, Evas_Object *obj)
{
Eina_Bool r = EINA_FALSE;
sd->api->on_focus(obj);
if (_elm_legacy_is(obj) && COMPAT_SMART_DATA(sd)->focus)
{
COMPAT_SMART_DATA(sd)->focus(obj);
r = EINA_TRUE;
}
if (sd->focused)
evas_object_smart_callback_call(obj, "focus-in", NULL);
else
evas_object_smart_callback_call(obj, "focus-out", NULL);
return r;
}
static Eina_Bool
_elm_widget_sub_object_add_func(Evas_Object *obj,
Evas_Object *sobj)
@ -831,9 +850,7 @@ _parent_focus(Evas_Object *obj)
if (sd->top_win_focused)
{
sd->focused = EINA_TRUE;
sd->api->on_focus(obj);
if (_elm_legacy_is(obj) && COMPAT_SMART_DATA(sd)->focus)
COMPAT_SMART_DATA(sd)->focus(obj);
_elm_widget_focus_call(sd, obj);
_elm_widget_focus_region_show(obj);
}
sd->focus_order_on_calc = EINA_FALSE;
@ -2726,12 +2743,10 @@ elm_widget_focus_set(Evas_Object *obj,
focus_order++;
sd->focus_order = focus_order;
sd->focused = EINA_TRUE;
sd->api->on_focus(obj);
}
if (_elm_legacy_is(obj) && COMPAT_SMART_DATA(sd)->focus)
if (_elm_widget_focus_call(sd, obj))
{
COMPAT_SMART_DATA(sd)->focus(obj);
return;
}
else
@ -2814,9 +2829,7 @@ elm_widget_focused_object_clear(Evas_Object *obj)
}
}
sd->focused = EINA_FALSE;
sd->api->on_focus(obj);
if (_elm_legacy_is(obj) && COMPAT_SMART_DATA(sd)->focus)
COMPAT_SMART_DATA(sd)->focus(obj);
_elm_widget_focus_call(sd, obj);
}
EAPI void