Enlightenment CVS committal

Author  : englebass
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/modules/ibar


Modified Files:
        e_mod_config.c e_mod_main.c e_mod_main.h 


Log Message:
We need id's for gadgets which are independent of shelves, so if we move
a gadget from one shelf to another it will keep the same config. Since the
id is mainly for the module to find the appropriate config for a gadget,
the module is now responsible for creating id's for gadgets config. One
problem is that we no longer can trust the id of a gadget, so we need to
store a reference between a gadget and its config after startup. No big
deal.

===================================================================
RCS file: /cvs/e/e17/apps/e/src/modules/ibar/e_mod_config.c,v
retrieving revision 1.42
retrieving revision 1.43
diff -u -3 -r1.42 -r1.43
--- e_mod_config.c      4 Aug 2007 00:20:54 -0000       1.42
+++ e_mod_config.c      16 Sep 2007 00:02:53 -0000      1.43
@@ -153,7 +153,7 @@
    if (cfdata->dir) ci->dir = evas_stringshare_add(cfdata->dir);
    ci->show_label = cfdata->show_label;
    ci->eap_label = cfdata->eap_label;
-   _ibar_config_update();
+   _ibar_config_update(ci);
    e_config_save_queue();
    return 1;
 }
===================================================================
RCS file: /cvs/e/e17/apps/e/src/modules/ibar/e_mod_main.c,v
retrieving revision 1.180
retrieving revision 1.181
diff -u -3 -r1.180 -r1.181
--- e_mod_main.c        4 Aug 2007 00:20:54 -0000       1.180
+++ e_mod_main.c        16 Sep 2007 00:02:53 -0000      1.181
@@ -16,13 +16,15 @@
 static void _gc_orient(E_Gadcon_Client *gcc);
 static char *_gc_label(void);
 static Evas_Object *_gc_icon(Evas *evas);
+static const char *_gc_id_new(void);
+static void _gc_id_del(const char *id);
 /* and actually define the gadcon class that this module provides (just 1) */
 static const E_Gadcon_Client_Class _gadcon_class =
 {
    GADCON_CLIENT_CLASS_VERSION,
      "ibar",
      {
-       _gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon
+        _gc_init, _gc_shutdown, _gc_orient, _gc_label, _gc_icon, _gc_id_new, 
_gc_id_del
      },
    E_GADCON_CLIENT_STYLE_INSET
 };
@@ -44,7 +46,7 @@
    Evas_Object     *o_ibar;
    IBar            *ibar;
    E_Drop_Handler  *drop_handler;
-   const char      *dir;
+   Config_Item     *ci;
 };
 
 struct _IBar
@@ -58,8 +60,6 @@
    int             drop_before;
    E_Order        *apps;
    Evas_List      *icons;
-   int             show_label;
-   int             eap_label;
    Evas_Coord     dnd_x, dnd_y;
 };
 
@@ -80,7 +80,7 @@
    } drag;
 };
 
-static IBar *_ibar_new(Evas *evas, const char *dir);
+static IBar *_ibar_new(Evas *evas, Instance *inst);
 static void _ibar_free(IBar *b);
 static void _ibar_cb_empty_mouse_down(void *data, Evas *e, Evas_Object *obj, 
void *event_info);
 static void _ibar_empty_handle(IBar *b);
@@ -137,13 +137,9 @@
    inst = E_NEW(Instance, 1);
 
    ci = _ibar_config_item_get(id);
+   inst->ci = ci;
    if (!ci->dir) ci->dir = evas_stringshare_add("default");
-   inst->dir = evas_stringshare_add(ci->dir);
-   b = _ibar_new(gc->evas, ci->dir);
-   b->show_label = ci->show_label;
-   b->eap_label = ci->eap_label;
-   b->inst = inst;
-   inst->ibar = b;
+   b = _ibar_new(gc->evas, inst);
    o = b->o_box;
    gcc = e_gadcon_client_new(gc, name, id, style, o);
    gcc->data = inst;
@@ -171,7 +167,6 @@
    Instance *inst;
    
    inst = gcc->data;
-   evas_stringshare_del(inst->dir);
    ibar_config->instances = evas_list_remove(ibar_config->instances, inst);
    e_drop_handler_del(inst->drop_handler);
    _ibar_free(inst->ibar);
@@ -231,6 +226,29 @@
    edje_object_file_set(o, buf, "icon");
    return o;
 }
