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

Reply via email to