summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Hollerbach <marcel-hollerbach@t-online.de>2017-07-20 17:37:03 +0200
committerMarcel Hollerbach <marcel-hollerbach@t-online.de>2017-07-24 23:40:38 +0200
commit47ce9956371d71ce426fbf44770d25bbed1e998c (patch)
tree0d4638f9916a3c2f6c754cbd6809f877b9a1c560
parent27f88b534a4a630db4d57814d9c6d8a3d2d8f512 (diff)
downloadefl-47ce9956371d71ce426fbf44770d25bbed1e998c.tar.gz
elm_widget: give feedback if registration was successfull or not
with this we can whipe out the focus.manager field in elm.widget so for the case that something goes wrong we only get the error message where actually something went wrong, and not the whole bunch of follow ups where the code assumes its registered but it isnt.
-rw-r--r--src/lib/elementary/elc_fileselector.c4
-rw-r--r--src/lib/elementary/elm_box.c4
-rw-r--r--src/lib/elementary/elm_scroller.c7
-rw-r--r--src/lib/elementary/elm_table.c4
-rw-r--r--src/lib/elementary/elm_toolbar.c6
-rw-r--r--src/lib/elementary/elm_widget.c19
-rw-r--r--src/lib/elementary/elm_widget.eo4
7 files changed, 25 insertions, 23 deletions
diff --git a/src/lib/elementary/elc_fileselector.c b/src/lib/elementary/elc_fileselector.c
index 30cdf9003b..117e3c87bf 100644
--- a/src/lib/elementary/elc_fileselector.c
+++ b/src/lib/elementary/elc_fileselector.c
@@ -3118,9 +3118,9 @@ _elm_fileselector_elm_widget_focus_direction_manager_is(Eo *obj EINA_UNUSED, Elm
}
EOLIAN static Eina_Bool
-_elm_fileselector_elm_widget_focus_register(Eo *obj, Elm_Fileselector_Data *pd, Efl_Ui_Focus_Manager *manager, Efl_Ui_Focus_Object *logical, Eina_Bool full)
+_elm_fileselector_elm_widget_focus_register(Eo *obj, Elm_Fileselector_Data *pd, Efl_Ui_Focus_Manager *manager, Efl_Ui_Focus_Object *logical, Eina_Bool *logical_flag)
{
- Eina_Bool ret = elm_obj_widget_focus_register(efl_super(obj, MY_CLASS), manager, logical, full);
+ Eina_Bool ret = elm_obj_widget_focus_register(efl_super(obj, MY_CLASS), manager, logical, logical_flag);
_focus_chain_update(obj, pd);
diff --git a/src/lib/elementary/elm_box.c b/src/lib/elementary/elm_box.c
index ed1fd9bfb6..2944096d6b 100644
--- a/src/lib/elementary/elm_box.c
+++ b/src/lib/elementary/elm_box.c
@@ -718,9 +718,9 @@ _elm_box_class_constructor(Efl_Class *klass)
evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
}
EOLIAN Eina_Bool
-_elm_box_elm_widget_focus_register(Eo *obj, Elm_Box_Data *pd, Efl_Ui_Focus_Manager *manager, Efl_Ui_Focus_Object *logical, Eina_Bool full)
+_elm_box_elm_widget_focus_register(Eo *obj, Elm_Box_Data *pd, Efl_Ui_Focus_Manager *manager, Efl_Ui_Focus_Object *logical, Eina_Bool *logical_flag)
{
- Eina_Bool result = elm_obj_widget_focus_register(efl_super(obj, MY_CLASS), manager, logical, full);
+ Eina_Bool result = elm_obj_widget_focus_register(efl_super(obj, MY_CLASS), manager, logical, logical_flag);
//later registering children are automatically set into the order of the internal table
_focus_order_flush(obj, pd);
diff --git a/src/lib/elementary/elm_scroller.c b/src/lib/elementary/elm_scroller.c
index 5e59830e13..d736884fa2 100644
--- a/src/lib/elementary/elm_scroller.c
+++ b/src/lib/elementary/elm_scroller.c
@@ -1431,12 +1431,11 @@ _elm_scroller_class_constructor(Efl_Class *klass)
}
EOLIAN static Eina_Bool
-_elm_scroller_elm_widget_focus_register(Eo *obj, Elm_Scroller_Data *pd EINA_UNUSED, Efl_Ui_Focus_Manager *manager, Efl_Ui_Focus_Object *logical, Eina_Bool full EINA_UNUSED)
+_elm_scroller_elm_widget_focus_register(Eo *obj, Elm_Scroller_Data *pd EINA_UNUSED, Efl_Ui_Focus_Manager *manager, Efl_Ui_Focus_Object *logical, Eina_Bool *logical_flag)
{
//undepended from logical or not we always reigster as full with ourself as redirect
- efl_ui_focus_manager_register_logical(manager, obj, logical, obj);
-
- return EINA_FALSE;
+ *logical_flag = EINA_TRUE;
+ return efl_ui_focus_manager_register_logical(manager, obj, logical, obj);
}
diff --git a/src/lib/elementary/elm_table.c b/src/lib/elementary/elm_table.c
index 7b3d00ef2e..907265e8c4 100644
--- a/src/lib/elementary/elm_table.c
+++ b/src/lib/elementary/elm_table.c
@@ -417,9 +417,9 @@ _elm_table_efl_canvas_group_group_calculate(Eo *obj, void *pd EINA_UNUSED)
}
EOLIAN Eina_Bool
-_elm_table_elm_widget_focus_register(Eo *obj, void *pd EINA_UNUSED, Efl_Ui_Focus_Manager *manager, Efl_Ui_Focus_Object *logical, Eina_Bool full)
+_elm_table_elm_widget_focus_register(Eo *obj, void *pd EINA_UNUSED, Efl_Ui_Focus_Manager *manager, Efl_Ui_Focus_Object *logical, Eina_Bool *logical_flag)
{
- Eina_Bool result = elm_obj_widget_focus_register(efl_super(obj, MY_CLASS), manager, logical, full);
+ Eina_Bool result = elm_obj_widget_focus_register(efl_super(obj, MY_CLASS), manager, logical, logical_flag);
//later registering children are automatically set into the order of the internal table
_focus_order_flush(obj);
diff --git a/src/lib/elementary/elm_toolbar.c b/src/lib/elementary/elm_toolbar.c
index dd189506ee..db3e70ca7e 100644
--- a/src/lib/elementary/elm_toolbar.c
+++ b/src/lib/elementary/elm_toolbar.c
@@ -3087,10 +3087,10 @@ elm_toolbar_add(Evas_Object *parent)
}
EOLIAN static Eina_Bool
-_elm_toolbar_elm_widget_focus_register(Eo *obj, Elm_Toolbar_Data *pd EINA_UNUSED, Efl_Ui_Focus_Manager *manager, Efl_Ui_Focus_Object *logical, Eina_Bool full EINA_UNUSED)
+_elm_toolbar_elm_widget_focus_register(Eo *obj, Elm_Toolbar_Data *pd EINA_UNUSED, Efl_Ui_Focus_Manager *manager, Efl_Ui_Focus_Object *logical, Eina_Bool *logical_flag)
{
- efl_ui_focus_manager_register_logical(manager, obj, logical, NULL);
- return EINA_FALSE;
+ *logical_flag = EINA_TRUE;
+ return efl_ui_focus_manager_register_logical(manager, obj, logical, NULL);
}
EOLIAN static Eo *
diff --git a/src/lib/elementary/elm_widget.c b/src/lib/elementary/elm_widget.c
index bf2d91d8a2..6ff93fa136 100644
--- a/src/lib/elementary/elm_widget.c
+++ b/src/lib/elementary/elm_widget.c
@@ -276,15 +276,13 @@ _focus_manager_eval(Eo *obj, Elm_Widget_Smart_Data *pd)
EOLIAN static Eina_Bool
_elm_widget_focus_register(Eo *obj, Elm_Widget_Smart_Data *pd EINA_UNUSED,
Efl_Ui_Focus_Manager *manager,
- Efl_Ui_Focus_Object *logical, Eina_Bool full)
+ Efl_Ui_Focus_Object *logical, Eina_Bool *logical_flag)
{
- if (full)
- efl_ui_focus_manager_register(manager, obj, logical, NULL);
+ if (!*logical_flag)
+ return efl_ui_focus_manager_register(manager, obj, logical, NULL);
else
- efl_ui_focus_manager_register_logical(manager, obj, logical, NULL);
-
- return full;
+ return efl_ui_focus_manager_register_logical(manager, obj, logical, NULL);
}
@@ -344,8 +342,13 @@ _focus_state_eval(Eo *obj, Elm_Widget_Smart_Data *pd)
if (!pd->logical.parent) return;
- pd->focus.logical =
- !elm_obj_widget_focus_register(obj, pd->focus.manager, pd->logical.parent, want_full);
+ pd->focus.logical = !want_full;
+
+ if (!elm_obj_widget_focus_register(obj, pd->focus.manager,
+ pd->logical.parent, &pd->focus.logical))
+ {
+ pd->focus.manager = NULL;
+ }
}
}
else if (!should && pd->focus.manager)
diff --git a/src/lib/elementary/elm_widget.eo b/src/lib/elementary/elm_widget.eo
index 81aabea33f..07c02d0193 100644
--- a/src/lib/elementary/elm_widget.eo
+++ b/src/lib/elementary/elm_widget.eo
@@ -766,9 +766,9 @@ abstract Elm.Widget (Efl.Canvas.Group, Elm.Interface.Atspi_Accessible,
params {
manager : Efl.Ui.Focus.Manager; [[The manager to register against]]
logical : Efl.Ui.Focus.Object; [[The logical parent to use]]
- full : bool; [[flag if this should register full or just logical]]
+ logical_flag : ptr(bool); [[reference to the flag indicating if the should be logical or not change this flag to the value you have it registered]]
}
- return : bool; [[return if it registered fully or not]]
+ return : bool; [[return $true or $false if the registration was successfull or not]]
}
focus_manager_factory {
[[If the widget needs a manager, this function is called