fix dangling gadman gadgets during dnd and fix edit mode toggling when gadgets are dragged in and out of desktop gadcon

SVN revision: 79876
This commit is contained in:
Mike Blumenkrantz 2012-11-30 08:52:57 +00:00
parent fbc12f2e3f
commit 6502761657
2 changed files with 7 additions and 9 deletions

View File

@ -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;

View File

@ -76,8 +76,6 @@ struct _Manager
E_Config_DD *conf_edd;
Config *conf;
Eina_Bool dnd_entered : 1;
};
extern Manager *Man;