summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcel Hollerbach <marcel@osg.samsung.com>2018-04-07 17:25:35 +0200
committerMarcel Hollerbach <marcel@osg.samsung.com>2018-04-09 18:05:27 +0200
commit59828721d80ecad0689cc469018318877e158c38 (patch)
tree32f068a3355a549a16b67632f813e26399bae43e
parent39af0ebde0ac7e6c8bdbc59e3796c1e46b6da3fa (diff)
downloadefl-59828721d80ecad0689cc469018318877e158c38.tar.gz
efl_ui_focus_layer: return the registered focus manager when active
this fixes in chain setting for hovers and ctxpopups
-rw-r--r--src/lib/elementary/efl_ui_focus_layer.c26
-rw-r--r--src/lib/elementary/efl_ui_focus_layer.eo1
2 files changed, 26 insertions, 1 deletions
diff --git a/src/lib/elementary/efl_ui_focus_layer.c b/src/lib/elementary/efl_ui_focus_layer.c
index 9df3ed89b9..77b47d19a3 100644
--- a/src/lib/elementary/efl_ui_focus_layer.c
+++ b/src/lib/elementary/efl_ui_focus_layer.c
@@ -61,7 +61,19 @@ _efl_ui_focus_layer_efl_object_destructor(Eo *obj, Efl_Ui_Focus_Layer_Data *pd E
EOLIAN static Efl_Ui_Focus_Manager*
_efl_ui_focus_layer_efl_ui_focus_object_focus_manager_get(Eo *obj, Efl_Ui_Focus_Layer_Data *pd EINA_UNUSED)
{
- return elm_widget_top_get(obj);
+ if (pd->registered_manager)
+ return elm_widget_top_get(obj);
+ else
+ return NULL;
+}
+
+EOLIAN static Efl_Ui_Focus_Object*
+_efl_ui_focus_layer_efl_ui_focus_object_focus_parent_get(Eo *obj, Efl_Ui_Focus_Layer_Data *pd)
+{
+ if (pd->registered_manager)
+ return efl_ui_focus_manager_root_get(pd->registered_manager);
+ else
+ return NULL;
}
EOLIAN static Eina_Bool
@@ -81,6 +93,13 @@ _efl_ui_focus_layer_efl_object_constructor(Eo *obj, Efl_Ui_Focus_Layer_Data *pd)
return obj;
}
+static void
+_publish_state_change(Eo *obj, Efl_Ui_Focus_Manager *omanager, Efl_Ui_Focus_Object *oobj)
+{
+ efl_event_callback_call(obj, EFL_UI_FOCUS_OBJECT_EVENT_MANAGER_CHANGED, omanager);
+ efl_event_callback_call(obj, EFL_UI_FOCUS_OBJECT_EVENT_LOGICAL_CHANGED, oobj);
+}
+
EOLIAN static void
_efl_ui_focus_layer_enable_set(Eo *obj, Efl_Ui_Focus_Layer_Data *pd, Eina_Bool v)
{
@@ -89,10 +108,14 @@ _efl_ui_focus_layer_enable_set(Eo *obj, Efl_Ui_Focus_Layer_Data *pd, Eina_Bool v
pd->registered_manager = elm_widget_top_get(obj);
efl_ui_focus_manager_calc_register_logical(pd->registered_manager, obj, efl_ui_focus_manager_root_get(pd->registered_manager), obj);
+ _publish_state_change(obj, NULL, NULL);
efl_ui_focus_manager_focus_set(pd->manager, obj);
+
}
else
{
+ Eo *omanager = pd->registered_manager, *oobj = efl_ui_focus_manager_root_get(omanager);
+
if (!pd->registered_manager) return;
if (efl_ui_focus_manager_redirect_get(pd->registered_manager) == obj)
@@ -100,6 +123,7 @@ _efl_ui_focus_layer_enable_set(Eo *obj, Efl_Ui_Focus_Layer_Data *pd, Eina_Bool v
efl_ui_focus_manager_calc_unregister(pd->registered_manager, obj);
pd->registered_manager = NULL;
+ _publish_state_change(obj, omanager, oobj);
}
}
diff --git a/src/lib/elementary/efl_ui_focus_layer.eo b/src/lib/elementary/efl_ui_focus_layer.eo
index cb955fc19e..068490b547 100644
--- a/src/lib/elementary/efl_ui_focus_layer.eo
+++ b/src/lib/elementary/efl_ui_focus_layer.eo
@@ -26,6 +26,7 @@ mixin Efl.Ui.Focus.Layer (Efl.Interface, Efl.Ui.Widget, Efl.Gfx, Efl.Ui.Focus.Ma
Efl.Gfx.visible {set;}
Efl.Ui.Focus.Manager.move;
Efl.Ui.Focus.Object.focus_manager { get; }
+ Efl.Ui.Focus.Object.focus_parent { get; }
Efl.Object.constructor;
Efl.Object.destructor;
}