From c2d0b08e2b2012a8ebf4f898ca8ff4b9882df3e2 Mon Sep 17 00:00:00 2001 From: Marcel Hollerbach Date: Sat, 30 Sep 2017 20:01:18 +0200 Subject: [PATCH] elm_segment_control: migrate to composition! Yes! We now have a widget where the we can focus items ... but nothing more ... ?! --- src/lib/elementary/elm_segment_control.c | 40 +++++-------------- src/lib/elementary/elm_segment_control.eo | 5 +-- .../elementary/elm_segment_control_item.eo | 3 +- 3 files changed, 12 insertions(+), 36 deletions(-) diff --git a/src/lib/elementary/elm_segment_control.c b/src/lib/elementary/elm_segment_control.c index 11a1753b8c..7548ed0aa0 100644 --- a/src/lib/elementary/elm_segment_control.c +++ b/src/lib/elementary/elm_segment_control.c @@ -5,6 +5,7 @@ #define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED #define ELM_WIDGET_ITEM_PROTECTED #define EFL_UI_TRANSLATABLE_PROTECTED +#define EFL_UI_FOCUS_COMPOSITION_PROTECTED #include @@ -12,6 +13,7 @@ #include "elm_segment_control.eo.h" #include "elm_segment_control_item.eo.h" #include "elm_widget_segment_control.h" +#include "efl_ui_focus_composition.eo.h" #define MY_CLASS ELM_SEGMENT_CONTROL_CLASS @@ -138,6 +140,7 @@ _update_list(Elm_Segment_Control_Data *sd) int item_count; Elm_Object_Item *eo_it; + efl_ui_focus_composition_elements_set(sd->obj, eina_list_clone(sd->items)); _position_items(sd); item_count = eina_list_count(sd->items); @@ -645,37 +648,6 @@ _elm_segment_control_efl_canvas_group_group_del(Eo *obj, Elm_Segment_Control_Dat static Eina_Bool _elm_segment_control_smart_focus_next_enable = EINA_FALSE; -EOLIAN static Eina_Bool -_elm_segment_control_elm_widget_focus_next_manager_is(Eo *obj EINA_UNUSED, Elm_Segment_Control_Data *_pd EINA_UNUSED) -{ - return _elm_segment_control_smart_focus_next_enable; -} - -EOLIAN static Eina_Bool -_elm_segment_control_elm_widget_focus_next(Eo *obj, Elm_Segment_Control_Data *sd, Elm_Focus_Direction dir, Evas_Object **next, Elm_Object_Item **next_item) -{ - Eina_List *items = NULL; - Eina_List *l; - Elm_Object_Item *eo_item; - - ELM_SEGMENT_CONTROL_CHECK(obj) EINA_FALSE; - - EINA_LIST_FOREACH(sd->items, l, eo_item) - { - ELM_SEGMENT_ITEM_DATA_GET(eo_item, it); - items = eina_list_append(items, it->base->access_obj); - } - - return elm_widget_focus_list_next_get - (obj, items, eina_list_data_get, dir, next, next_item); -} - -EOLIAN static Eina_Bool -_elm_segment_control_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSED, Elm_Segment_Control_Data *_pd EINA_UNUSED) -{ - return EINA_FALSE; -} - static void _access_obj_process(Elm_Segment_Control_Data *sd, Eina_Bool is_access) { @@ -843,6 +815,12 @@ _elm_segment_control_class_constructor(Efl_Class *klass) _elm_segment_control_smart_focus_next_enable = EINA_TRUE; } +EOLIAN static Eina_Rect +_elm_segment_control_item_efl_ui_focus_object_focus_geometry_get(Eo *obj EINA_UNUSED, Elm_Segment_Control_Item_Data *pd) +{ + return efl_gfx_geometry_get(VIEW(pd)); +} + /* Internal EO APIs and hidden overrides */ #define ELM_SEGMENT_CONTROL_EXTRA_OPS \ diff --git a/src/lib/elementary/elm_segment_control.eo b/src/lib/elementary/elm_segment_control.eo index b9a3f94095..834fe81965 100644 --- a/src/lib/elementary/elm_segment_control.eo +++ b/src/lib/elementary/elm_segment_control.eo @@ -1,4 +1,4 @@ -class Elm.Segment_Control (Efl.Ui.Layout) +class Elm.Segment_Control (Efl.Ui.Layout, Efl.Ui.Focus.Composition) { [[Elementary segment control class]] legacy_prefix: elm_segment_control; @@ -137,9 +137,6 @@ class Elm.Segment_Control (Efl.Ui.Layout) class.constructor; Efl.Object.constructor; Elm.Widget.theme_apply; - Elm.Widget.focus_next_manager_is; - Elm.Widget.focus_next; - Elm.Widget.focus_direction_manager_is; Elm.Widget.on_access_update; Elm.Widget.on_disabled_update; Efl.Ui.Translatable.translation_update; diff --git a/src/lib/elementary/elm_segment_control_item.eo b/src/lib/elementary/elm_segment_control_item.eo index 3a0b973ff5..743b0586f5 100644 --- a/src/lib/elementary/elm_segment_control_item.eo +++ b/src/lib/elementary/elm_segment_control_item.eo @@ -1,4 +1,4 @@ -class Elm.Segment_Control.Item(Elm.Widget.Item) +class Elm.Segment_Control.Item(Elm.Widget.Item, Efl.Ui.Focus.Object) { [[Elementary segment control item class]] legacy_prefix: elm_segment_control_item; @@ -41,5 +41,6 @@ class Elm.Segment_Control.Item(Elm.Widget.Item) Elm.Widget.Item.access_register; Elm.Widget.Item.part_text { get; set; } Elm.Widget.Item.part_content { get; set; } + Efl.Ui.Focus.Object.focus_geometry {get; } } }