diff --git a/legacy/elementary/src/bin/test_hoversel.c b/legacy/elementary/src/bin/test_hoversel.c index b7a9c110b3..c638838714 100644 --- a/legacy/elementary/src/bin/test_hoversel.c +++ b/legacy/elementary/src/bin/test_hoversel.c @@ -277,6 +277,22 @@ test_hoversel(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_ evas_object_show(win); } +static void +_item_focused_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + Elm_Object_Item *it = event_info; + + printf("item,focused: %p\n", it); +} + +static void +_item_unfocused_cb(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info) +{ + Elm_Object_Item *it = event_info; + + printf("item,unfocused: %p\n", it); +} + void test_hoversel_focus(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED) { @@ -308,6 +324,8 @@ test_hoversel_focus(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void * elm_box_pack_end(bx, hoversel); evas_object_show(hoversel); elm_object_focus_set(hoversel, EINA_TRUE); + evas_object_smart_callback_add(hoversel, "item,focused", _item_focused_cb, NULL); + evas_object_smart_callback_add(hoversel, "item,unfocused", _item_unfocused_cb, NULL); hoversel = elm_hoversel_add(win); elm_hoversel_horizontal_set(hoversel, EINA_TRUE); @@ -321,6 +339,8 @@ test_hoversel_focus(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void * NULL); elm_box_pack_end(bx, hoversel); evas_object_show(hoversel); + evas_object_smart_callback_add(hoversel, "item,focused", _item_focused_cb, NULL); + evas_object_smart_callback_add(hoversel, "item,unfocused", _item_unfocused_cb, NULL); hoversel = elm_hoversel_add(win); elm_hoversel_hover_parent_set(hoversel, win); @@ -335,6 +355,8 @@ test_hoversel_focus(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void * NULL); elm_box_pack_end(bx, hoversel); evas_object_show(hoversel); + evas_object_smart_callback_add(hoversel, "item,focused", _item_focused_cb, NULL); + evas_object_smart_callback_add(hoversel, "item,unfocused", _item_unfocused_cb, NULL); evas_object_resize(win, 320, 500); evas_object_show(win); diff --git a/legacy/elementary/src/lib/elc_hoversel.c b/legacy/elementary/src/lib/elc_hoversel.c index 68a746e4f8..a863602fc6 100644 --- a/legacy/elementary/src/lib/elc_hoversel.c +++ b/legacy/elementary/src/lib/elc_hoversel.c @@ -16,10 +16,15 @@ EAPI Eo_Op ELM_OBJ_HOVERSEL_BASE_ID = EO_NOOP; static const char SIG_SELECTED[] = "selected"; static const char SIG_DISMISSED[] = "dismissed"; static const char SIG_EXPANDED[] = "expanded"; +static const char SIG_ITEM_FOCUSED[] = "item,focused"; +static const char SIG_ITEM_UNFOCUSED[] = "item,unfocused"; + static const Evas_Smart_Cb_Description _smart_callbacks[] = { {SIG_SELECTED, ""}, {SIG_DISMISSED, ""}, {SIG_EXPANDED, ""}, + {SIG_ITEM_FOCUSED, ""}, + {SIG_ITEM_UNFOCUSED, ""}, {"clicked", ""}, /**< handled by parent button class */ {SIG_WIDGET_LANG_CHANGED, ""}, /**< handled by elm_widget */ {SIG_WIDGET_ACCESS_CHANGED, ""}, /**< handled by elm_widget */ @@ -101,6 +106,26 @@ _on_item_clicked(void *data, elm_hoversel_hover_end(obj2); } +static void +_item_focused_cb(void *data, + Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Elm_Object_Item *it = data; + + evas_object_smart_callback_call(WIDGET(it), SIG_ITEM_FOCUSED, it); +} + +static void +_item_unfocused_cb(void *data, + Evas_Object *obj EINA_UNUSED, + void *event_info EINA_UNUSED) +{ + Elm_Object_Item *it = data; + + evas_object_smart_callback_call(WIDGET(it), SIG_ITEM_UNFOCUSED, it); +} + static void _activate(Evas_Object *obj) { @@ -174,6 +199,8 @@ _activate(Evas_Object *obj) elm_box_pack_end(bx, bt); evas_object_smart_callback_add(bt, "clicked", _on_item_clicked, item); evas_object_show(bt); + evas_object_smart_callback_add(bt, SIG_LAYOUT_FOCUSED, _item_focused_cb, item); + evas_object_smart_callback_add(bt, SIG_LAYOUT_UNFOCUSED, _item_unfocused_cb, item); } if (sd->horizontal) diff --git a/legacy/elementary/src/lib/elc_hoversel.h b/legacy/elementary/src/lib/elc_hoversel.h index c037c2ff30..47469dd99f 100644 --- a/legacy/elementary/src/lib/elc_hoversel.h +++ b/legacy/elementary/src/lib/elc_hoversel.h @@ -27,6 +27,8 @@ * - @c "dismissed" - the hover is dismissed * - @c "expanded" - This is called on clicking hoversel and elm_hoversel_hover_begin(). * - @c "language,changed" - the program's language changed (since 1.9) + * - @c "item,focused" - When the hoversel item has received focus. (since 1.10) + * - @c "item,unfocused" - When the hoversel item has lost focus. (since 1.10) * * Default content parts of the hoversel widget that you can use for are: * @li "icon" - An icon of the hoversel