diff --git a/src/bin/e_gadcon.c b/src/bin/e_gadcon.c index 2d0dffee8..f5e25997b 100644 --- a/src/bin/e_gadcon.c +++ b/src/bin/e_gadcon.c @@ -3081,8 +3081,7 @@ _e_gadcon_cb_dnd_drop(void *data, const char *type __UNUSED__, void *event __UNU if (gc->dnd_drop_cb) gc->dnd_drop_cb(gc, gc->drag_gcc); return; } - /* still has refcount from drag */ - e_object_del(E_OBJECT(gc->drag_gcc)); + gcc = gc->new_gcc; if (!gc->o_container) @@ -3099,12 +3098,17 @@ _e_gadcon_cb_dnd_drop(void *data, const char *type __UNUSED__, void *event __UNU e_gadcon_custom_populate_request(gc); e_config_save_queue(); if (gc->dnd_drop_cb) gc->dnd_drop_cb(gc, gc->drag_gcc); - return; + goto cleanup; } if (gc->editing) e_gadcon_client_edit_begin(gc->new_gcc); gc->new_gcc = NULL; e_config_save_queue(); if (gc->dnd_drop_cb) gc->dnd_drop_cb(gc, gc->drag_gcc); + +cleanup: + /* still has refcount from drag */ + e_object_del(E_OBJECT(gc->drag_gcc)); + gc->drag_gcc = NULL; } static int diff --git a/src/modules/gadman/e_mod_main.c b/src/modules/gadman/e_mod_main.c index 149d4ad48..a07d418fb 100644 --- a/src/modules/gadman/e_mod_main.c +++ b/src/modules/gadman/e_mod_main.c @@ -220,6 +220,8 @@ gadman_gadget_add_handler(void *d __UNUSED__, int type __UNUSED__, E_Event_Gadco if (!l) return ECORE_CALLBACK_RENEW; if (ev->gcc->cf->geom.pos_x || ev->gcc->cf->geom.pos_y || ev->gcc->cf->geom.size_w || ev->gcc->cf->geom.size_h) return ECORE_CALLBACK_RENEW; + if ((ev->gcc->gadcon->new_gcc) && (ev->gcc->gadcon->new_gcc == ev->gcc)) + return ECORE_CALLBACK_RENEW; ev->gcc->cf->style = eina_stringshare_add(ev->gcc->client_class->default_style ?: E_GADCON_CLIENT_STYLE_INSET); ev->gcc->style = eina_stringshare_ref(ev->gcc->cf->style); ev->gcc->cf->geom.pos_x = DEFAULT_POS_X;