end gadman edit when shutting down (fixes crash), clean up legacy gadman dnd code, fix gadman dnd to remove client configs when drag starts, not when edit starts

SVN revision: 77262
This commit is contained in:
Mike Blumenkrantz 2012-10-01 10:28:38 +00:00
parent 271a21df59
commit 9c7996bbd8
1 changed files with 4 additions and 62 deletions

View File

@ -155,6 +155,7 @@ gadman_shutdown(void)
e_gadcon_location_unregister(location);
e_container_shape_change_callback_del(Man->container, on_shape_change, NULL);
gadman_gadget_edit_end(NULL, NULL, NULL, NULL);
for (layer = 0; layer < GADMAN_LAYER_COUNT; layer++)
{
@ -165,7 +166,7 @@ gadman_shutdown(void)
Man->gadgets[layer] = eina_list_free(Man->gadgets[layer]);
}
if (Man->icon_name) eina_stringshare_del(Man->icon_name);
eina_stringshare_del(Man->icon_name);
/* free manager */
if (Man->top_ee)
@ -180,8 +181,7 @@ gadman_shutdown(void)
}
E_FREE_LIST(Man->drag_handlers, ecore_event_handler_del);
_gadman_gadgets = NULL;
free(Man);
Man = NULL;
E_FREE(Man);
}
void
@ -410,7 +410,6 @@ gadman_gadget_edit_start(E_Gadcon_Client *gcc)
evas_object_resize(mover, w, h);
evas_object_raise(mover);
evas_object_show(mover);
gcc->gadcon->cf->clients = eina_list_remove(gcc->gadcon->cf->clients, gcc->cf);
evas_object_event_callback_del(mover, EVAS_CALLBACK_HIDE, gadman_edit);
evas_object_event_callback_add(mover, EVAS_CALLBACK_HIDE, gadman_edit, gcc);
e_gadcon_client_drag_set(gcc);
@ -752,10 +751,6 @@ _create_mover(E_Gadcon *gc)
edje_object_signal_callback_add(mover, "e,action,move,start", "",
on_move, (void *)DRAG_START);
edje_object_signal_callback_add(mover, "e,action,move,stop", "",
on_move, (void *)DRAG_STOP);
edje_object_signal_callback_add(mover, "e,action,move,go", "",
on_move, (void *)DRAG_MOVE);
edje_object_signal_callback_add(mover, "mouse,down,3", "overlay",
gadman_gadget_edit_end, NULL);
@ -1523,6 +1518,7 @@ on_move(void *data, Evas_Object *o __UNUSED__, const char *em __UNUSED__, const
gc->drag_gcc->moving = 1;
e_object_ref(E_OBJECT(gc->drag_gcc));
gc->cf->clients = eina_list_remove(gc->cf->clients, gc->drag_gcc->cf);
evas_pointer_output_xy_get(gc->drag_gcc->gadcon->evas, &mx, &my);
evas_object_geometry_get(mover, &ox, &oy, &ow, &oh);
@ -1549,60 +1545,6 @@ on_move(void *data, Evas_Object *o __UNUSED__, const char *em __UNUSED__, const
e_drag_resize(drag, ow, oh);
evas_object_hide(o);
e_drag_start(drag, mx, my);
return;
}
/* DRAG_STOP */
if (action == DRAG_STOP)
{
E_Config_Gadcon_Client *cf;
E_Zone *dst_zone = NULL;
E_Gadcon *dst_gadcon;
int gx, gy;
gc->drag_gcc->moving = 0;
gc->drag_gcc->dx = gc->drag_gcc->dy = 0;
/* checking if zone was changed for dragged gadget */
evas_object_geometry_get(gc->drag_gcc->o_frame, &gx, &gy, NULL, NULL);
dst_zone = e_container_zone_at_point_get(e_container_current_get(e_manager_current_get()), gx, gy);
if (dst_zone && (gc->drag_gcc->gadcon->zone != dst_zone))
{
unsigned int layer = gc->drag_gcc->gadcon->id - ID_GADMAN_LAYER_BASE;
cf = gc->drag_gcc->cf;
gc->drag_gcc->gadcon->cf->clients = eina_list_remove(gc->drag_gcc->gadcon->cf->clients, cf);
dst_gadcon = gadman_gadcon_get(dst_zone, layer);
if (dst_gadcon)
{
dst_gadcon->cf->clients = eina_list_append(dst_gadcon->cf->clients, cf);
e_config_save_queue();
}
}
else
_save_widget_position(gc->drag_gcc);
return;
}
/* DRAG_MOVE */
if ((action == DRAG_MOVE) && gc->drag_gcc->moving)
{
int x, y;
evas_pointer_output_xy_get(gc->drag_gcc->gadcon->evas, &mx, &my);
x = mx - gc->drag_gcc->dx;
y = my - gc->drag_gcc->dy;
/* don't go out of the screen */
if (x < 0) x = 0;
if (x > (Man->width - ow)) x = Man->width - ow;
if (y < 0) y = 0;
if (y > (Man->height - oh)) y = Man->height - oh;
evas_object_move(gc->drag_gcc->o_frame, x, y);
evas_object_move(mover, x, y);
evas_object_raise(gc->drag_gcc->o_frame);
evas_object_raise(mover);
}
}