efl_ui_Focus_manager_root_focus: add focus rectangle
authorMarcel Hollerbach <marcel-hollerbach@t-online.de>
Mon, 28 Aug 2017 08:20:14 +0000 (10:20 +0200)
committerMarcel Hollerbach <marcel-hollerbach@t-online.de>
Tue, 10 Oct 2017 17:28:47 +0000 (19:28 +0200)
the focus rectangle is basically just a normal efl.canvas.rectangle, but
with the focus interface implemented.

This fixes alot of errors which gets called when the root_focus manager
is used, with the submanager as mixin.

src/Makefile_Elementary.am
src/lib/elementary/efl_ui_focus_manager_root_focus.c
src/lib/elementary/efl_ui_focus_rectangle.eo [new file with mode: 0644]

index b3c5692..656a7df 100644 (file)
@@ -151,6 +151,7 @@ elm_private_eolian_files = \
        lib/elementary/efl_ui_win_part.eo \
        tests/elementary/focus_test.eo \
        tests/elementary/focus_test_sub_main.eo \
+       lib/elementary/efl_ui_focus_rectangle.eo \
        $(NULL)
 
 # Legacy classes - not part of public EO API
index 47000f3..b7fc93b 100644 (file)
@@ -5,6 +5,8 @@
 #include <Elementary.h>
 #include "elm_priv.h"
 
+#include "efl_ui_focus_rectangle.eo.h"
+
 #define MY_CLASS EFL_UI_FOCUS_MANAGER_ROOT_FOCUS_CLASS
 
 typedef struct {
@@ -133,7 +135,11 @@ _efl_ui_focus_manager_root_focus_efl_object_finalize(Eo *obj, Efl_Ui_Focus_Manag
    ret = efl_finalize(efl_super(obj, MY_CLASS));
 
    pd->root = efl_ui_focus_manager_root_get(obj);
-   pd->rect = evas_object_rectangle_add(evas_object_evas_get(pd->root));
+
+   pd->rect = efl_add(EFL_UI_FOCUS_RECTANGLE_CLASS, evas_object_evas_get(pd->root));
+
+   EINA_SAFETY_ON_NULL_RETURN_VAL(pd->rect, NULL);
+
    pd->iterator_list = eina_list_append(pd->iterator_list, pd->root);
 
    _state_eval(obj, pd);
@@ -143,3 +149,36 @@ _efl_ui_focus_manager_root_focus_efl_object_finalize(Eo *obj, Efl_Ui_Focus_Manag
 
 
 #include "efl_ui_focus_manager_root_focus.eo.c"
+/* focus rectnangle implementation */
+typedef struct {
+  Eina_Bool focus;
+} Efl_Ui_Focus_Rectangle_Data;
+
+EOLIAN static Eina_Rect
+_efl_ui_focus_rectangle_efl_ui_focus_object_focus_geometry_get(Eo *obj, Efl_Ui_Focus_Rectangle_Data *pd EINA_UNUSED)
+{
+   Eina_Rect geom;
+
+   evas_object_geometry_get(obj, &geom.x, &geom.y, &geom.w, &geom.h);
+
+   return geom;
+}
+
+
+EOLIAN static void
+_efl_ui_focus_rectangle_efl_ui_focus_object_focus_set(Eo *obj, Efl_Ui_Focus_Rectangle_Data *pd, Eina_Bool focus)
+{
+   efl_ui_focus_object_focus_set(efl_super(obj, EFL_UI_FOCUS_RECTANGLE_CLASS), focus);
+
+   pd->focus = focus;
+}
+
+
+EOLIAN static Eina_Bool
+_efl_ui_focus_rectangle_efl_ui_focus_object_focus_get(Eo *obj EINA_UNUSED, Efl_Ui_Focus_Rectangle_Data *pd)
+{
+   return pd->focus;
+}
+
+
+#include "efl_ui_focus_rectangle.eo.c"
diff --git a/src/lib/elementary/efl_ui_focus_rectangle.eo b/src/lib/elementary/efl_ui_focus_rectangle.eo
new file mode 100644 (file)
index 0000000..63d9ca9
--- /dev/null
@@ -0,0 +1,7 @@
+class Efl.Ui.Focus.Rectangle (Efl.Canvas.Rectangle, Efl.Ui.Focus.Object)
+{
+   implements {
+      Efl.Ui.Focus.Object.focus_geometry {get;}
+      Efl.Ui.Focus.Object.focus {set; get;}
+   }
+}