efl_ui_focus_composition: redirect canvas move events to the adapter

otherwise a moving canvas object will not be recalculated, as the
manager does not know about the new focus geometry
This commit is contained in:
Marcel Hollerbach 2018-03-09 18:52:02 +01:00
parent b7a5a9298d
commit df55911967
2 changed files with 40 additions and 2 deletions

View File

@ -196,10 +196,38 @@ typedef struct {
Evas_Object *object;
} Efl_Ui_Focus_Composition_Adapter_Data;
EOLIAN static void
_efl_ui_focus_composition_adapter_canvas_object_set(Eo *obj EINA_UNUSED, Efl_Ui_Focus_Composition_Adapter_Data *pd, Efl_Canvas_Object *v)
static void
_canvas_object_deleted(void *data, const Efl_Event *ev EINA_UNUSED)
{
efl_ui_focus_composition_adapter_canvas_object_set(data, NULL);
}
static void
_new_geom(void *data, const Efl_Event *event)
{
efl_event_callback_call(data, event->desc, event->info);
}
EFL_CALLBACKS_ARRAY_DEFINE(canvas_obj,
{EFL_GFX_EVENT_RESIZE, _new_geom},
{EFL_GFX_EVENT_MOVE, _new_geom},
{EFL_EVENT_DEL, _canvas_object_deleted},
);
EOLIAN static void
_efl_ui_focus_composition_adapter_canvas_object_set(Eo *obj, Efl_Ui_Focus_Composition_Adapter_Data *pd, Efl_Canvas_Object *v)
{
if (pd->object)
{
efl_event_callback_array_del(pd->object, canvas_obj(), obj);
}
pd->object = v;
if (v)
{
efl_event_callback_array_add(pd->object, canvas_obj(), obj);
}
}
EOLIAN static Efl_Canvas_Object*
@ -222,4 +250,13 @@ _efl_ui_focus_composition_adapter_efl_ui_focus_object_focus_set(Eo *obj EINA_UNU
evas_object_focus_set(pd->object, efl_ui_focus_object_focus_get(obj));
}
EOLIAN static void
_efl_ui_focus_composition_adapter_efl_object_destructor(Eo *obj, Efl_Ui_Focus_Composition_Adapter_Data *pd)
{
efl_ui_focus_composition_adapter_canvas_object_set(obj, NULL);
efl_destructor(efl_super(obj, EFL_UI_FOCUS_COMPOSITION_ADAPTER_CLASS));
}
#include "efl_ui_focus_composition_adapter.eo.c"

View File

@ -12,5 +12,6 @@ class Efl.Ui.Focus.Composition.Adapter (Efl.Object, Efl.Ui.Focus.Object)
implements {
Efl.Ui.Focus.Object.focus_geometry {get;}
Efl.Ui.Focus.Object.focus {set;}
Efl.Object.destructor;
}
}