diff --git a/src/bin/e_gadcon.c b/src/bin/e_gadcon.c index 66b1ea826..07ba43634 100644 --- a/src/bin/e_gadcon.c +++ b/src/bin/e_gadcon.c @@ -403,7 +403,7 @@ e_gadcon_layout_policy_set(E_Gadcon *gc, E_Gadcon_Layout_Policy layout_policy) /* FIXME: delete container obj, re-pack all clients */ } -EAPI void +EAPI Eina_Bool e_gadcon_populate(E_Gadcon *gc) { Eina_List *l; @@ -436,34 +436,37 @@ e_gadcon_populate(E_Gadcon *gc) gcc = cc->func.init(gc, cf_gcc->name, cf_gcc->id, cf_gcc->style); - if (gcc) + if (!gcc) { - gcc->cf = cf_gcc; - gcc->client_class = cc; - gcc->config.pos = cf_gcc->geom.pos; - gcc->config.size = cf_gcc->geom.size; - gcc->config.res = cf_gcc->geom.res; - gcc->state_info.seq = cf_gcc->state_info.seq; - gcc->state_info.flags = cf_gcc->state_info.flags; - if (gcc->o_frame) - e_gadcon_layout_pack_options_set(gcc->o_frame, gcc); - else if (gcc->o_base) - e_gadcon_layout_pack_options_set(gcc->o_base, gcc); - - if (!gcc->autoscroll_set) - e_gadcon_client_autoscroll_set(gcc, cf_gcc->autoscroll); -// e_gadcon_client_resizable_set(gcc, cf_gcc->resizable); - if (gcc->client_class->func.orient) - gcc->client_class->func.orient(gcc, gc->orient); - - _e_gadcon_client_save(gcc); - if (gc->editing) e_gadcon_client_edit_begin(gcc); - if (gc->instant_edit) - e_gadcon_client_util_menu_attach(gcc); + e_gadcon_layout_thaw(gc->o_container); + return EINA_FALSE; } + gcc->cf = cf_gcc; + gcc->client_class = cc; + gcc->config.pos = cf_gcc->geom.pos; + gcc->config.size = cf_gcc->geom.size; + gcc->config.res = cf_gcc->geom.res; + gcc->state_info.seq = cf_gcc->state_info.seq; + gcc->state_info.flags = cf_gcc->state_info.flags; + if (gcc->o_frame) + e_gadcon_layout_pack_options_set(gcc->o_frame, gcc); + else if (gcc->o_base) + e_gadcon_layout_pack_options_set(gcc->o_base, gcc); + + if (!gcc->autoscroll_set) + e_gadcon_client_autoscroll_set(gcc, cf_gcc->autoscroll); +// e_gadcon_client_resizable_set(gcc, cf_gcc->resizable); + if (gcc->client_class->func.orient) + gcc->client_class->func.orient(gcc, gc->orient); + + _e_gadcon_client_save(gcc); + if (gc->editing) e_gadcon_client_edit_begin(gcc); + if (gc->instant_edit) + e_gadcon_client_util_menu_attach(gcc); } } e_gadcon_layout_thaw(gc->o_container); + return EINA_TRUE; } EAPI void diff --git a/src/bin/e_gadcon.h b/src/bin/e_gadcon.h index 163fe53de..452cd2b5f 100644 --- a/src/bin/e_gadcon.h +++ b/src/bin/e_gadcon.h @@ -247,7 +247,7 @@ EAPI void e_gadcon_size_request_callback_set(E_Gadcon *gc, vo EAPI void e_gadcon_frame_request_callback_set(E_Gadcon * gc, Evas_Object * (*func)(void *data, E_Gadcon_Client * gcc, const char *style), void *data); EAPI void e_gadcon_populate_callback_set(E_Gadcon *gc, void (*func)(void *data, E_Gadcon *gc, const E_Gadcon_Client_Class *cc), void *data); EAPI void e_gadcon_layout_policy_set(E_Gadcon *gc, E_Gadcon_Layout_Policy layout_policy); -EAPI void e_gadcon_populate(E_Gadcon *gc); +EAPI Eina_Bool e_gadcon_populate(E_Gadcon *gc); EAPI void e_gadcon_unpopulate(E_Gadcon *gc); EAPI void e_gadcon_populate_class(E_Gadcon *gc, const E_Gadcon_Client_Class *cc); EAPI void e_gadcon_orient(E_Gadcon *gc, E_Gadcon_Orient orient); diff --git a/src/bin/e_int_gadcon_config.c b/src/bin/e_int_gadcon_config.c index 7d92d68e1..c7137b552 100644 --- a/src/bin/e_int_gadcon_config.c +++ b/src/bin/e_int_gadcon_config.c @@ -293,7 +293,8 @@ _cb_add(void *data, void *data2 __UNUSED__) if (update) { e_gadcon_unpopulate(cfdata->gc); - e_gadcon_populate(cfdata->gc); + if (!e_gadcon_populate(cfdata->gc)) + _cb_del(cfdata, NULL); e_config_save_queue(); } e_widget_ilist_unselect(cfdata->o_list);