+
+static const char *
+_gc_id_new(void)
+{
+   Config_Item *ci;
+
+   ci = _ibar_config_item_get(NULL);
+   return ci->id;
+}
+
+static void
+_gc_id_del(const char *id)
+{
+   Config_Item *ci;
+
+   ci = _ibar_config_item_get(id);
+   if (ci)
+     {
+       if (ci->id) evas_stringshare_del(ci->id);
+       ibar_config->items = evas_list_remove(ibar_config->items, ci);
+     }
+}
+
 /**/
 /***************************************************************************/
 
@@ -238,25 +256,27 @@
 /**/
 
 static IBar *
-_ibar_new(Evas *evas, const char *dir)
+_ibar_new(Evas *evas, Instance *inst)
 {
    IBar *b;
    char buf[4096];
    
    b = E_NEW(IBar, 1);
+   inst->ibar = b;
+   b->inst = inst;
    b->o_box = e_box_add(evas);
    e_box_homogenous_set(b->o_box, 1);
    e_box_orientation_set(b->o_box, 1);
    e_box_align_set(b->o_box, 0.5, 0.5);
-   if (dir[0] != '/')
+   if (inst->ci->dir[0] != '/')
      {
        const char *homedir;
 
        homedir = e_user_homedir_get();
-       snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar/%s/.order", 
homedir, dir);
+       snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar/%s/.order", 
homedir, inst->ci->dir);
      }
    else
-     snprintf(buf, sizeof(buf), dir);
+     snprintf(buf, sizeof(buf), inst->ci->dir);
    b->apps = e_order_new(buf);
    e_order_update_callback_set(b->apps, _ibar_cb_app_change, b);
    _ibar_fill(b);
@@ -431,23 +451,49 @@
 {
    Evas_List *l;
    Config_Item *ci;
-   
-   for (l = ibar_config->items; l; l = l->next)
+ 
+   if (!id)
+     {
+       char buf[128];
+       int  num = 0;
+
+       /* Create id */
+       if (ibar_config->items)
+         {
+            char *p;
+            ci = evas_list_last(ibar_config->items)->data;
+            p = strrchr(ci->id, '.');
+            if (p) num = atoi(p + 1) + 1;
+         }
+       snprintf(buf, sizeof(buf), "%s.%d", _gadcon_class.name, num);
+
+       /* Create new config */
+       ci = E_NEW(Config_Item, 1);
+       ci->id = evas_stringshare_add(buf);
+       ci->show_label = 1;
+       ci->eap_label = 0;
+       ibar_config->items = evas_list_append(ibar_config->items, ci);
+     }
+   else
      {
-       ci = l->data;
-       if ((ci->id) && (ci->dir) && (!strcmp(ci->id, id)))
-         return ci;
-     }
-   ci = E_NEW(Config_Item, 1);
-   ci->id = evas_stringshare_add(id);
-   ci->show_label = 1;
-   ci->eap_label = 0;
-   ibar_config->items = evas_list_append(ibar_config->items, ci);
+       /* Find old config, or reuse supplied id */
+       for (l = ibar_config->items; l; l = l->next)
+         {
+            ci = l->data;
+            if ((ci->id) && (ci->dir) && (!strcmp(ci->id, id)))
+              return ci;
+         }
+       ci = E_NEW(Config_Item, 1);
+       ci->id = evas_stringshare_add(id);
+       ci->show_label = 1;
+       ci->eap_label = 0;
+       ibar_config->items = evas_list_append(ibar_config->items, ci);
+     }
    return ci;
 }
 
 void
-_ibar_config_update(void)
+_ibar_config_update(Config_Item *ci)
 {
    Evas_List *l;
    Evas_List *i;
@@ -455,35 +501,27 @@
    for (l = ibar_config->instances; l; l = l->next)
      {
        Instance *inst;
-       Config_Item *ci;
-       
+       char buf[4096];
+
        inst = l->data;
-       ci = _ibar_config_item_get(inst->gcc->id);
-       if ((inst->dir) && (ci->dir) && (strcmp(ci->dir, inst->dir)))
-         {
-            char buf[4096];
+       if (inst->ci != ci) continue;
             
-            evas_stringshare_del(inst->dir);
-            inst->dir = evas_stringshare_add(ci->dir);
-            _ibar_empty(inst->ibar);
-            if (inst->ibar->apps)
-              e_object_del(E_OBJECT(inst->ibar->apps));
-            if (inst->dir[0] != '/')
-              {
-                 const char *homedir;
-                 
-                 homedir = e_user_homedir_get();
-                 snprintf(buf, sizeof(buf), 
"%s/.e/e/applications/bar/%s/.order", homedir, inst->dir);
-              }
-            else
-              snprintf(buf, sizeof(buf), inst->dir);
-            inst->ibar->apps = e_order_new(buf);
-            _ibar_fill(inst->ibar);
-            _ibar_resize_handle(inst->ibar);
-            _gc_orient(inst->gcc);
+       _ibar_empty(inst->ibar);
+       if (inst->ibar->apps)
+         e_object_del(E_OBJECT(inst->ibar->apps));
+       if (inst->ci->dir[0] != '/')
+         {
+            const char *homedir;
+
+            homedir = e_user_homedir_get();
+            snprintf(buf, sizeof(buf), "%s/.e/e/applications/bar/%s/.order", 
homedir, inst->ci->dir);
          }
-       inst->ibar->show_label = ci->show_label;
-       inst->ibar->eap_label = ci->eap_label;
+       else
+         snprintf(buf, sizeof(buf), inst->ci->dir);
+       inst->ibar->apps = e_order_new(buf);
+       _ibar_fill(inst->ibar);
+       _ibar_resize_handle(inst->ibar);
+       _gc_orient(inst->gcc);
 
        for (i = inst->ibar->icons; i; i = i->next) 
          {
@@ -589,7 +627,7 @@
    evas_object_pass_events_set(ic->o_icon2, 1);
    evas_object_show(ic->o_icon2);
    
-   switch (ic->ibar->eap_label) 
+   switch (ic->ibar->inst->ci->eap_label) 
      {
       case 0: /* Eap Name */
        edje_object_part_text_set(ic->o_holder, "e.text.label", ic->app->name);
@@ -679,11 +717,9 @@
 _ibar_cb_menu_configuration(void *data, E_Menu *m, E_Menu_Item *mi)
 {
    IBar *b;
-   Config_Item *ci;
-   
+ 
    b = data;
-   ci = _ibar_config_item_get(b->inst->gcc->id);
-   _config_ibar_module(ci);
+   _config_ibar_module(b->inst->ci);
 }
 
 static void
@@ -714,7 +750,7 @@
    ev = event_info;
    ic = data;
    _ibar_icon_signal_emit(ic, "e,state,focused", "e");
-   if (ic->ibar->show_label)
+   if (ic->ibar->inst->ci->show_label)
      _ibar_icon_signal_emit(ic, "e,action,show,label", "e");
 }
 
@@ -727,7 +763,7 @@
    ev = event_info;
    ic = data;
    _ibar_icon_signal_emit(ic, "e,state,unfocused", "e");
-   if (ic->ibar->show_label)
+   if (ic->ibar->inst->ci->show_label)
      _ibar_icon_signal_emit(ic, "e,action,hide,label", "e");
 }
 
@@ -1222,19 +1258,6 @@
 EAPI int
 e_modapi_save(E_Module *m)
 {
-   Evas_List *l;
-   
-   for (l = ibar_config->instances; l; l = l->next)
-     {
-       Instance *inst;
-       Config_Item *ci;
-       
-       inst = l->data;
-       ci = _ibar_config_item_get(inst->gcc->id);
-       if (ci->dir) evas_stringshare_del(ci->dir);
-       /* FIXME: path should be recorded from setup */
-       ci->dir = evas_stringshare_add(inst->dir);
-     }
    e_config_domain_save("module.ibar", conf_edd, ibar_config);
    return 1;
 }
===================================================================
RCS file: /cvs/e/e17/apps/e/src/modules/ibar/e_mod_main.h,v
retrieving revision 1.38
retrieving revision 1.39
diff -u -3 -r1.38 -r1.39
--- e_mod_main.h        6 Jun 2006 15:21:48 -0000       1.38
+++ e_mod_main.h        16 Sep 2007 00:02:53 -0000      1.39
@@ -35,7 +35,7 @@
 EAPI int   e_modapi_info     (E_Module *m);
 EAPI int   e_modapi_about    (E_Module *m);
 
-void _ibar_config_update(void);
+void _ibar_config_update(Config_Item *ci);
 void _config_ibar_module(Config_Item *ci);
 extern Config *ibar_config;
 



-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to