EOLIAN static void
_efl_ui_focus_manager_redirect_set(Eo *obj, Efl_Ui_Focus_Manager_Data *pd, Efl_Ui_Focus_Manager *redirect)
{
- printf("Now redirect %p\n", redirect);
+ Efl_Ui_Focus_Manager *old_manager;
if (pd->redirect == redirect) return;
if (pd->redirect)
efl_wref_del(pd->redirect, &pd->redirect);
+ old_manager = pd->redirect;
pd->redirect = redirect;
if (pd->redirect)
efl_wref_add(pd->redirect, &pd->redirect);
+
+ efl_event_callback_call(obj, EFL_UI_FOCUS_MANAGER_EVENT_REDIRECT_CHANGED , old_manager);
}
EOLIAN static Efl_Ui_Focus_Manager *
elem = efl_parent_get(obj);
manager = efl_ui_focus_user_manager_get(elem);
- logical = efl_ui_focus_user_parent_get(elem);
+ logical = elem;
borders = efl_ui_focus_manager_border_elements_get(obj);
selection = NULL;
_border_flush(data, pd);
}
+static void
+_redirect_changed_cb(void *data, const Efl_Event *ev)
+{
+ //if (efl_ui_focus_manager_redirect_get(ev->object) != data) return;
+
+ MY_DATA(data, pd);
+ _border_flush(data, pd);
+}
+
EFL_CALLBACKS_ARRAY_DEFINE(parent_manager,
- {EFL_UI_FOCUS_MANAGER_EVENT_PRE_FLUSH, _parent_manager_pre_flush}
+ {EFL_UI_FOCUS_MANAGER_EVENT_PRE_FLUSH, _parent_manager_pre_flush},
+ {EFL_UI_FOCUS_MANAGER_EVENT_REDIRECT_CHANGED, _redirect_changed_cb}
);
static void
old_parent = efl_parent_get(obj);
efl_event_callback_forwarder_del(obj, EFL_UI_FOCUS_MANAGER_EVENT_PRE_FLUSH, old_parent);
+ efl_event_callback_forwarder_del(obj, EFL_UI_FOCUS_MANAGER_EVENT_REDIRECT_CHANGED, old_parent);
efl_event_callback_array_del(old_parent, self_manager(), obj);
efl_parent_set(efl_super(obj, MY_CLASS), parent);
new_parent = efl_parent_get(obj);
efl_event_callback_forwarder_add(obj, EFL_UI_FOCUS_MANAGER_EVENT_PRE_FLUSH, new_parent);
+ efl_event_callback_forwarder_add(obj, EFL_UI_FOCUS_MANAGER_EVENT_REDIRECT_CHANGED, new_parent);
efl_event_callback_array_add(new_parent, self_manager(), obj);
}