diff --git a/src/lib/elementary/elm_clock.c b/src/lib/elementary/elm_clock.c index ce5766368e..c7b940c9dc 100644 --- a/src/lib/elementary/elm_clock.c +++ b/src/lib/elementary/elm_clock.c @@ -3,10 +3,12 @@ #endif #define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED +#define EFL_UI_FOCUS_COMPOSITION_PROTECTED #include #include "elm_priv.h" #include "elm_widget_clock.h" +#include "efl_ui_focus_composition.eo.h" #define MY_CLASS ELM_CLOCK_CLASS @@ -338,6 +340,48 @@ _access_time_register(Evas_Object *obj, Eina_Bool is_access) } +static Evas_Object* +_part_get(Evas_Object *part, const char *part_name) +{ + Evas_Object *po; + + po = (Evas_Object *)edje_object_part_object_get + (part, part_name); + + if (_elm_config->access_mode != ELM_ACCESS_MODE_ON) + return po; + + return evas_object_data_get(po, "_part_access_obj"); +} + +static void +_flush_clock_composite_elements(Evas_Object *obj, Elm_Clock_Data *sd) +{ + Eina_List *items = NULL; + int i; + + if (sd->edit) + { + for (i = 0; i < 6; i++) + { + if ((!sd->seconds) && (i >= 4)) break; + if (sd->digedit & (1 << i)) + { + items = eina_list_append(items, _part_get(sd->digit[i], "access.t")); + items = eina_list_append(items, _part_get(sd->digit[i], "access.b")); + } + } + + if (sd->am_pm) + { + items = eina_list_append(items, _part_get(sd->am_pm_obj, "access.t")); + items = eina_list_append(items, _part_get(sd->am_pm_obj, "access.b")); + } + } + + efl_ui_focus_composition_elements_set(obj, items); +} + static void _time_update(Evas_Object *obj, Eina_Bool theme_update) { @@ -468,6 +512,7 @@ _time_update(Evas_Object *obj, Eina_Bool theme_update) sd->cur.am_pm = sd->am_pm; sd->cur.edit = sd->edit; sd->cur.digedit = sd->digedit; + _flush_clock_composite_elements(obj, sd); } if (sd->hrs != sd->cur.hrs) { @@ -701,65 +746,6 @@ _elm_clock_efl_canvas_group_group_del(Eo *obj, Elm_Clock_Data *sd) static Eina_Bool _elm_clock_smart_focus_next_enable = EINA_FALSE; -EOLIAN static Eina_Bool -_elm_clock_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_Clock_Data *_pd EINA_UNUSED) -{ - return _elm_clock_smart_focus_next_enable; -} - -EOLIAN static Eina_Bool -_elm_clock_elm_widget_focus_next(Eo *obj, Elm_Clock_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) -{ - Evas_Object *ao, *po; - Eina_List *items = NULL; - - - if (!sd->edit) - { - *next = (Evas_Object *)obj; - return !elm_widget_highlight_get(obj); - } - else if (!elm_widget_highlight_get(obj)) - { - *next = (Evas_Object *)obj; - return EINA_TRUE; - } - - int i; - for (i = 0; i < 6; i++) - { - if ((!sd->seconds) && (i >= 4)) break; - if (sd->digedit & (1 << i)) - { - po = (Evas_Object *)edje_object_part_object_get - (sd->digit[i], "access.t"); - ao = evas_object_data_get(po, "_part_access_obj"); - items = eina_list_append(items, ao); - - po = (Evas_Object *)edje_object_part_object_get - (sd->digit[i], "access.b"); - ao = evas_object_data_get(po, "_part_access_obj"); - items = eina_list_append(items, ao); - } - } - - if (sd->am_pm) - { - po = (Evas_Object *)edje_object_part_object_get - (sd->am_pm_obj, "access.t"); - ao = evas_object_data_get(po, "_part_access_obj"); - items = eina_list_append(items, ao); - - po = (Evas_Object *)edje_object_part_object_get - (sd->am_pm_obj, "access.b"); - ao = evas_object_data_get(po, "_part_access_obj"); - items = eina_list_append(items, ao); - } - - return elm_widget_focus_list_next_get - (obj, items, eina_list_data_get, dir, next, next_item); -} - static void _access_obj_process(Evas_Object *obj, Eina_Bool is_access) { @@ -941,12 +927,6 @@ _elm_clock_pause_get(Eo *obj EINA_UNUSED, Elm_Clock_Data *sd) return sd->paused; } -EOLIAN static Eina_Bool -_elm_clock_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSED, Elm_Clock_Data *_pd EINA_UNUSED) -{ - return EINA_FALSE; -} - static void _elm_clock_class_constructor(Efl_Class *klass) { diff --git a/src/lib/elementary/elm_clock.eo b/src/lib/elementary/elm_clock.eo index 76b6ef45ae..b519c1aeab 100644 --- a/src/lib/elementary/elm_clock.eo +++ b/src/lib/elementary/elm_clock.eo @@ -18,7 +18,7 @@ enum Elm.Clock.Edit_Mode all = (1 << 6) - 1 [[All digits should be editable.]] } -class Elm.Clock (Efl.Ui.Layout) +class Elm.Clock (Efl.Ui.Layout, Efl.Ui.Focus.Composition) { [[Digital clock widget @@ -163,10 +163,7 @@ class Elm.Clock (Efl.Ui.Layout) implements { class.constructor; Efl.Object.constructor; - Elm.Widget.focus_next_manager_is; - Elm.Widget.focus_direction_manager_is; Elm.Widget.on_access_update; - Elm.Widget.focus_next; Elm.Widget.theme_apply; } events {