Enlightenment CVS committal

Author  : raster
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_configure.c e_configure.h e_desklock.c e_int_menus.c 
        e_main.c e_widget_desk_preview.c 


Log Message:


start abstracting out config dialogs a bit...

===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_configure.c,v
retrieving revision 1.99
retrieving revision 1.100
diff -u -3 -r1.99 -r1.100
--- e_configure.c       19 May 2007 02:13:11 -0000      1.99
+++ e_configure.c       3 Jul 2007 15:19:09 -0000       1.100
@@ -1,18 +1,302 @@
 #include "e.h"
 
+typedef struct _E_Configure_CB E_Configure_CB;
+typedef struct _E_Configure_Category E_Configure_Category;
+typedef struct _E_Configure_Item E_Configure_Item;
+
+typedef struct _E_Configure_Cat E_Configure_Cat;
+typedef struct _E_Configure_It E_Configure_It;
+
 static void _e_configure_free(E_Configure *eco);
 static void _e_configure_cb_del_req(E_Win *win);
 static void _e_configure_cb_resize(E_Win *win);
 static void _e_configure_cb_close(void *data, void *data2);
-static E_Configure_Category *_e_configure_category_add(E_Configure *eco, char 
*label, char *icon);
+static E_Configure_Category *_e_configure_category_add(E_Configure *eco, const 
char *label, const char *icon);
 static void _e_configure_category_cb(void *data);
-static void _e_configure_item_add(E_Configure_Category *cat, char *label, char 
*icon, E_Config_Dialog *(*func) (E_Container *con));
+static void _e_configure_item_add(E_Configure_Category *cat, const char 
*label, const char *icon, const char *path);
 static void _e_configure_item_cb(void *data);
 static void _e_configure_focus_cb(void *data, Evas_Object *obj);
 static void _e_configure_keydown_cb(void *data, Evas *e, Evas_Object *obj, 
void *event);
 static void _e_configure_fill_cat_list(void *data);
 
+struct _E_Configure_CB
+{
+   E_Configure *eco;
+   const char *path;
+};
+
+struct _E_Configure_Category
+{
+   E_Configure *eco;
+   const char *label;
+   
+   Evas_List *items;
+};
+
+struct _E_Configure_Item
+{
+   E_Configure_CB *cb;
+   
+   const char *label;
+   const char *icon;
+};
+
+
+
+struct _E_Configure_Cat
+{
+   const char *cat;
+   int         pri;
+   const char *label;
+   const char *icon_file;
+   const char *icon;
+   Evas_List  *items;
+};
+
+struct _E_Configure_It
+{
+   const char        *item;
+   int                pri;
+   const char        *label;
+   const char        *icon_file;
+   const char        *icon;
+   E_Config_Dialog *(*func) (E_Container *con);
+};
+
 static E_Configure *_e_configure = NULL;
