and in case an object is deleted clear out the gadcon as well

SVN revision: 33915
This commit is contained in:
Carsten Haitzler 2008-03-04 11:34:31 +00:00
parent 40a179e870
commit 91ede9eacc
1 changed files with 98 additions and 60 deletions

View File

@ -54,6 +54,8 @@ static void _e_gadcon_client_cb_menu_resizable(void *data, E_Menu *m, E_Menu_Ite
static void _e_gadcon_client_cb_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_gadcon_client_cb_menu_edit(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_gadcon_client_cb_menu_remove(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_gadcon_client_cb_menu_remove(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_gadcon_client_del_hook(void *data, Evas *e, Evas_Object *obj, void *event_info);
static Evas_Object *e_gadcon_layout_add(Evas *evas); static Evas_Object *e_gadcon_layout_add(Evas *evas);
static void e_gadcon_layout_orientation_set(Evas_Object *obj, int horizontal); static void e_gadcon_layout_orientation_set(Evas_Object *obj, int horizontal);
static int e_gadcon_layout_orientation_get(Evas_Object *obj); static int e_gadcon_layout_orientation_get(Evas_Object *obj);
@ -402,9 +404,9 @@ e_gadcon_populate(E_Gadcon *gc)
gcc->state_info.flags = cf_gcc->state_info.flags; gcc->state_info.flags = cf_gcc->state_info.flags;
if (gcc->o_frame) if (gcc->o_frame)
e_gadcon_layout_pack_options_set(gcc->o_frame, gcc); e_gadcon_layout_pack_options_set(gcc->o_frame, gcc);
else else if (gcc->o_base)
e_gadcon_layout_pack_options_set(gcc->o_base, gcc); e_gadcon_layout_pack_options_set(gcc->o_base, gcc);
e_gadcon_client_autoscroll_set(gcc, cf_gcc->autoscroll); e_gadcon_client_autoscroll_set(gcc, cf_gcc->autoscroll);
e_gadcon_client_resizable_set(gcc, cf_gcc->resizable); e_gadcon_client_resizable_set(gcc, cf_gcc->resizable);
if (gcc->client_class->func.orient) if (gcc->client_class->func.orient)
@ -471,7 +473,7 @@ e_gadcon_populate_class(E_Gadcon *gc, const E_Gadcon_Client_Class *cc)
gcc->state_info.flags = cf_gcc->state_info.flags; gcc->state_info.flags = cf_gcc->state_info.flags;
if (gcc->o_frame) if (gcc->o_frame)
e_gadcon_layout_pack_options_set(gcc->o_frame, gcc); e_gadcon_layout_pack_options_set(gcc->o_frame, gcc);
else else if (gcc->o_base)
e_gadcon_layout_pack_options_set(gcc->o_base, gcc); e_gadcon_layout_pack_options_set(gcc->o_base, gcc);
if (gcc->client_class->func.orient) if (gcc->client_class->func.orient)
@ -755,6 +757,9 @@ e_gadcon_client_new(E_Gadcon *gc, const char *name, const char *id, const char *
gc->clients = evas_list_append(gc->clients, gcc); gc->clients = evas_list_append(gc->clients, gcc);
/* This must only be unique during runtime */ /* This must only be unique during runtime */
gcc->id = E_GADCON_CLIENT(evas_list_last(gc->clients))->id + 1; gcc->id = E_GADCON_CLIENT(evas_list_last(gc->clients))->id + 1;
if (gcc->o_base)
evas_object_event_callback_add(gcc->o_base, EVAS_CALLBACK_DEL,
_e_gadcon_client_del_hook, gcc);
if ((gc->frame_request.func) && (style)) if ((gc->frame_request.func) && (style))
{ {
gcc->o_frame = gc->frame_request.func(gc->frame_request.data, gcc, style); gcc->o_frame = gc->frame_request.func(gc->frame_request.data, gcc, style);
@ -793,14 +798,17 @@ e_gadcon_client_new(E_Gadcon *gc, const char *name, const char *id, const char *
_e_gadcon_cb_client_frame_moveresize, gcc); _e_gadcon_cb_client_frame_moveresize, gcc);
evas_object_event_callback_add(gcc->o_frame, EVAS_CALLBACK_MOUSE_MOVE, evas_object_event_callback_add(gcc->o_frame, EVAS_CALLBACK_MOUSE_MOVE,
_e_gadcon_cb_client_frame_mouse_move, gcc); _e_gadcon_cb_client_frame_mouse_move, gcc);
e_box_pack_end(gcc->o_box, gcc->o_base); if (gcc->o_base)
e_box_pack_options_set(gcc->o_base, {
1, 1, /* fill */ e_box_pack_end(gcc->o_box, gcc->o_base);
1, 1, /* expand */ e_box_pack_options_set(gcc->o_base,
0.5, 0.5, /* align */ 1, 1, /* fill */
0, 0, /* min */ 1, 1, /* expand */
-1, -1 /* max */ 0.5, 0.5, /* align */
); 0, 0, /* min */
-1, -1 /* max */
);
}
edje_object_part_swallow(gcc->o_frame, gc->edje.swallow_name, gcc->o_box); edje_object_part_swallow(gcc->o_frame, gc->edje.swallow_name, gcc->o_box);
evas_object_show(gcc->o_box); evas_object_show(gcc->o_box);
evas_object_show(gcc->o_frame); evas_object_show(gcc->o_frame);
@ -808,9 +816,9 @@ e_gadcon_client_new(E_Gadcon *gc, const char *name, const char *id, const char *
} }
if (gcc->o_frame) if (gcc->o_frame)
e_gadcon_layout_pack(gc->o_container, gcc->o_frame); e_gadcon_layout_pack(gc->o_container, gcc->o_frame);
else else if (gcc->o_base)
e_gadcon_layout_pack(gc->o_container, gcc->o_base); e_gadcon_layout_pack(gc->o_container, gcc->o_base);
evas_object_show(gcc->o_base); if (gcc->o_base) evas_object_show(gcc->o_base);
return gcc; return gcc;
} }
@ -830,7 +838,7 @@ e_gadcon_client_edit_begin(E_Gadcon_Client *gcc)
evas_object_layer_set(gcc->o_control, 100); evas_object_layer_set(gcc->o_control, 100);
if (gcc->o_frame) if (gcc->o_frame)
evas_object_geometry_get(gcc->o_frame, &x, &y, &w, &h); evas_object_geometry_get(gcc->o_frame, &x, &y, &w, &h);
else else if (gcc->o_base)
evas_object_geometry_get(gcc->o_base, &x, &y, &w, &h); evas_object_geometry_get(gcc->o_base, &x, &y, &w, &h);
evas_object_move(gcc->o_control, x, y); evas_object_move(gcc->o_control, x, y);
evas_object_resize(gcc->o_control, w, h); evas_object_resize(gcc->o_control, w, h);
@ -898,7 +906,7 @@ e_gadcon_client_edit_begin(E_Gadcon_Client *gcc)
evas_object_event_callback_add(gcc->o_frame, EVAS_CALLBACK_MOVE, _e_gadcon_cb_client_move, gcc); evas_object_event_callback_add(gcc->o_frame, EVAS_CALLBACK_MOVE, _e_gadcon_cb_client_move, gcc);
evas_object_event_callback_add(gcc->o_frame, EVAS_CALLBACK_RESIZE, _e_gadcon_cb_client_resize, gcc); evas_object_event_callback_add(gcc->o_frame, EVAS_CALLBACK_RESIZE, _e_gadcon_cb_client_resize, gcc);
} }
else else if (gcc->o_base)
{ {
evas_object_event_callback_add(gcc->o_base, EVAS_CALLBACK_MOVE, _e_gadcon_cb_client_move, gcc); evas_object_event_callback_add(gcc->o_base, EVAS_CALLBACK_MOVE, _e_gadcon_cb_client_move, gcc);
evas_object_event_callback_add(gcc->o_base, EVAS_CALLBACK_RESIZE, _e_gadcon_cb_client_resize, gcc); evas_object_event_callback_add(gcc->o_base, EVAS_CALLBACK_RESIZE, _e_gadcon_cb_client_resize, gcc);
@ -921,7 +929,7 @@ e_gadcon_client_edit_end(E_Gadcon_Client *gcc)
evas_object_event_callback_del(gcc->o_frame, EVAS_CALLBACK_MOVE, _e_gadcon_cb_client_move); evas_object_event_callback_del(gcc->o_frame, EVAS_CALLBACK_MOVE, _e_gadcon_cb_client_move);
evas_object_event_callback_del(gcc->o_frame, EVAS_CALLBACK_RESIZE, _e_gadcon_cb_client_resize); evas_object_event_callback_del(gcc->o_frame, EVAS_CALLBACK_RESIZE, _e_gadcon_cb_client_resize);
} }
else else if (gcc->o_base)
{ {
evas_object_event_callback_del(gcc->o_base, EVAS_CALLBACK_MOVE, _e_gadcon_cb_client_move); evas_object_event_callback_del(gcc->o_base, EVAS_CALLBACK_MOVE, _e_gadcon_cb_client_move);
evas_object_event_callback_del(gcc->o_base, EVAS_CALLBACK_RESIZE, _e_gadcon_cb_client_resize); evas_object_event_callback_del(gcc->o_base, EVAS_CALLBACK_RESIZE, _e_gadcon_cb_client_resize);
@ -963,7 +971,7 @@ e_gadcon_client_show(E_Gadcon_Client *gcc)
e_gadcon_layout_pack(gcc->gadcon->o_container, gcc->o_frame); e_gadcon_layout_pack(gcc->gadcon->o_container, gcc->o_frame);
e_gadcon_layout_pack_options_set(gcc->o_frame, gcc); e_gadcon_layout_pack_options_set(gcc->o_frame, gcc);
} }
else else if (gcc->o_base)
{ {
e_gadcon_layout_pack(gcc->gadcon->o_container, gcc->o_base); e_gadcon_layout_pack(gcc->gadcon->o_container, gcc->o_base);
e_gadcon_layout_pack_options_set(gcc->o_base, gcc); e_gadcon_layout_pack_options_set(gcc->o_base, gcc);
@ -982,7 +990,7 @@ e_gadcon_client_hide(E_Gadcon_Client *gcc)
if (gcc->o_event) evas_object_hide(gcc->o_event); if (gcc->o_event) evas_object_hide(gcc->o_event);
if (gcc->o_frame) if (gcc->o_frame)
e_gadcon_layout_unpack(gcc->o_frame); e_gadcon_layout_unpack(gcc->o_frame);
else else if (gcc->o_base)
e_gadcon_layout_unpack(gcc->o_base); e_gadcon_layout_unpack(gcc->o_base);
gcc->hidden = 1; gcc->hidden = 1;
} }
@ -999,7 +1007,7 @@ e_gadcon_client_size_request(E_Gadcon_Client *gcc, Evas_Coord w, Evas_Coord h)
case E_GADCON_ORIENT_BOTTOM: case E_GADCON_ORIENT_BOTTOM:
if (gcc->o_frame) if (gcc->o_frame)
e_gadcon_layout_pack_size_set(gcc->o_frame, w + gcc->pad.w); e_gadcon_layout_pack_size_set(gcc->o_frame, w + gcc->pad.w);
else else if (gcc->o_base)
e_gadcon_layout_pack_size_set(gcc->o_base, w); e_gadcon_layout_pack_size_set(gcc->o_base, w);
break; break;
case E_GADCON_ORIENT_VERT: case E_GADCON_ORIENT_VERT:
@ -1007,7 +1015,7 @@ e_gadcon_client_size_request(E_Gadcon_Client *gcc, Evas_Coord w, Evas_Coord h)
case E_GADCON_ORIENT_RIGHT: case E_GADCON_ORIENT_RIGHT:
if (gcc->o_frame) if (gcc->o_frame)
e_gadcon_layout_pack_size_set(gcc->o_frame, h + gcc->pad.h); e_gadcon_layout_pack_size_set(gcc->o_frame, h + gcc->pad.h);
else else if (gcc->o_base)
e_gadcon_layout_pack_size_set(gcc->o_base, h); e_gadcon_layout_pack_size_set(gcc->o_base, h);
break; break;
case E_GADCON_ORIENT_FLOAT: case E_GADCON_ORIENT_FLOAT:
@ -1035,7 +1043,7 @@ e_gadcon_client_min_size_set(E_Gadcon_Client *gcc, Evas_Coord w, Evas_Coord h)
{ {
if (gcc->o_frame) if (gcc->o_frame)
e_gadcon_layout_pack_min_size_set(gcc->o_frame, w + gcc->pad.w, h + gcc->pad.h); e_gadcon_layout_pack_min_size_set(gcc->o_frame, w + gcc->pad.w, h + gcc->pad.h);
else else if (gcc->o_base)
e_gadcon_layout_pack_min_size_set(gcc->o_base, w, h); e_gadcon_layout_pack_min_size_set(gcc->o_base, w, h);
} }
_e_gadcon_moveresize_handle(gcc); _e_gadcon_moveresize_handle(gcc);
@ -1055,7 +1063,7 @@ e_gadcon_client_aspect_set(E_Gadcon_Client *gcc, int w, int h)
e_gadcon_layout_pack_aspect_pad_set(gcc->o_frame, gcc->pad.w, gcc->pad.h); e_gadcon_layout_pack_aspect_pad_set(gcc->o_frame, gcc->pad.w, gcc->pad.h);
e_gadcon_layout_pack_aspect_set(gcc->o_frame, w, h); e_gadcon_layout_pack_aspect_set(gcc->o_frame, w, h);
} }
else else if (gcc->o_base)
e_gadcon_layout_pack_aspect_set(gcc->o_base, w, h); e_gadcon_layout_pack_aspect_set(gcc->o_base, w, h);
} }
_e_gadcon_moveresize_handle(gcc); _e_gadcon_moveresize_handle(gcc);
@ -1076,7 +1084,7 @@ e_gadcon_client_autoscroll_set(E_Gadcon_Client *gcc, int autoscroll)
e_gadcon_layout_pack_aspect_set(gcc->o_frame, 0, 0); e_gadcon_layout_pack_aspect_set(gcc->o_frame, 0, 0);
e_gadcon_layout_pack_min_size_set(gcc->o_frame, 0, 0); e_gadcon_layout_pack_min_size_set(gcc->o_frame, 0, 0);
} }
else else if (gcc->o_base)
{ {
e_gadcon_layout_pack_aspect_set(gcc->o_base, 0, 0); e_gadcon_layout_pack_aspect_set(gcc->o_base, 0, 0);
e_gadcon_layout_pack_min_size_set(gcc->o_base, 0, 0); e_gadcon_layout_pack_min_size_set(gcc->o_base, 0, 0);
@ -1090,7 +1098,7 @@ e_gadcon_client_autoscroll_set(E_Gadcon_Client *gcc, int autoscroll)
e_gadcon_layout_pack_aspect_set(gcc->o_frame, gcc->aspect.w, gcc->aspect.h); e_gadcon_layout_pack_aspect_set(gcc->o_frame, gcc->aspect.w, gcc->aspect.h);
e_gadcon_layout_pack_min_size_set(gcc->o_frame, gcc->min.w, gcc->min.h); e_gadcon_layout_pack_min_size_set(gcc->o_frame, gcc->min.w, gcc->min.h);
} }
else else if (gcc->o_base)
{ {
e_gadcon_layout_pack_min_size_set(gcc->o_base, gcc->min.w, gcc->min.h); e_gadcon_layout_pack_min_size_set(gcc->o_base, gcc->min.w, gcc->min.h);
e_gadcon_layout_pack_aspect_set(gcc->o_base, gcc->aspect.w, gcc->aspect.h); e_gadcon_layout_pack_aspect_set(gcc->o_base, gcc->aspect.w, gcc->aspect.h);
@ -1113,7 +1121,7 @@ e_gadcon_client_resizable_set(E_Gadcon_Client *gcc, int resizable)
e_gadcon_layout_pack_aspect_set(gcc->o_frame, 0, 0); e_gadcon_layout_pack_aspect_set(gcc->o_frame, 0, 0);
e_gadcon_layout_pack_min_size_set(gcc->o_frame, 0, 0); e_gadcon_layout_pack_min_size_set(gcc->o_frame, 0, 0);
} }
else else if (gcc->o_base)
{ {
e_gadcon_layout_pack_min_size_set(gcc->o_base, 0, 0); e_gadcon_layout_pack_min_size_set(gcc->o_base, 0, 0);
e_gadcon_layout_pack_aspect_set(gcc->o_base, 0, 0); e_gadcon_layout_pack_aspect_set(gcc->o_base, 0, 0);
@ -1127,7 +1135,7 @@ e_gadcon_client_resizable_set(E_Gadcon_Client *gcc, int resizable)
e_gadcon_layout_pack_aspect_set(gcc->o_frame, gcc->aspect.w, gcc->aspect.h); e_gadcon_layout_pack_aspect_set(gcc->o_frame, gcc->aspect.w, gcc->aspect.h);
e_gadcon_layout_pack_min_size_set(gcc->o_frame, gcc->min.w, gcc->min.h); e_gadcon_layout_pack_min_size_set(gcc->o_frame, gcc->min.w, gcc->min.h);
} }
else else if (gcc->o_base)
{ {
e_gadcon_layout_pack_min_size_set(gcc->o_base, gcc->min.w, gcc->min.h); e_gadcon_layout_pack_min_size_set(gcc->o_base, gcc->min.w, gcc->min.h);
e_gadcon_layout_pack_aspect_set(gcc->o_base, gcc->aspect.w, gcc->aspect.h); e_gadcon_layout_pack_aspect_set(gcc->o_base, gcc->aspect.w, gcc->aspect.h);
@ -1143,8 +1151,9 @@ e_gadcon_client_geometry_get(E_Gadcon_Client *gcc, int *x, int *y, int *w, int *
E_OBJECT_CHECK(gcc); E_OBJECT_CHECK(gcc);
E_OBJECT_TYPE_CHECK(gcc, E_GADCON_CLIENT_TYPE); E_OBJECT_TYPE_CHECK(gcc, E_GADCON_CLIENT_TYPE);
if (!e_gadcon_canvas_zone_geometry_get(gcc->gadcon, &gx, &gy, NULL, NULL)) return 0; if (!e_gadcon_canvas_zone_geometry_get(gcc->gadcon, &gx, &gy, NULL, NULL)) return 0;
evas_object_geometry_get(gcc->o_base, x, y, w, h); if (gcc->o_base)
evas_object_geometry_get(gcc->o_base, x, y, w, h);
if (x) *x += gx; if (x) *x += gx;
if (y) *y += gy; if (y) *y += gy;
@ -1240,7 +1249,7 @@ e_gadcon_client_util_menu_attach(E_Gadcon_Client *gcc)
E_OBJECT_TYPE_CHECK(gcc, E_GADCON_CLIENT_TYPE); E_OBJECT_TYPE_CHECK(gcc, E_GADCON_CLIENT_TYPE);
if (gcc->o_frame) if (gcc->o_frame)
evas_object_event_callback_add(gcc->o_frame, EVAS_CALLBACK_MOUSE_DOWN, _e_gadcon_client_cb_mouse_down, gcc); evas_object_event_callback_add(gcc->o_frame, EVAS_CALLBACK_MOUSE_DOWN, _e_gadcon_client_cb_mouse_down, gcc);
else else if (gcc->o_base)
evas_object_event_callback_add(gcc->o_base, EVAS_CALLBACK_MOUSE_DOWN, _e_gadcon_client_cb_mouse_down, gcc); evas_object_event_callback_add(gcc->o_base, EVAS_CALLBACK_MOUSE_DOWN, _e_gadcon_client_cb_mouse_down, gcc);
} }
@ -1300,6 +1309,10 @@ _e_gadcon_free(E_Gadcon *gc)
static void static void
_e_gadcon_client_free(E_Gadcon_Client *gcc) _e_gadcon_client_free(E_Gadcon_Client *gcc)
{ {
if (gcc->o_base)
evas_object_event_callback_del(gcc->o_base,
EVAS_CALLBACK_DEL,
_e_gadcon_client_del_hook);
if (gcc->menu) if (gcc->menu)
{ {
e_menu_post_deactivate_callback_set(gcc->menu, NULL, NULL); e_menu_post_deactivate_callback_set(gcc->menu, NULL, NULL);
@ -1337,13 +1350,14 @@ _e_gadcon_moveresize_handle(E_Gadcon_Client *gcc)
h = (w * gcc->aspect.h) / gcc->aspect.w; h = (w * gcc->aspect.h) / gcc->aspect.w;
} }
} }
e_box_pack_options_set(gcc->o_base, if (gcc->o_base)
1, 1, /* fill */ e_box_pack_options_set(gcc->o_base,
1, 1, /* expand */ 1, 1, /* fill */
0.5, 0.5, /* align */ 1, 1, /* expand */
w, h, /* min */ 0.5, 0.5, /* align */
w, h /* max */ w, h, /* min */
); w, h /* max */
);
} }
static int static int
@ -1483,7 +1497,7 @@ _e_gadcon_client_inject(E_Gadcon *gc, E_Gadcon_Client *gcc, int x, int y)
{ {
if (gcc->o_frame) if (gcc->o_frame)
evas_object_geometry_get(gcc->o_frame, &cx, &cy, &cw, &ch); evas_object_geometry_get(gcc->o_frame, &cx, &cy, &cw, &ch);
else else if (gcc->o_base)
evas_object_geometry_get(gcc->o_base, &cx, &cy, &cw, &ch); evas_object_geometry_get(gcc->o_base, &cx, &cy, &cw, &ch);
if (E_INSIDE(x, y, cx, cy, cw, ch)) return; if (E_INSIDE(x, y, cx, cy, cw, ch)) return;
} }
@ -1500,7 +1514,7 @@ _e_gadcon_client_inject(E_Gadcon *gc, E_Gadcon_Client *gcc, int x, int y)
if (gcc2->hidden) continue; if (gcc2->hidden) continue;
if (gcc2->o_frame) if (gcc2->o_frame)
evas_object_geometry_get(gcc2->o_frame, &cx, &cy, &cw, &ch); evas_object_geometry_get(gcc2->o_frame, &cx, &cy, &cw, &ch);
else else if (gcc2->o_base)
evas_object_geometry_get(gcc2->o_base, &cx, &cy, &cw, &ch); evas_object_geometry_get(gcc2->o_base, &cx, &cy, &cw, &ch);
if (e_gadcon_layout_orientation_get(gc->o_container)) if (e_gadcon_layout_orientation_get(gc->o_container))
{ {
@ -1775,14 +1789,14 @@ _e_gadcon_cb_signal_move_go(void *data, Evas_Object *obj, const char *emission,
if (gcc->o_frame) if (gcc->o_frame)
evas_object_geometry_get(gcc->o_frame, NULL, NULL, &w, &h); evas_object_geometry_get(gcc->o_frame, NULL, NULL, &w, &h);
else else if (gcc->o_base)
evas_object_geometry_get(gcc->o_base, NULL, NULL, &w, &h); evas_object_geometry_get(gcc->o_base, NULL, NULL, &w, &h);
if (e_gadcon_layout_orientation_get(gcc->gadcon->o_container)) if (e_gadcon_layout_orientation_get(gcc->gadcon->o_container))
{ {
if (gcc->o_frame) if (gcc->o_frame)
e_gadcon_layout_pack_request_set(gcc->o_frame, gcc->config.pos + x, w); e_gadcon_layout_pack_request_set(gcc->o_frame, gcc->config.pos + x, w);
else else if (gcc->o_base)
e_gadcon_layout_pack_request_set(gcc->o_base, gcc->config.pos + x, w); e_gadcon_layout_pack_request_set(gcc->o_base, gcc->config.pos + x, w);
gcc->config.size = w; gcc->config.size = w;
@ -1793,7 +1807,7 @@ _e_gadcon_cb_signal_move_go(void *data, Evas_Object *obj, const char *emission,
{ {
if (gcc->o_frame) if (gcc->o_frame)
e_gadcon_layout_pack_request_set(gcc->o_frame, gcc->config.pos + y, h); e_gadcon_layout_pack_request_set(gcc->o_frame, gcc->config.pos + y, h);
else else if (gcc->o_base)
e_gadcon_layout_pack_request_set(gcc->o_base, gcc->config.pos + y, h); e_gadcon_layout_pack_request_set(gcc->o_base, gcc->config.pos + y, h);
gcc->config.size = h; gcc->config.size = h;
@ -1851,7 +1865,7 @@ _e_gadcon_cb_signal_resize_left_go(void *data, Evas_Object *obj, const char *emi
if (gcc->o_frame) if (gcc->o_frame)
evas_object_geometry_get(gcc->o_frame, NULL, NULL, &w, &h); evas_object_geometry_get(gcc->o_frame, NULL, NULL, &w, &h);
else else if (gcc->o_base)
evas_object_geometry_get(gcc->o_base, NULL, NULL, &w, &h); evas_object_geometry_get(gcc->o_base, NULL, NULL, &w, &h);
_e_gadcon_client_current_position_sync(gcc); _e_gadcon_client_current_position_sync(gcc);
@ -1875,7 +1889,7 @@ _e_gadcon_cb_signal_resize_left_go(void *data, Evas_Object *obj, const char *emi
{ {
if (gcc->o_frame) if (gcc->o_frame)
e_gadcon_layout_pack_request_set(gcc->o_frame, gcc->config.pos + x, w - x); e_gadcon_layout_pack_request_set(gcc->o_frame, gcc->config.pos + x, w - x);
else else if (gcc->o_base)
e_gadcon_layout_pack_request_set(gcc->o_base, gcc->config.pos + x, w - x); e_gadcon_layout_pack_request_set(gcc->o_base, gcc->config.pos + x, w - x);
evas_object_geometry_get(gcc->gadcon->o_container, NULL, NULL, &w, &h); evas_object_geometry_get(gcc->gadcon->o_container, NULL, NULL, &w, &h);
gcc->config.res = w; gcc->config.res = w;
@ -1884,7 +1898,7 @@ _e_gadcon_cb_signal_resize_left_go(void *data, Evas_Object *obj, const char *emi
{ {
if (gcc->o_frame) if (gcc->o_frame)
e_gadcon_layout_pack_request_set(gcc->o_frame, gcc->config.pos + y, h - y); e_gadcon_layout_pack_request_set(gcc->o_frame, gcc->config.pos + y, h - y);
else else if (gcc->o_base)
e_gadcon_layout_pack_request_set(gcc->o_base, gcc->config.pos + y, h - y); e_gadcon_layout_pack_request_set(gcc->o_base, gcc->config.pos + y, h - y);
evas_object_geometry_get(gcc->gadcon->o_container, NULL, NULL, &w, &h); evas_object_geometry_get(gcc->gadcon->o_container, NULL, NULL, &w, &h);
gcc->config.res = h; gcc->config.res = h;
@ -1922,7 +1936,7 @@ _e_gadcon_cb_signal_resize_right_go(void *data, Evas_Object *obj, const char *em
if (gcc->o_frame) if (gcc->o_frame)
evas_object_geometry_get(gcc->o_frame, NULL, NULL, &w, &h); evas_object_geometry_get(gcc->o_frame, NULL, NULL, &w, &h);
else else if (gcc->o_base)
evas_object_geometry_get(gcc->o_base, NULL, NULL, &w, &h); evas_object_geometry_get(gcc->o_base, NULL, NULL, &w, &h);
_e_gadcon_client_current_position_sync(gcc); _e_gadcon_client_current_position_sync(gcc);
@ -1946,7 +1960,7 @@ _e_gadcon_cb_signal_resize_right_go(void *data, Evas_Object *obj, const char *em
{ {
if (gcc->o_frame) if (gcc->o_frame)
e_gadcon_layout_pack_request_set(gcc->o_frame, gcc->config.pos, w + x); e_gadcon_layout_pack_request_set(gcc->o_frame, gcc->config.pos, w + x);
else else if (gcc->o_base)
e_gadcon_layout_pack_request_set(gcc->o_base, gcc->config.pos, w + x); e_gadcon_layout_pack_request_set(gcc->o_base, gcc->config.pos, w + x);
evas_object_geometry_get(gcc->gadcon->o_container, NULL, NULL, &w, &h); evas_object_geometry_get(gcc->gadcon->o_container, NULL, NULL, &w, &h);
gcc->config.res = w; gcc->config.res = w;
@ -1955,7 +1969,7 @@ _e_gadcon_cb_signal_resize_right_go(void *data, Evas_Object *obj, const char *em
{ {
if (gcc->o_frame) if (gcc->o_frame)
e_gadcon_layout_pack_request_set(gcc->o_frame, gcc->config.pos, h + y); e_gadcon_layout_pack_request_set(gcc->o_frame, gcc->config.pos, h + y);
else else if (gcc->o_base)
e_gadcon_layout_pack_request_set(gcc->o_base, gcc->config.pos, h + y); e_gadcon_layout_pack_request_set(gcc->o_base, gcc->config.pos, h + y);
evas_object_geometry_get(gcc->gadcon->o_container, NULL, NULL, &w, &h); evas_object_geometry_get(gcc->gadcon->o_container, NULL, NULL, &w, &h);
gcc->config.res = h; gcc->config.res = h;
@ -2017,10 +2031,13 @@ _e_gadcon_cb_dnd_enter(void *data, const char *type, void *event)
e_gadcon_client_show(gcc); e_gadcon_client_show(gcc);
o = gcc->o_frame ? gcc->o_frame : gcc->o_base; o = gcc->o_frame ? gcc->o_frame : gcc->o_base;
if (e_gadcon_layout_orientation_get(gc->o_container)) if (o)
e_gadcon_layout_pack_request_set(o, gcc->config.pos, gcc->config.size); {
else if (e_gadcon_layout_orientation_get(gc->o_container))
e_gadcon_layout_pack_request_set(o, gcc->config.pos, gcc->config.size); e_gadcon_layout_pack_request_set(o, gcc->config.pos, gcc->config.size);
else
e_gadcon_layout_pack_request_set(o, gcc->config.pos, gcc->config.size);
}
gcc->state_info.resist = 1; gcc->state_info.resist = 1;
} }
else if (ev->data) else if (ev->data)
@ -2052,7 +2069,7 @@ _e_gadcon_cb_dnd_enter(void *data, const char *type, void *event)
new_gcc->state_info.flags = gcc->state_info.flags; new_gcc->state_info.flags = gcc->state_info.flags;
if (new_gcc->o_frame) if (new_gcc->o_frame)
e_gadcon_layout_pack_options_set(new_gcc->o_frame, new_gcc); e_gadcon_layout_pack_options_set(new_gcc->o_frame, new_gcc);
else else if (new_gcc->o_base)
e_gadcon_layout_pack_options_set(new_gcc->o_base, new_gcc); e_gadcon_layout_pack_options_set(new_gcc->o_base, new_gcc);
e_gadcon_client_autoscroll_set(new_gcc, gcc->autoscroll); e_gadcon_client_autoscroll_set(new_gcc, gcc->autoscroll);
@ -2106,10 +2123,13 @@ _e_gadcon_cb_dnd_move(void *data, const char *type, void *event)
_e_gadcon_client_inject(gc, gcc, ev->x + dx, ev->y + dy); _e_gadcon_client_inject(gc, gcc, ev->x + dx, ev->y + dy);
o = gcc->o_frame ? gcc->o_frame : gcc->o_base; o = gcc->o_frame ? gcc->o_frame : gcc->o_base;
if (e_gadcon_layout_orientation_get(gc->o_container)) if (o)
e_gadcon_layout_pack_request_set(o, gcc->config.pos, gcc->config.size); {
else if (e_gadcon_layout_orientation_get(gc->o_container))
e_gadcon_layout_pack_request_set(o, gcc->config.pos, gcc->config.size); e_gadcon_layout_pack_request_set(o, gcc->config.pos, gcc->config.size);
else
e_gadcon_layout_pack_request_set(o, gcc->config.pos, gcc->config.size);
}
e_gadcon_layout_thaw(gc->o_container); e_gadcon_layout_thaw(gc->o_container);
} }
} }
@ -2298,6 +2318,21 @@ _e_gadcon_client_cb_menu_remove(void *data, E_Menu *m, E_Menu_Item *mi)
e_config_save_queue(); e_config_save_queue();
} }
static void
_e_gadcon_client_del_hook(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
E_Gadcon_Client *gcc;
gcc = data;
gcc->o_base = NULL;
if (gcc->o_frame)
{
evas_object_del(gcc->o_frame);
gcc->o_frame = NULL;
}
e_object_del(E_OBJECT(gcc));
}
/* a smart object JUST for gadcon */ /* a smart object JUST for gadcon */
typedef struct _E_Gadcon_Layout_Item E_Gadcon_Layout_Item; typedef struct _E_Gadcon_Layout_Item E_Gadcon_Layout_Item;
@ -2704,7 +2739,7 @@ _e_gadcon_layout_smart_adopt(E_Smart_Data *sd, Evas_Object *obj)
evas_object_clip_set(obj, sd->clip); evas_object_clip_set(obj, sd->clip);
evas_object_smart_member_add(obj, bi->sd->obj); evas_object_smart_member_add(obj, bi->sd->obj);
evas_object_data_set(obj, "e_gadcon_layout_data", bi); evas_object_data_set(obj, "e_gadcon_layout_data", bi);
evas_object_event_callback_add(obj, EVAS_CALLBACK_FREE, evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL,
_e_gadcon_layout_smart_item_del_hook, NULL); _e_gadcon_layout_smart_item_del_hook, NULL);
if ((!evas_object_visible_get(sd->clip)) && if ((!evas_object_visible_get(sd->clip)) &&
(evas_object_visible_get(sd->obj))) (evas_object_visible_get(sd->obj)))
@ -2727,7 +2762,7 @@ _e_gadcon_layout_smart_disown(Evas_Object *obj)
evas_object_hide(bi->sd->clip); evas_object_hide(bi->sd->clip);
} }
evas_object_event_callback_del(obj, evas_object_event_callback_del(obj,
EVAS_CALLBACK_FREE, EVAS_CALLBACK_DEL,
_e_gadcon_layout_smart_item_del_hook); _e_gadcon_layout_smart_item_del_hook);
evas_object_smart_member_del(obj); evas_object_smart_member_del(obj);
evas_object_clip_unset(obj); evas_object_clip_unset(obj);
@ -3474,8 +3509,11 @@ _e_gadcon_client_current_position_sync(E_Gadcon_Client *gcc)
Evas_Object *o; Evas_Object *o;
o = gcc->o_frame ? gcc->o_frame : gcc->o_base; o = gcc->o_frame ? gcc->o_frame : gcc->o_base;
bi = evas_object_data_get(o, "e_gadcon_layout_data"); if (o)
if (!bi) return; {
bi = evas_object_data_get(o, "e_gadcon_layout_data");
if (!bi) return;
}
gcc->state_info.prev_pos = gcc->config.pos; gcc->state_info.prev_pos = gcc->config.pos;
gcc->state_info.prev_size = gcc->config.size; gcc->state_info.prev_size = gcc->config.size;