From 65027616571e121d256846e0f20b4a4e652f5272 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Fri, 30 Nov 2012 08:52:57 +0000 Subject: [PATCH] fix dangling gadman gadgets during dnd and fix edit mode toggling when gadgets are dragged in and out of desktop gadcon SVN revision: 79876 --- src/modules/gadman/e_mod_gadman.c | 14 +++++++------- src/modules/gadman/e_mod_gadman.h | 2 -- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/modules/gadman/e_mod_gadman.c b/src/modules/gadman/e_mod_gadman.c index 918b25e91..b734dfbec 100644 --- a/src/modules/gadman/e_mod_gadman.c +++ b/src/modules/gadman/e_mod_gadman.c @@ -385,13 +385,14 @@ gadman_gadget_edit_start(E_Gadcon_Client *gcc) if (Man->drag_gcc[gcc->gadcon->id - ID_GADMAN_LAYER_BASE] == gcc) return; else if (Man->drag_gcc[gcc->gadcon->id - ID_GADMAN_LAYER_BASE]) - gadman_gadget_edit_end(NULL, NULL, NULL, NULL); + e_object_unref(E_OBJECT(Man->drag_gcc[gcc->gadcon->id - ID_GADMAN_LAYER_BASE])); EINA_LIST_FOREACH(Man->gadcons[gcc->gadcon->id - ID_GADMAN_LAYER_BASE], l, gc) gc->editing = 1; gc = gcc->gadcon; e_object_ref(E_OBJECT(gcc)); + //INF("START: %u", e_object_ref_get((void*)gcc)); /* Move/resize the correct mover */ mover = _get_mover(gcc); @@ -413,7 +414,6 @@ gadman_gadget_edit_end(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const unsigned int layer; E_Gadcon_Client *drag_gcc = NULL; - Man->dnd_entered = 0; for (layer = GADMAN_LAYER_COUNT - 1; layer < UINT_MAX; layer--) { const Eina_List *l; @@ -436,6 +436,7 @@ gadman_gadget_edit_end(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const _save_widget_position(drag_gcc); if (!e_object_is_del(E_OBJECT(drag_gcc))) e_object_unref(E_OBJECT(drag_gcc)); + //INF("END: %d:%u", e_object_is_del(E_OBJECT(drag_gcc)), e_object_ref_get((void*)drag_gcc)); } void @@ -625,11 +626,8 @@ _gadman_gadcon_dnd_enter_cb(E_Gadcon *gc, E_Gadcon_Client *gcc) /* only use this for dragging gadcons around the desktop */ if (gc != gcc->gadcon) return; - if (Man->dnd_entered && (Man->drag_gcc[gcc->gadcon->id - ID_GADMAN_LAYER_BASE] == gcc)) - e_object_ref(E_OBJECT(gcc)); - else - gadman_gadget_edit_start(gcc); - Man->dnd_entered = 1; + //INF("ENTER: %u", e_object_ref_get((void*)gcc)); + gadman_gadget_edit_start(gcc); } static void @@ -640,6 +638,8 @@ _gadman_gadcon_dnd_leave_cb(E_Gadcon *gc, E_Gadcon_Client *gcc) /* only use this for dragging gadcons around the desktop */ if (gc != gcc->gadcon) return; + //INF("LEAVE: %u", e_object_ref_get((void*)gcc)); + Man->drag_gcc[gcc->gadcon->id - ID_GADMAN_LAYER_BASE] = NULL; for (layer = 0; layer < GADMAN_LAYER_COUNT; layer++) { const Eina_List *l; diff --git a/src/modules/gadman/e_mod_gadman.h b/src/modules/gadman/e_mod_gadman.h index b90131c20..5c2d2848f 100644 --- a/src/modules/gadman/e_mod_gadman.h +++ b/src/modules/gadman/e_mod_gadman.h @@ -76,8 +76,6 @@ struct _Manager E_Config_DD *conf_edd; Config *conf; - - Eina_Bool dnd_entered : 1; }; extern Manager *Man;