+static Evas_List *_e_configure_registry = NULL;
+
+EAPI void
+e_configure_registry_item_add(const char *path, int pri, const char *label, 
const char *icon_file, const char *icon, E_Config_Dialog *(*func) (E_Container 
*con))
+{
+   Evas_List *l;
+   char *cat;
+   const char *item;
+   E_Configure_It *eci;
+   
+   /* path is "category/item" */
+   cat = ecore_file_get_dir(path);
+   if (!cat) return;
+   item = ecore_file_get_file(path);
+   eci = E_NEW(E_Configure_It, 1);
+   if (!eci) goto done;
+   
+   eci->item = evas_stringshare_add(item);
+   eci->pri = pri;
+   eci->label = evas_stringshare_add(label);
+   if (icon_file) eci->icon_file = evas_stringshare_add(icon_file);
+   if (icon) eci->icon = evas_stringshare_add(icon);
+   eci->func = func;
+   
+   for (l = _e_configure_registry; l; l = l->next)
+     {
+       E_Configure_Cat *ecat;
+       
+       ecat = l->data;
+       if (!strcmp(cat, ecat->cat))
+         {
+            Evas_List *ll;
+            
+            for (ll = ecat->items; ll; ll = ll->next)
+              {
+                 E_Configure_It *eci2;
+                 
+                 eci2 = ll->data;
+                 if (eci2->pri > eci->pri)
+                   {
+                      ecat->items = 
evas_list_prepend_relative_list(ecat->items, eci, ll);
+                      goto done;
+                   }
+              }
+            ecat->items = evas_list_append(ecat->items, eci);
+            goto done;
+         }
+     }
+   done:
+   free(cat);
+}
+
+EAPI void
+e_configure_registry_item_del(const char *path)
+{
+   Evas_List *l;
+   char *cat;
+   const char *item;
+   
+   /* path is "category/item" */
+   cat = ecore_file_get_dir(path);
+   if (!cat) return;
+   item = ecore_file_get_file(path);
+   for (l = _e_configure_registry; l; l = l->next)
+     {
+       E_Configure_Cat *ecat;
+       
+       ecat = l->data;
+       if (!strcmp(cat, ecat->cat))
+         {
+            Evas_List *ll;
+            
+            for (ll = ecat->items; ll; ll = ll->next)
+              {
+                 E_Configure_It *eci;
+                 
+                 eci = ll->data;
+                 if (!strcmp(item, eci->item))
+                   {
+                      ecat->items = evas_list_remove_list(ecat->items, ll);
+                      evas_stringshare_del(eci->item);
+                      evas_stringshare_del(eci->label);
+                      evas_stringshare_del(eci->icon);
+                      free(eci);
+                      goto done;
+                   }
+              }
+            goto done;
+         }
+     }
+   done:
+   free(cat);
+}
+
+EAPI void
+e_configure_registry_category_add(const char *path, int pri, const char 
*label, const char *icon_file, const char *icon)
+{
+   E_Configure_Cat *ecat, *ecat2;
+   Evas_List *l;
+   
+   ecat = E_NEW(E_Configure_Cat, 1);
+   if (!ecat) return;
+   
+   ecat->cat = evas_stringshare_add(path);
+   ecat->pri = pri;
+   ecat->label = evas_stringshare_add(label);
+   if (icon_file) ecat->icon_file = evas_stringshare_add(icon_file);
+   if (icon) ecat->icon = evas_stringshare_add(icon);
+   for (l = _e_configure_registry; l; l = l->next)
+     {
+       E_Configure_Cat *ecat2;
+       
+       ecat2 = l->data;
+       if (ecat2->pri > ecat->pri)
+         {
+            _e_configure_registry = 
evas_list_prepend_relative_list(_e_configure_registry, ecat, l);
+            return;
+         }
+     }
+   _e_configure_registry = evas_list_append(_e_configure_registry, ecat);
+}
+
+EAPI void
+e_configure_registry_category_del(const char *path)
+{
+   Evas_List *l;
+   char *cat;
+   
+   cat = ecore_file_get_dir(path);
+   if (!cat) return;
+   for (l = _e_configure_registry; l; l = l->next)
+     {
+       E_Configure_Cat *ecat;
+       
+       ecat = l->data;
+        if (!strcmp(cat, ecat->cat))
+         {
+            if (ecat->items) goto done;
+            _e_configure_registry = 
evas_list_remove_list(_e_configure_registry, l);
+            evas_stringshare_del(ecat->cat);
+            evas_stringshare_del(ecat->label);
+            if (ecat->icon) evas_stringshare_del(ecat->icon);
+            free(ecat);
+            goto done;
+         }
+     }
+   done:
+   free(cat);
+}
+
+EAPI void
+e_configure_registry_call(const char *path, E_Container *con)
+{
+   Evas_List *l;
+   char *cat;
+   const char *item;
+   
+   /* path is "category/item" */
+   cat = ecore_file_get_dir(path);
+   if (!cat) return;
+   item = ecore_file_get_file(path);
+   for (l = _e_configure_registry; l; l = l->next)
+     {
+       E_Configure_Cat *ecat;
+       
+       ecat = l->data;
+       if (!strcmp(cat, ecat->cat))
+         {
+            Evas_List *ll;
+            
+            for (ll = ecat->items; ll; ll = ll->next)
+              {
+                 E_Configure_It *eci;
+                 
+                 eci = ll->data;
+                 printf("%s == %s\n", item, eci->item);
+                 if (!strcmp(item, eci->item))
+                   {
+                      if (eci->func) eci->func(con);
+                      goto done;
+                   }
+              }
+            goto done;
+         }
+     }
+   done:
+   free(cat);
+}
+
+EAPI int
+e_configure_registry_exists(const char *path)
+{
+   Evas_List *l;
+   char *cat;
+   const char *item;
+   int ret = 0;
+   
+   /* path is "category/item" */
+   cat = ecore_file_get_dir(path);
+   if (!cat) return;
+   item = ecore_file_get_file(path);
+   for (l = _e_configure_registry; l; l = l->next)
+     {
+       E_Configure_Cat *ecat;
+       
+       ecat = l->data;
+       if (!strcmp(cat, ecat->cat))
+         {
+            Evas_List *ll;
+
+            if (!item)
+              {
+                 ret = 1;
+                 goto done;
+              }
+            for (ll = ecat->items; ll; ll = ll->next)
+              {
+                 E_Configure_It *eci;
+                 
+                 eci = ll->data;
+                 if (!strcmp(item, eci->item))
+                   {
+                      ret = 1;
+                      goto done;
+                   }
+              }
+            goto done;
+         }
+     }
+   done:
+   free(cat);
+   return ret;
+}
 
 EAPI E_Configure *
 e_configure_show(E_Container *con) 
