elm_dnd: support target setting on none evas_objects
Summary: before this only worked for elm widgets. This however is the same behaviour as in efl_ui_selection_manager.c. So this restores the behaviour prior to selection_manager. Depends on D11697 Reviewers: zmike, stefan_schmidt, raster Reviewed By: zmike Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D11698
This commit is contained in:
parent
7288e98b9e
commit
f2ed538d41
|
@ -9398,12 +9398,37 @@ _remove(void *data, void *gdata)
|
||||||
return EINA_TRUE;
|
return EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Efl_Ui_Win*
|
||||||
|
efl_ui_win_get(Evas_Object *obj)
|
||||||
|
{
|
||||||
|
Efl_Ui_Win *win = efl_provider_find(obj, MY_CLASS);
|
||||||
|
if (!win)
|
||||||
|
{
|
||||||
|
Evas *e = evas_object_evas_get(obj);
|
||||||
|
Ecore_Evas *ee = ecore_evas_ecore_evas_get(e);
|
||||||
|
|
||||||
|
win = ecore_evas_data_get(ee, "elm_win");
|
||||||
|
}
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN_VAL(win, NULL);
|
||||||
|
return win;
|
||||||
|
}
|
||||||
|
|
||||||
|
static Efl_Ui_Win_Data*
|
||||||
|
_fetch_win_data_from_arbitary_obj(Efl_Canvas_Object *obj)
|
||||||
|
{
|
||||||
|
Efl_Ui_Win *win = efl_ui_win_get(obj);
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN_VAL(win, NULL);
|
||||||
|
Efl_Ui_Win_Data *pd = efl_data_scope_safe_get(win, MY_CLASS);
|
||||||
|
EINA_SAFETY_ON_NULL_RETURN_VAL(pd, NULL);
|
||||||
|
return pd;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_drop_event_register(Eo *obj)
|
_drop_event_register(Eo *obj)
|
||||||
{
|
{
|
||||||
Ui_Dnd_Target target = {obj, EINA_FALSE};
|
Ui_Dnd_Target target = {obj, EINA_FALSE};
|
||||||
Efl_Ui_Win_Data *pd = efl_data_scope_safe_get(efl_provider_find(obj, MY_CLASS), MY_CLASS);
|
Efl_Ui_Win_Data *pd = _fetch_win_data_from_arbitary_obj(obj);
|
||||||
EINA_SAFETY_ON_NULL_RETURN(pd);
|
if (!pd) return;
|
||||||
|
|
||||||
eina_inarray_push(pd->drop_target, &target);
|
eina_inarray_push(pd->drop_target, &target);
|
||||||
}
|
}
|
||||||
|
@ -9412,9 +9437,8 @@ void
|
||||||
_drop_event_unregister(Eo *obj)
|
_drop_event_unregister(Eo *obj)
|
||||||
{
|
{
|
||||||
int idx = -1;
|
int idx = -1;
|
||||||
Efl_Ui_Win_Data *pd;
|
|
||||||
|
|
||||||
pd = efl_data_scope_safe_get(efl_provider_find(obj, MY_CLASS), MY_CLASS);
|
Efl_Ui_Win_Data *pd = _fetch_win_data_from_arbitary_obj(obj);
|
||||||
if (!pd) return;
|
if (!pd) return;
|
||||||
|
|
||||||
for (unsigned int i = 0; i < eina_inarray_count(pd->drop_target); ++i)
|
for (unsigned int i = 0; i < eina_inarray_count(pd->drop_target); ++i)
|
||||||
|
@ -9434,9 +9458,7 @@ _drop_event_unregister(Eo *obj)
|
||||||
void
|
void
|
||||||
_selection_changed_event_register(Eo *obj)
|
_selection_changed_event_register(Eo *obj)
|
||||||
{
|
{
|
||||||
Efl_Ui_Win_Data *pd;
|
Efl_Ui_Win_Data *pd = _fetch_win_data_from_arbitary_obj(obj);
|
||||||
|
|
||||||
pd = efl_data_scope_safe_get(efl_provider_find(obj, MY_CLASS), MY_CLASS);
|
|
||||||
if (!pd) return;
|
if (!pd) return;
|
||||||
|
|
||||||
eina_array_push(pd->selection_changed, obj);
|
eina_array_push(pd->selection_changed, obj);
|
||||||
|
@ -9444,9 +9466,7 @@ _selection_changed_event_register(Eo *obj)
|
||||||
void
|
void
|
||||||
_selection_changed_event_unregister(Eo *obj)
|
_selection_changed_event_unregister(Eo *obj)
|
||||||
{
|
{
|
||||||
Efl_Ui_Win_Data *pd;
|
Efl_Ui_Win_Data *pd = _fetch_win_data_from_arbitary_obj(obj);
|
||||||
|
|
||||||
pd = efl_data_scope_safe_get(efl_provider_find(obj, MY_CLASS), MY_CLASS);
|
|
||||||
if (!pd) return;
|
if (!pd) return;
|
||||||
|
|
||||||
eina_array_remove(pd->selection_changed, _remove, obj);
|
eina_array_remove(pd->selection_changed, _remove, obj);
|
||||||
|
|
|
@ -103,7 +103,7 @@ _drop_cb(void *data, const Efl_Event *ev)
|
||||||
Efl_Ui_Drop_Dropped_Event *event = ev->info;
|
Efl_Ui_Drop_Dropped_Event *event = ev->info;
|
||||||
Elm_Drop_Target *target = data;
|
Elm_Drop_Target *target = data;
|
||||||
target->action = _string_to_action(event->action);
|
target->action = _string_to_action(event->action);
|
||||||
efl_future_then(ev->object, efl_ui_dnd_drop_data_get(ev->object, _default_seat(ev->object), eina_array_iterator_new(target->mime_types)),
|
efl_future_then(ev->object, efl_ui_dnd_drop_data_get(elm_widget_is(ev->object) ? ev->object : efl_ui_win_get(ev->object), _default_seat(ev->object), eina_array_iterator_new(target->mime_types)),
|
||||||
.success = _deliver_content,
|
.success = _deliver_content,
|
||||||
.data = target
|
.data = target
|
||||||
);
|
);
|
||||||
|
@ -178,7 +178,7 @@ elm_drop_target_add(Evas_Object *obj, Elm_Sel_Format format,
|
||||||
target->format = format;
|
target->format = format;
|
||||||
|
|
||||||
efl_event_callback_array_add(obj, drop_target_cb(), target);
|
efl_event_callback_array_add(obj, drop_target_cb(), target);
|
||||||
|
_drop_event_register(obj); //this is ensuring that we are also supporting none widgets
|
||||||
if (!target_register)
|
if (!target_register)
|
||||||
target_register = eina_hash_pointer_new(NULL);
|
target_register = eina_hash_pointer_new(NULL);
|
||||||
eina_hash_list_append(target_register, &obj, target);
|
eina_hash_list_append(target_register, &obj, target);
|
||||||
|
@ -223,6 +223,7 @@ elm_drop_target_del(Evas_Object *obj, Elm_Sel_Format format,
|
||||||
efl_event_callback_array_del(obj, drop_target_cb(), eina_list_data_get(found));
|
efl_event_callback_array_del(obj, drop_target_cb(), eina_list_data_get(found));
|
||||||
eina_hash_list_remove(target_register, &obj, target);
|
eina_hash_list_remove(target_register, &obj, target);
|
||||||
eina_array_free(target->mime_types);
|
eina_array_free(target->mime_types);
|
||||||
|
_drop_event_unregister(obj); //this is ensuring that we are also supporting none widgets
|
||||||
free(target);
|
free(target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1061,5 +1061,6 @@ void _selection_changed_event_unregister(Eo *obj);
|
||||||
void _drop_event_register(Eo *obj);
|
void _drop_event_register(Eo *obj);
|
||||||
void _drop_event_unregister(Eo *obj);
|
void _drop_event_unregister(Eo *obj);
|
||||||
void _register_selection_changed(Efl_Ui_Selection *selection);
|
void _register_selection_changed(Efl_Ui_Selection *selection);
|
||||||
|
Efl_Ui_Win* efl_ui_win_get(Evas_Object *obj);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue