Enlightenment CVS committal

Author  : shorne
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_int_config_paths.c 


Log Message:
Don't actually make path changes until someone hits apply

===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_config_paths.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- e_int_config_paths.c        31 Jul 2006 18:31:11 -0000      1.4
+++ e_int_config_paths.c        1 Aug 2006 04:26:09 -0000       1.5
@@ -11,7 +11,7 @@
 static int _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data 
*cfdata);
 static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, 
E_Config_Dialog_Data *cfdata);
 
-static void _ilist_update(Evas_Object *obj, E_Path *old, E_Path *new);
+static void _ilist_update(Evas_Object *obj, CFPath_Change_Data *old, 
CFPath_Change_Data *new);
 static void _ilist_path_cb_change(void *data);
 
 struct _E_Path_Pair
@@ -23,6 +23,8 @@
 struct _CFPath_Change_Data
 {
    E_Path              *path;
+   Evas_List           *new_user_path;
+   int                  dirty;
    E_Config_Dialog_Data        *cfdata;
 };
      
@@ -31,7 +33,7 @@
    E_Config_Dialog *cfd;
 
    /* Current data */
-   E_Path              *cur_path;
+   CFPath_Change_Data  *cur_pcd;
 
    Evas_List           *pcd_list;
    E_Path_Pair         *paths_available;
@@ -108,7 +110,18 @@
 {
    while (cfdata->pcd_list)
      {
-       free(cfdata->pcd_list->data);
+       CFPath_Change_Data *pcd;
+
+       pcd = cfdata->pcd_list->data;
+       while (pcd->new_user_path)
+         {
+            const char *dir;
+            
+            dir = pcd->new_user_path->data;
+            evas_stringshare_del(dir);
+            pcd->new_user_path = evas_list_remove_list(pcd->new_user_path, 
pcd->new_user_path);
+         }
+       free(pcd);
        cfdata->pcd_list = evas_list_remove_list(cfdata->pcd_list, 
cfdata->pcd_list);
      }
    free(cfdata->paths_available);
@@ -118,10 +131,36 @@
 static int
 _basic_apply_data(E_Config_Dialog *cfd, E_Config_Dialog_Data *cfdata)
 {       
+   Evas_List   *l;
+   Evas_List   *ll;
+   
    _ilist_update(      cfdata->gui.user_list,
-                       cfdata->cur_path,
+                       cfdata->cur_pcd,
                        NULL);
-   e_config_save_queue(); 
+
+   for (l = cfdata->pcd_list; l; l = l->next)
+     {
+       CFPath_Change_Data *pcd;
+       
+       pcd = l->data;
+       if (pcd->new_user_path)
+         {
+            e_path_user_path_clear(pcd->path);
+            for (ll = pcd->new_user_path; ll; ll = ll->next)
+              {
+                 const char *dir;
+
+                 dir = ll->data;
+                 e_path_user_path_append(pcd->path, dir);
+              }
+         }
+       else if (*(pcd->path->user_dir_list) && pcd->dirty)
+         {
+            e_path_user_path_clear(pcd->path);
+         }
+     }
+   e_config_save_queue();
+   
    return 1;
 }
 
@@ -178,59 +217,90 @@
 {
    CFPath_Change_Data *pcd;
    Evas_List *default_list;
-   int i;
+   Evas_List *l;
    
    pcd = data;
    default_list = pcd->path->default_dir_list;
 
    /* Update Default List */   
    e_widget_ilist_clear(pcd->cfdata->gui.default_list);
-   for (i = 0; i < evas_list_count(default_list); i++)
+   for (l = default_list; l; l = l->next)
      {
        const char *dir;
 
-       dir = ((E_Path_Dir *)evas_list_nth(default_list, i))->dir;
+       dir = ((E_Path_Dir *)l->data)->dir;
        e_widget_ilist_append(pcd->cfdata->gui.default_list, NULL, dir, NULL, 
NULL, NULL);
      }
    e_widget_ilist_go(pcd->cfdata->gui.default_list);
 
    _ilist_update(      pcd->cfdata->gui.user_list,
-                       pcd->cfdata->cur_path,
-                       pcd->path);
+                       pcd->cfdata->cur_pcd, //Path data to save
+                       pcd); //New Path to show
 
-   pcd->cfdata->cur_path = pcd->path;
+   pcd->cfdata->cur_pcd = pcd;
 }
 
 static void 
-_ilist_update(Evas_Object *obj, E_Path *old, E_Path *new)
+_ilist_update(Evas_Object *obj, CFPath_Change_Data *old, CFPath_Change_Data 
*new)
 {
    /* Save current data to old path */
    if (old)
      {
        int i;
        
-       e_path_user_path_clear(old);
+       old->dirty = 1;
+       while (old->new_user_path)
+         {
+            const char *dir;
+            
+            dir = old->new_user_path->data;
+            evas_stringshare_del(dir);
+            old->new_user_path = evas_list_remove_list(old->new_user_path, 
old->new_user_path);
+         }
+       
        for (i = 0; i < e_widget_config_list_count(obj); i++)
          {
             const char *dir;
             dir = e_widget_config_list_nth_get(obj, i);
-            e_path_user_path_append(old, dir);
+            old->new_user_path = evas_list_append(old->new_user_path, 
evas_stringshare_add(dir)); 
          }
      }
 
+   if (!new) return;
+   
    /* Fill list with selected data */
-   if (new)
+   e_widget_disabled_set(obj, 0);
+   e_widget_config_list_clear(obj);
+   
+   if (new->new_user_path)
+     {
+       Evas_List *l;
+       Evas_List *user_path;
+       
+       user_path = new->new_user_path;
+       
+       for (l = user_path; l; l = l->next)
+         {
+            const char *dir;
+            
+            dir = l->data;
+            e_widget_config_list_append(obj, dir);
+         }
+     }
+   else if (*(new->path->user_dir_list) && !new->dirty)
      {
        Evas_List *l;
+       Evas_List *user_path;
        
-       e_widget_disabled_set(obj, 0);
-       e_widget_config_list_clear(obj);
-       for (l = *(new->user_dir_list); l; l = l->next)
+       user_path = *(new->path->user_dir_list);
+
+       for (l = user_path; l; l = l->next)
          {
             E_Path_Dir *epd;
+            
             epd = l->data;
             e_widget_config_list_append(obj, epd->dir);
          }
-     }
+     } 
 }
 



-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to