@@ -101,7 +385,7 @@
    e_widget_list_object_append(eco->o_list, of, 1, 1, 0.5);
    
    /* Item List */
-   of = e_widget_framelist_add(eco->evas, _("Configuration Items"), 1);
+   of = e_widget_framelist_add(eco->evas, _("Items"), 1);
    eco->item_list = e_widget_ilist_add(eco->evas, 32, 32, NULL);
    e_widget_ilist_selector_set(eco->item_list, 1);
    e_widget_ilist_go(eco->item_list);
@@ -133,6 +417,69 @@
    return eco;
 }
 
+EAPI void
+e_configure_init(void)
+{
+   /* FIXME: hardcoded - need to move these into modules - except modules 
config */
+   e_configure_registry_category_add("appearance", 10, _("Appearance"), NULL, 
"enlightenment/appearance");
+   e_configure_registry_item_add("appearance/wallpaper", 10, _("Wallpaper"), 
NULL, "enlightenment/background", e_int_config_wallpaper);
+   e_configure_registry_item_add("appearance/theme", 20, _("Theme"), NULL, 
"enlightenment/themes", e_int_config_theme);
+   e_configure_registry_item_add("appearance/colors", 30, _("Colors"), NULL, 
"enlightenment/colors", e_int_config_color_classes);
+   e_configure_registry_item_add("appearance/fonts", 40, _("Fonts"), NULL, 
"enlightenment/fonts", e_int_config_fonts);
+   e_configure_registry_item_add("appearance/borders", 50, _("Borders"), NULL, 
"enlightenment/windows", e_int_config_borders);
+   e_configure_registry_item_add("appearance/icon_theme", 60, _("Icon Theme"), 
NULL, "enlightenment/icon_theme", e_int_config_icon_themes);
+   e_configure_registry_item_add("appearance/mouse_cursor", 70, _("Mouse 
Cursor"), NULL, "enlightenment/mouse", e_int_config_cursor);
+   e_configure_registry_item_add("appearance/transitions", 80, 
_("Transitions"), NULL, "enlightenment/transitions", e_int_config_transitions);
+   e_configure_registry_item_add("appearance/startup", 90, _("Startup"), NULL, 
"enlightenment/startup", e_int_config_startup);
+   
+   e_configure_registry_category_add("applications", 20, _("Applications"), 
NULL, "enlightenment/applications");
+   e_configure_registry_item_add("applications/new_application", 10, _("New 
Application"), NULL, "enlightenment/add_application", e_int_config_apps_add);
+   e_configure_registry_item_add("applications/ibar_applications", 20, _("IBar 
Applications"), NULL, "enlightenment/ibar_applications", 
e_int_config_apps_ibar);
+   e_configure_registry_item_add("applications/restart_applications", 30, 
_("Restart Applications"), NULL, "enlightenment/restart_applications", 
e_int_config_apps_restart);
+   e_configure_registry_item_add("applications/startup_applications", 40, 
_("Startup Applications"), NULL, "enlightenment/startup_applications", 
e_int_config_apps_startup);
+   
+   e_configure_registry_category_add("screen", 30, _("Screen"), NULL, 
"enlightenment/screen_setup");
+   e_configure_registry_item_add("screen/virtual_desktops", 10, _("Virtual 
Desktops"), NULL, "enlightenment/desktops", e_int_config_desks);
+   e_configure_registry_item_add("screen/screen_resolution", 20, _("Screen 
Resolution"), NULL, "enlightenment/screen_resolution", e_int_config_display);
+   e_configure_registry_item_add("screen/screen_lock", 30, _("Screen Lock"), 
NULL, "enlightenment/desklock", e_int_config_desklock);
+   e_configure_registry_item_add("screen/screen_saver", 40, _("Screen Saver"), 
NULL, "enlightenment/screensaver", e_int_config_screensaver);
+   e_configure_registry_item_add("screen/power_management", 50, _("Power 
Management"), NULL, "enlightenment/power_management", e_int_config_dpms);
+   
+   e_configure_registry_category_add("keyboard_and_mouse", 40, _("Keyboard & 
Mouse"), NULL, "enlightenment/behavior");
+   e_configure_registry_item_add("keyboard_and_mouse/key_bindings", 10, _("Key 
Bindings"), NULL, "enlightenment/keys", e_int_config_keybindings);
+   e_configure_registry_item_add("keyboard_and_mouse/mouse_bindings", 20, 
_("Mouse Bindings"), NULL, "enlightenment/mouse_clean", 
e_int_config_mousebindings);
+   e_configure_registry_item_add("keyboard_and_mouse/mouse_acceleration", 30, 
_("Mouse Acceleration"), NULL, "enlightenment/mouse_clean", e_int_config_mouse);
+   
+   e_configure_registry_category_add("windows", 50, _("Windows"), NULL, 
"enlightenment/windows");
+   e_configure_registry_item_add("windows/window_display", 10, _("Window 
Display"), NULL, "enlightenment/windows", e_int_config_window_display);
+   e_configure_registry_item_add("windows/window_focus", 20, _("Window 
Focus"), NULL, "enlightenment/focus", e_int_config_focus);
+   e_configure_registry_item_add("windows/window_manipulation", 30, _("Window 
Manipulation"), NULL, "enlightenment/window_manipulation", 
e_int_config_window_manipulation);
+   
+   e_configure_registry_category_add("menus", 60, _("Menus"), NULL, 
"enlightenment/menus");
+   e_configure_registry_item_add("menus/favorites_menu", 10, _("Favorites 
Menu"), NULL, "enlightenment/favorites", e_int_config_apps_favs);   
+#if 0
+   e_configure_registry_item_add("menus/applications_menu", 20, _("Application 
Menus"), NULL, "enlightenment/applications", e_int_config_apps);
+#endif
+   e_configure_registry_item_add("menus/menu_settings", 30, _("Menu 
Settings"), NULL, "enlightenment/menu_settings", e_int_config_menus);
+   e_configure_registry_item_add("menus/client_list_menu", 40, _("Client List 
Menu"), NULL, "enlightenment/windows", e_int_config_clientlist);
+   
+   e_configure_registry_category_add("language", 70, _("Language"), NULL, 
"enlightenment/intl");
+   e_configure_registry_item_add("language/language_settings", 10, _("Language 
Settings"), NULL, "enlightenment/intl", e_int_config_intl);
+   e_configure_registry_item_add("language/input_method_settings", 20, 
_("Input Method Settings"), NULL, "enlightenment/imc", e_int_config_imc);
+   
+   e_configure_registry_category_add("advanced", 80, _("Advanced"), NULL, 
"enlightenment/advanced");
+   e_configure_registry_item_add("advanced/dialogs", 10, _("Dialogs"), NULL, 
"enlightenment/configuration", e_int_config_dialogs);
+   e_configure_registry_item_add("advanced/performance", 20, _("Performance"), 
NULL, "enlightenment/performance", e_int_config_performance);   
+   e_configure_registry_item_add("advanced/window_list", 30, _("Window List"), 
NULL, "enlightenment/winlist", e_int_config_winlist);
+   e_configure_registry_item_add("advanced/run_command", 40, _("Run Command"), 
NULL, "enlightenment/run", e_int_config_exebuf);
+   e_configure_registry_item_add("advanced/search_directories", 50, _("Search 
Directories"), NULL, "enlightenment/directories", e_int_config_paths);
+   e_configure_registry_item_add("advanced/file_icons", 60, _("File Icons"), 
NULL, "enlightenment/file_icons", e_int_config_mime);
+   
+   e_configure_registry_category_add("extensions", 90, _("Extensions"), NULL, 
"enlightenment/extensions");
+   e_configure_registry_item_add("extensions/modules", 10, _("Modules"), NULL, 
"enlightenment/modules", e_int_config_modules);
+   e_configure_registry_item_add("extensions/shelves", 20, _("Shelves"), NULL, 
"enlightenment/shelf", e_int_config_shelf);
+}
+
 static void 
 _e_configure_free(E_Configure *eco) 
 {
@@ -157,7 +504,11 @@
             if (ci->icon)
               evas_stringshare_del(ci->icon);
             if (ci->cb)
-              free(ci->cb);
+              {
+                 if (ci->cb->path)
+                   evas_stringshare_del(ci->cb->path);
+                 free(ci->cb);
+              }
             cat->items = evas_list_remove_list(cat->items, cat->items);
             E_FREE(ci);
          }
@@ -206,7 +557,7 @@
 }
 
 static E_Configure_Category *
-_e_configure_category_add(E_Configure *eco, char *label, char *icon)
+_e_configure_category_add(E_Configure *eco, const char *label, const char 
*icon)
 {
    Evas_Object *o = NULL;
    E_Configure_Category *cat;
@@ -267,7 +618,7 @@
 }
 
 static void
-_e_configure_item_add(E_Configure_Category *cat, char *label, char *icon, 
E_Config_Dialog *(*func) (E_Container *con))
+_e_configure_item_add(E_Configure_Category *cat, const char *label, const char 
*icon, const char *path)
 {
    E_Configure_Item *ci;
    E_Configure_CB *cb;
@@ -277,11 +628,10 @@
    ci = E_NEW(E_Configure_Item, 1);
    cb = E_NEW(E_Configure_CB, 1);
    cb->eco = cat->eco;
-   cb->func = func;
+   cb->path = evas_stringshare_add(path);
    ci->cb = cb;
    ci->label = evas_stringshare_add(label);
-   if (icon)
-     ci->icon = evas_stringshare_add(icon);
+   if (icon) ci->icon = evas_stringshare_add(icon);
    cat->items = evas_list_append(cat->items, ci);
 }
 
@@ -294,7 +644,7 @@
    ci = data;
    if (!ci) return;
    cb = ci->cb;
-   cb->func(cb->eco->con);
+   if (cb->path) e_configure_registry_call(cb->path, cb->eco->con);
 }
 
 static void 
@@ -383,6 +733,7 @@
    E_Configure *eco;
    Evas_Coord mw, mh;
    E_Configure_Category *cat;
+   Evas_List *l;
 
    eco = data;
    if (!eco) return;
@@ -390,70 +741,27 @@
    evas_event_freeze(evas_object_evas_get(eco->cat_list));
    edje_freeze();
    e_widget_ilist_freeze(eco->cat_list);
-   
-   /* Add "Categories" & "Items" Here */
-   cat = _e_configure_category_add(eco, _("Appearance"), 
"enlightenment/appearance");
-   _e_configure_item_add(cat, _("Wallpaper"), "enlightenment/background", 
e_int_config_wallpaper);
-   _e_configure_item_add(cat, _("Theme"), "enlightenment/themes", 
e_int_config_theme);
-   _e_configure_item_add(cat, _("Colors"), "enlightenment/colors", 
e_int_config_color_classes);
-   _e_configure_item_add(cat, _("Fonts"), "enlightenment/fonts", 
e_int_config_fonts);
-   _e_configure_item_add(cat, _("Borders"), "enlightenment/windows", 
e_int_config_borders);
-   _e_configure_item_add(cat, _("Icon Theme"), "enlightenment/icon_theme", 
e_int_config_icon_themes);
-   _e_configure_item_add(cat, _("Mouse Cursor"), "enlightenment/mouse", 
e_int_config_cursor);
-   _e_configure_item_add(cat, _("Transitions"), "enlightenment/transitions", 
e_int_config_transitions);
-   _e_configure_item_add(cat, _("Startup"), "enlightenment/startup", 
e_int_config_startup);
-
-   cat = _e_configure_category_add(eco, _("Applications"), 
"enlightenment/applications");
-   _e_configure_item_add(cat, _("New Application"), 
"enlightenment/add_application", e_int_config_apps_add);
-   _e_configure_item_add(cat, _("IBar Applications"), 
"enlightenment/ibar_applications", e_int_config_apps_ibar);
-   _e_configure_item_add(cat, _("Restart Applications"), 
"enlightenment/restart_applications", e_int_config_apps_restart);
-   _e_configure_item_add(cat, _("Startup Applications"), 
"enlightenment/startup_applications", e_int_config_apps_startup);
-   
-   cat = _e_configure_category_add(eco, _("Screen"), 
"enlightenment/screen_setup");
-   _e_configure_item_add(cat, _("Virtual Desktops"), "enlightenment/desktops", 
e_int_config_desks);
-   _e_configure_item_add(cat, _("Screen Resolution"), 
"enlightenment/screen_resolution", e_int_config_display);
-   _e_configure_item_add(cat, _("Screen Lock"), "enlightenment/desklock", 
e_int_config_desklock);
-   _e_configure_item_add(cat, _("Screen Saver"), "enlightenment/screensaver", 
e_int_config_screensaver);
-   _e_configure_item_add(cat, _("Power Management"), 
"enlightenment/power_management", e_int_config_dpms);
-
-   cat = _e_configure_category_add(eco, _("Keyboard & Mouse"), 
"enlightenment/behavior");
-   _e_configure_item_add(cat, _("Key Bindings"), "enlightenment/keys", 
e_int_config_keybindings);
-   _e_configure_item_add(cat, _("Mouse Bindings"), 
"enlightenment/mouse_clean", e_int_config_mousebindings);
-   _e_configure_item_add(cat, _("Mouse Acceleration"), 
"enlightenment/mouse_clean", e_int_config_mouse);
-
-   cat = _e_configure_category_add(eco, _("Windows"), "enlightenment/windows");
-   _e_configure_item_add(cat, _("Window Display"), "enlightenment/windows", 
e_int_config_window_display);
-   _e_configure_item_add(cat, _("Window Focus"), "enlightenment/focus", 
e_int_config_focus);
-   _e_configure_item_add(cat, _("Window Manipulation"), 
"enlightenment/window_manipulation", e_int_config_window_manipulation);
-
-   cat = _e_configure_category_add(eco, _("Menus"), "enlightenment/menus");
-   _e_configure_item_add(cat, _("Favorites Menu"), "enlightenment/favorites", 
e_int_config_apps_favs);   
-   #if 0
-   _e_configure_item_add(cat, _("Application Menus"), 
"enlightenment/applications", e_int_config_apps);
-   #endif
-   _e_configure_item_add(cat, _("Menu Settings"), 
"enlightenment/menu_settings", e_int_config_menus);
-   _e_configure_item_add(cat, _("Client List Menu"), "enlightenment/windows", 
e_int_config_clientlist);
-
-   cat = _e_configure_category_add(eco, _("Language"), "enlightenment/intl");
-   _e_configure_item_add(cat, _("Language Settings"), "enlightenment/intl", 
e_int_config_intl);
-   _e_configure_item_add(cat, _("Input Method Settings"), "enlightenment/imc", 
e_int_config_imc);
-
-   cat = _e_configure_category_add(eco, _("Advanced"), 
"enlightenment/advanced");
-   _e_configure_item_add(cat, _("Dialogs"), "enlightenment/configuration", 
e_int_config_dialogs);
-   _e_configure_item_add(cat, _("Performance"), "enlightenment/performance", 
e_int_config_performance);   
-   _e_configure_item_add(cat, _("Window List"), "enlightenment/winlist", 
e_int_config_winlist);
-   _e_configure_item_add(cat, _("Run Command"), "enlightenment/run", 
e_int_config_exebuf);
-   _e_configure_item_add(cat, _("Search Directories"), 
"enlightenment/directories", e_int_config_paths);
-   _e_configure_item_add(cat, _("File Icons"), "enlightenment/file_icons", 
e_int_config_mime);
-
-   cat = _e_configure_category_add(eco, _("Extensions"), 
"enlightenment/extensions");
-   _e_configure_item_add(cat, _("Modules"), "enlightenment/modules", 
e_int_config_modules);
-   _e_configure_item_add(cat, _("Shelves"), "enlightenment/shelf", 
e_int_config_shelf);
-
-   /* FIXME: we should have a way for modules to hook in here and add their 
own entries 
-    * 
-    * cat = _e_configure_category_add(eco, _("Extension Configuration"), 
"enlightenment/extension_config");
-    */
+
+   for (l = _e_configure_registry; l; l = l->next)
+     {
+       Evas_List *ll;
+       E_Configure_Cat *ecat;
+       
+       ecat = l->data;
+       if (ecat->items)
+         {
+            cat = _e_configure_category_add(eco, ecat->label, ecat->icon);
+            for (ll = ecat->items; ll; ll = ll->next)
+              {
+                 E_Configure_It *eci;
+                 char buf[1024];
+                 
+                 eci = ll->data;
+                 snprintf(buf, sizeof(buf), "%s/%s", ecat->cat, eci->item);
+                 _e_configure_item_add(cat, eci->label, eci->icon, buf);
+              }
+         }
+     }
    
    e_widget_ilist_go(eco->cat_list);
    e_widget_min_size_get(eco->cat_list, &mw, &mh);
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_configure.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -3 -r1.7 -r1.8
--- e_configure.h       26 Nov 2006 16:10:48 -0000      1.7
+++ e_configure.h       3 Jul 2007 15:19:09 -0000       1.8
@@ -1,10 +1,6 @@
 #ifdef E_TYPEDEFS
 
 typedef struct _E_Configure E_Configure;
-typedef struct _E_Configure_CB E_Configure_CB;
-
-typedef struct _E_Configure_Category E_Configure_Category;
-typedef struct _E_Configure_Item E_Configure_Item;
 
 #else
 #ifndef E_CONFIGURE_H
@@ -29,29 +25,15 @@
    Evas_List *cats;
 };
 
-struct _E_Configure_CB 
-{
-   E_Configure *eco;
-   E_Config_Dialog *(*func) (E_Container *con);
-};
-
-struct _E_Configure_Category 
-{
-   E_Configure *eco;
-   const char *label;
-   
-   Evas_List *items;
-};
-
-struct _E_Configure_Item 
-{
-   E_Configure_CB *cb;
-   
-   const char *label;
-   const char *icon;
-};
+EAPI void e_configure_registry_item_add(const char *path, int pri, const char 
*label, const char *icon_file, const char *icon, E_Config_Dialog *(*func) 
(E_Container *con));
+EAPI void e_configure_registry_item_del(const char *path);
+EAPI void e_configure_registry_category_add(const char *path, int pri, const 
char *label, const char *icon_file, const char *icon);
+EAPI void e_configure_registry_category_del(const char *path);
+EAPI void e_configure_registry_call(const char *path, E_Container *con);
+EAPI int  e_configure_registry_exists(const char *path);
 
 EAPI E_Configure *e_configure_show(E_Container *con);
-
+EAPI void e_configure_init(void);
+    
 #endif
 #endif
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_desklock.c,v
retrieving revision 1.41
retrieving revision 1.42
diff -u -3 -r1.41 -r1.42
--- e_desklock.c        28 May 2007 11:15:04 -0000      1.41
+++ e_desklock.c        3 Jul 2007 15:19:09 -0000       1.42
@@ -158,11 +158,7 @@
            
            zone = e_util_zone_current_get(e_manager_current_get());
            if (zone)
-             {
-                E_Config_Dialog *cfd;
-                
-                cfd = e_int_config_desklock(zone->container);
-             }
+             e_configure_registry_call("screen/screen_lock", zone->container);
            return 0;
         }
 #ifdef HAVE_PAM
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_menus.c,v
retrieving revision 1.215
retrieving revision 1.216
diff -u -3 -r1.215 -r1.216
--- e_int_menus.c       12 May 2007 22:40:03 -0000      1.215
+++ e_int_menus.c       3 Jul 2007 15:19:09 -0000       1.216
@@ -714,10 +714,7 @@
 static void
 _e_int_menus_desk_item_cb(void *data, E_Menu *m, E_Menu_Item *mi)
 {
-   E_Container *con;
-   
-   con = e_container_current_get(e_manager_current_get());
-   e_int_config_desks(con);
+   e_configure_registry_call("screen/virtual_desktops", m->zone->container);
 }
 
 static void
@@ -731,33 +728,25 @@
 static void
 _e_int_menus_background_item_cb(void *data, E_Menu *m, E_Menu_Item *mi)
 {
-   e_int_config_wallpaper(m->zone->container);
+   e_configure_registry_call("appearance/wallpaper", m->zone->container);
 }
 
 static void
 _e_int_menus_theme_item_cb(void *data, E_Menu *m, E_Menu_Item *mi)
 {
-   e_int_config_theme(m->zone->container);
+   e_configure_registry_call("appearance/theme", m->zone->container);
 }
 
 static void
 _e_int_menus_module_item_cb(void *data, E_Menu *m, E_Menu_Item *mi)
 {
-   e_int_config_modules(m->zone->container);
+   e_configure_registry_call("extensions/modules", m->zone->container);
 }
 
 static void
 _e_int_menus_shelf_item_cb(void *data, E_Menu *m, E_Menu_Item *mi)
 {
-   e_int_config_shelf(m->zone->container);
-}
-
-static void
-_e_int_menus_applications_item_cb(void *data, E_Menu *m, E_Menu_Item *mi)
-{
-#if 0
-   e_int_config_apps(m->zone->container);
-#endif
+   e_configure_registry_call("extensions/shelves", m->zone->container);
 }
 
 static void
@@ -776,32 +765,37 @@
    mi = e_menu_item_new(m);
    e_menu_item_separator_set(mi, 1);
 
-   mi = e_menu_item_new(m);
-   e_menu_item_label_set(mi, _("Wallpaper"));
-   e_util_menu_item_edje_icon_set(mi, "enlightenment/background");
-   e_menu_item_callback_set(mi, _e_int_menus_background_item_cb, NULL);
-
-   mi = e_menu_item_new(m);
-   e_menu_item_label_set(mi, _("Theme"));
-   e_util_menu_item_edje_icon_set(mi, "enlightenment/themes");
-   e_menu_item_callback_set(mi, _e_int_menus_theme_item_cb, NULL);
+   if (e_configure_registry_exists("appearance/wallpaper"))
+     {
+       mi = e_menu_item_new(m);
+       e_menu_item_label_set(mi, _("Wallpaper"));
+       e_util_menu_item_edje_icon_set(mi, "enlightenment/background");
+       e_menu_item_callback_set(mi, _e_int_menus_background_item_cb, NULL);
+     }
+   
+   if (e_configure_registry_exists("appearance/theme"))
+     {
+       mi = e_menu_item_new(m);
+       e_menu_item_label_set(mi, _("Theme"));
+       e_util_menu_item_edje_icon_set(mi, "enlightenment/themes");
+       e_menu_item_callback_set(mi, _e_int_menus_theme_item_cb, NULL);
+     }
 
-   mi = e_menu_item_new(m);
-   e_menu_item_label_set(mi, _("Modules"));
-   e_util_menu_item_edje_icon_set(mi, "enlightenment/modules");
-   e_menu_item_callback_set(mi, _e_int_menus_module_item_cb, NULL);
+   if (e_configure_registry_exists("extensions/modules"))
+     {
+       mi = e_menu_item_new(m);
+       e_menu_item_label_set(mi, _("Modules"));
+       e_util_menu_item_edje_icon_set(mi, "enlightenment/modules");
+       e_menu_item_callback_set(mi, _e_int_menus_module_item_cb, NULL);
+     }
 
-   mi = e_menu_item_new(m);
-   e_menu_item_label_set(mi, _("Shelves"));
-   e_util_menu_item_edje_icon_set(mi, "enlightenment/shelf");
-   e_menu_item_callback_set(mi, _e_int_menus_shelf_item_cb, NULL);
-   
-   #if 0
-   mi = e_menu_item_new(m);
-   e_menu_item_label_set(mi, _("Application Menus"));
-   e_util_menu_item_edje_icon_set(mi, "enlightenment/applications");
-   e_menu_item_callback_set(mi, _e_int_menus_applications_item_cb, NULL);
-   #endif
+   if (e_configure_registry_exists("extensions/shelves"))
+     {
+       mi = e_menu_item_new(m);
+       e_menu_item_label_set(mi, _("Shelves"));
+       e_util_menu_item_edje_icon_set(mi, "enlightenment/shelf");
+       e_menu_item_callback_set(mi, _e_int_menus_shelf_item_cb, NULL);
+     }
    
    l = evas_hash_find(_e_int_menus_augmentation, "config");
    if (l)
@@ -1635,8 +1629,5 @@
 static void 
 _e_int_menus_shelves_del_cb(void *data, E_Menu *m, E_Menu_Item *mi) 
 {
-   E_Container *con;
-   
-   con = e_container_current_get(e_manager_current_get());
-   e_int_config_shelf(con);
+   e_configure_registry_call("extensions/shelves", m->zone->container);
 }
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_main.c,v
retrieving revision 1.223
retrieving revision 1.224
diff -u -3 -r1.223 -r1.224
--- e_main.c    29 May 2007 11:25:54 -0000      1.223
+++ e_main.c    3 Jul 2007 15:19:09 -0000       1.224
@@ -415,6 +415,9 @@
    
    ecore_x_io_error_handler_set(_e_main_cb_x_fatal, NULL);
 
+   TS("configure");
+   e_configure_init();
+   
    TS("x hints");
    /* Init window manager hints */
    e_hints_init();
===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_widget_desk_preview.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -3 -r1.12 -r1.13
--- e_widget_desk_preview.c     8 Apr 2007 21:00:30 -0000       1.12
+++ e_widget_desk_preview.c     3 Jul 2007 15:19:09 -0000       1.13
@@ -259,6 +259,7 @@
        E_Container *con;
        
        con = e_container_current_get(e_manager_current_get());
+       /* FIXME: this isn't abstracted like the rest of the config. */
        e_int_config_desk(con, dd->container, dd->zone, dd->x, dd->y);
      }
 }



-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to