fyi this will break abi as well for anyone who has an external module which uses and manages its own gadcon location
On Fri, Oct 5, 2012 at 10:57 AM, Enlightenment SVN < no-re...@enlightenment.org> wrote: > Log: > gadcon location gadget_add callbacks now have a gadcon client param so the > config can be retrieved since these callbacks are (currently) only used for > changing locations of gadgets > also the related gcc param in gadget_del can now have a NULL config to > signify that the gadget has been moved to a new gadcon > > this means that moving a gadget to a new location will no longer cause > it to lose its gadget config > > ticket #1594 > > > Author: discomfitor > Date: 2012-10-05 02:57:34 -0700 (Fri, 05 Oct 2012) > New Revision: 77521 > Trac: http://trac.enlightenment.org/e/changeset/77521 > > Modified: > trunk/e/src/bin/e_gadcon.c trunk/e/src/bin/e_gadcon.h > trunk/e/src/bin/e_shelf.c trunk/e/src/modules/gadman/e_mod_gadman.c > trunk/e/src/modules/gadman/e_mod_gadman.h > > Modified: trunk/e/src/bin/e_gadcon.c > =================================================================== > --- trunk/e/src/bin/e_gadcon.c 2012-10-05 09:17:47 UTC (rev 77520) > +++ trunk/e/src/bin/e_gadcon.c 2012-10-05 09:57:34 UTC (rev 77521) > @@ -5664,7 +5664,7 @@ > EAPI E_Gadcon_Location * > e_gadcon_location_new(const char *name, > E_Gadcon_Site site, > - int (*add_func)(void *data, const > E_Gadcon_Client_Class *cc), > + int (*add_func)(void *data, E_Gadcon_Client *gcc, > const E_Gadcon_Client_Class *cc), > void *add_data, > void (*remove_func)(void *data, E_Gadcon_Client > *cc), > void *remove_data) > @@ -5719,7 +5719,8 @@ > > cc = eina_hash_find(providers, gcc->cf->name); > if (!cc) return 0; > - if (!dst->gadget_add.func(dst->gadget_add.data, cc)) return 0; > + if (!dst->gadget_add.func(dst->gadget_add.data, gcc, cc)) return 0; > + gcc->cf = NULL; > src->gadget_remove.func(src->gadget_remove.data, gcc); > return 1; > } > > Modified: trunk/e/src/bin/e_gadcon.h > =================================================================== > --- trunk/e/src/bin/e_gadcon.h 2012-10-05 09:17:47 UTC (rev 77520) > +++ trunk/e/src/bin/e_gadcon.h 2012-10-05 09:57:34 UTC (rev 77521) > @@ -261,7 +261,7 @@ > /* adds gadcon client to location. Returns nonzero on success */ > struct > { > - int (*func)(void *data, const E_Gadcon_Client_Class *cc); > + int (*func)(void *data, E_Gadcon_Client *gcc, const > E_Gadcon_Client_Class *cc); > void *data; > } gadget_add; > /* removes existing gadcon client from location */ > @@ -353,7 +353,7 @@ > > EAPI E_Gadcon_Location * > e_gadcon_location_new(const char *name, > E_Gadcon_Site site, > - int (*add_func)(void *data, const > E_Gadcon_Client_Class *cc), > + int (*add_func)(void *data, E_Gadcon_Client *, > const E_Gadcon_Client_Class *cc), > void *add_data, > void (*remove_func)(void *data, E_Gadcon_Client > *cc), > void *remove_data); > > Modified: trunk/e/src/bin/e_shelf.c > =================================================================== > --- trunk/e/src/bin/e_shelf.c 2012-10-05 09:17:47 UTC (rev 77520) > +++ trunk/e/src/bin/e_shelf.c 2012-10-05 09:57:34 UTC (rev 77521) > @@ -28,7 +28,7 @@ > static Eina_Bool _e_shelf_cb_instant_hide_timer(void *data); > static void _e_shelf_menu_pre_cb(void *data, E_Menu *m); > static void _e_shelf_gadcon_client_remove(void *data, > E_Gadcon_Client *gcc); > -static int _e_shelf_gadcon_client_add(void *data, const > E_Gadcon_Client_Class *cc); > +static int _e_shelf_gadcon_client_add(void *data, > E_Gadcon_Client *gcc, const E_Gadcon_Client_Class *cc); > static const char *_e_shelf_orient_icon_name_get(E_Shelf *s); > static void _e_shelf_bindings_add(E_Shelf *es); > static void _e_shelf_bindings_del(E_Shelf *es); > @@ -2405,21 +2405,52 @@ > > s = data; > gc = s->gadcon; > - e_gadcon_client_config_del(gc->cf, gcc->cf); > + if (gcc->cf) e_gadcon_client_config_del(gc->cf, gcc->cf); > e_gadcon_unpopulate(gc); > e_gadcon_populate(gc); > e_config_save_queue(); > } > > static int > -_e_shelf_gadcon_client_add(void *data, const E_Gadcon_Client_Class *cc) > +_e_shelf_gadcon_client_add(void *data, E_Gadcon_Client *gcc, const > E_Gadcon_Client_Class *cc) > { > E_Shelf *s; > E_Gadcon *gc; > + E_Config_Gadcon_Client *cf_gcc = gcc->cf; > > s = data; > gc = s->gadcon; > - if (!e_gadcon_client_config_new(gc, cc->name)) return 0; > + if (gcc) > + { > + gcc->gadcon->cf->clients = > eina_list_remove(gcc->gadcon->cf->clients, cf_gcc); > + if (gc->zone) > + cf_gcc->geom.res = gc->zone->w; > + else if (gc->o_container) > + { > + int w, h; > + evas_object_geometry_get(gc->o_container, NULL, NULL, &w, > &h); > + switch (gc->orient) > + { > + case E_GADCON_ORIENT_VERT: > + case E_GADCON_ORIENT_LEFT: > + case E_GADCON_ORIENT_RIGHT: > + case E_GADCON_ORIENT_CORNER_LT: > + case E_GADCON_ORIENT_CORNER_RT: > + case E_GADCON_ORIENT_CORNER_LB: > + case E_GADCON_ORIENT_CORNER_RB: > + cf_gcc->geom.res = h; > + break; > + default: > + cf_gcc->geom.res = w; > + } > + } > + else > + cf_gcc->geom.res = 800; > + cf_gcc->geom.size = 80; > + cf_gcc->geom.pos = cf_gcc->geom.res - cf_gcc->geom.size; > + gc->cf->clients = eina_list_append(gc->cf->clients, cf_gcc); > + } > + else if (!e_gadcon_client_config_new(gc, cc->name)) return 0; > e_gadcon_unpopulate(gc); > e_gadcon_populate(gc); > e_config_save_queue(); > > Modified: trunk/e/src/modules/gadman/e_mod_gadman.c > =================================================================== > --- trunk/e/src/modules/gadman/e_mod_gadman.c 2012-10-05 09:17:47 UTC > (rev 77520) > +++ trunk/e/src/modules/gadman/e_mod_gadman.c 2012-10-05 09:57:34 UTC > (rev 77521) > @@ -40,7 +40,7 @@ > static void on_menu_add(void *data, E_Menu *m, E_Menu_Item > *mi); > > static Eina_Bool _gadman_module_cb(void *d __UNUSED__, int type > __UNUSED__, E_Event_Module_Update *ev); > -static int _e_gadman_client_add(void *data __UNUSED__, const > E_Gadcon_Client_Class *cc); > +static int _e_gadman_client_add(void *data __UNUSED__, > E_Gadcon_Client *, const E_Gadcon_Client_Class *cc); > static void _e_gadman_client_remove(void *data __UNUSED__, > E_Gadcon_Client *gcc); > > static void _e_gadman_handlers_add(void); > @@ -373,9 +373,9 @@ > } > > E_Gadcon_Client * > -gadman_gadget_add(const E_Gadcon_Client_Class *cc, Gadman_Layer_Type > layer) > +gadman_gadget_add(const E_Gadcon_Client_Class *cc, E_Gadcon_Client *gcc, > Gadman_Layer_Type layer) > { > - return _gadman_gadget_add(cc, layer, NULL); > + return _gadman_gadget_add(cc, layer, gcc->cf); > } > > static E_Gadcon_Client * > @@ -1666,15 +1666,16 @@ > } > > static int > -_e_gadman_client_add(void *data __UNUSED__, const E_Gadcon_Client_Class > *cc) > +_e_gadman_client_add(void *data __UNUSED__, E_Gadcon_Client *gcc, const > E_Gadcon_Client_Class *cc) > { > - return !!gadman_gadget_add(cc, GADMAN_LAYER_BG); > + return !!gadman_gadget_add(cc, gcc, GADMAN_LAYER_BG); > } > > static void > _e_gadman_client_remove(void *data __UNUSED__, E_Gadcon_Client *gcc) > { > - gcc->gadcon->cf->clients = eina_list_remove(gcc->gadcon->cf->clients, > gcc->cf); > + if (gcc->cf) > + gcc->gadcon->cf->clients = > eina_list_remove(gcc->gadcon->cf->clients, gcc->cf); > e_object_del(E_OBJECT(gcc)); > } > > > Modified: trunk/e/src/modules/gadman/e_mod_gadman.h > =================================================================== > --- trunk/e/src/modules/gadman/e_mod_gadman.h 2012-10-05 09:17:47 UTC > (rev 77520) > +++ trunk/e/src/modules/gadman/e_mod_gadman.h 2012-10-05 09:57:34 UTC > (rev 77521) > @@ -91,7 +91,7 @@ > > void gadman_init(E_Module *m); > void gadman_shutdown(void); > -E_Gadcon_Client *gadman_gadget_add(const E_Gadcon_Client_Class *cc, > Gadman_Layer_Type layer); > +E_Gadcon_Client *gadman_gadget_add(const E_Gadcon_Client_Class *cc, > E_Gadcon_Client *, Gadman_Layer_Type layer); > void gadman_gadget_edit_start(E_Gadcon_Client *gcc); > void gadman_gadget_edit_end(void *data, Evas_Object *obj, > const char *emission, const char *source); > void gadman_gadgets_toggle(void); > > > > ------------------------------------------------------------------------------ > Don't let slow site performance ruin your business. Deploy New Relic APM > Deploy New Relic app performance management and know exactly > what is happening inside your Ruby, Python, PHP, Java, and .NET app > Try New Relic at no cost today and get our sweet Data Nerd shirt too! > http://p.sf.net/sfu/newrelic-dev2dev > _______________________________________________ > enlightenment-svn mailing list > enlightenment-...@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-svn > ------------------------------------------------------------------------------ Don't let slow site performance ruin your business. Deploy New Relic APM Deploy New Relic app performance management and know exactly what is happening inside your Ruby, Python, PHP, Java, and .NET app Try New Relic at no cost today and get our sweet Data Nerd shirt too! http://p.sf.net/sfu/newrelic-dev2dev _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel