summaryrefslogtreecommitdiff
path: root/src/lib/elementary/efl_ui_win.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/elementary/efl_ui_win.c')
-rw-r--r--src/lib/elementary/efl_ui_win.c40
1 files changed, 30 insertions, 10 deletions
diff --git a/src/lib/elementary/efl_ui_win.c b/src/lib/elementary/efl_ui_win.c
index 51806d15d5..0f5bbdbc25 100644
--- a/src/lib/elementary/efl_ui_win.c
+++ b/src/lib/elementary/efl_ui_win.c
@@ -9398,12 +9398,37 @@ _remove(void *data, void *gdata)
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
_drop_event_register(Eo *obj)
{
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);
- EINA_SAFETY_ON_NULL_RETURN(pd);
+ Efl_Ui_Win_Data *pd = _fetch_win_data_from_arbitary_obj(obj);
+ if (!pd) return;
eina_inarray_push(pd->drop_target, &target);
}
@@ -9412,9 +9437,8 @@ void
_drop_event_unregister(Eo *obj)
{
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;
for (unsigned int i = 0; i < eina_inarray_count(pd->drop_target); ++i)
@@ -9434,9 +9458,7 @@ _drop_event_unregister(Eo *obj)
void
_selection_changed_event_register(Eo *obj)
{
- 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;
eina_array_push(pd->selection_changed, obj);
@@ -9444,9 +9466,7 @@ _selection_changed_event_register(Eo *obj)
void
_selection_changed_event_unregister(Eo *obj)
{
- 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;
eina_array_remove(pd->selection_changed, _remove, obj);