usability: sort menus, always keep same order.
authorGustavo Sverzut Barbieri <barbieri@gmail.com>
Sun, 19 Apr 2009 06:21:35 +0000 (06:21 +0000)
committerGustavo Sverzut Barbieri <barbieri@gmail.com>
Sun, 19 Apr 2009 06:21:35 +0000 (06:21 +0000)
maybe this is too much for a feature freeze phase, but this is
annoying for users, sometimes your menu looks one way, sometimes
another. Now it will always look the same, alphabetically ordered.

If it breaks anything before Monday revert!

SVN revision: 40205

12 files changed:
src/bin/e_configure.c
src/bin/e_int_menus.c
src/bin/e_int_menus.h
src/modules/conf/e_mod_main.c
src/modules/conf_shelves/e_mod_main.c
src/modules/conf_theme/e_mod_main.c
src/modules/conf_wallpaper/e_mod_main.c
src/modules/conf_wallpaper2/e_mod_main.c
src/modules/exebuf/e_mod_main.c
src/modules/fileman/e_mod_main.c
src/modules/gadman/e_mod_main.c
src/modules/syscon/e_mod_main.c

index f407807..0307baa 100644 (file)
@@ -8,6 +8,25 @@ static void _e_configure_registry_item_full_add(const char *path, int pri, const
 EAPI Eina_List *e_configure_registry = NULL;
 
 static Eina_List *handlers = NULL;
+static E_Int_Menu_Augmentation *maug = NULL;
+
+
+static void
+_e_configure_menu_module_item_cb(void *data, E_Menu *m, E_Menu_Item *mi)
+{
+   e_int_config_modules(m->zone->container, NULL);
+}
+
+static void
+_e_configure_menu_add(void *data, E_Menu *m)
+{
+   E_Menu_Item *mi;
+
+   mi = e_menu_item_new(m);
+   e_menu_item_label_set(mi, _("Modules"));
+   e_util_menu_item_theme_icon_set(mi, "preferences-plugin");
+   e_menu_item_callback_set(mi, _e_configure_menu_module_item_cb, NULL);
+}
 
 EAPI void
 e_configure_init(void)
@@ -15,6 +34,9 @@ e_configure_init(void)
    e_configure_registry_category_add("extensions", 90, _("Extensions"), NULL, "preferences-extensions");
    e_configure_registry_item_add("extensions/modules", 10, _("Modules"), NULL, "preferences-plugin", e_int_config_modules);
 
+   maug = e_int_menus_menu_augmentation_add_sorted
+     ("config/1", _("Modules"), _e_configure_menu_add, NULL, NULL, NULL);
+
    handlers = eina_list_append
      (handlers, ecore_event_handler_add
          (EFREET_EVENT_DESKTOP_LIST_CHANGE, _e_configure_cb_efreet_desktop_list_change, NULL));
index 36ec0d0..16a2d3b 100644 (file)
@@ -334,11 +334,12 @@ e_int_menus_lost_clients_new(void)
 }
 
 EAPI E_Int_Menu_Augmentation *
-e_int_menus_menu_augmentation_add(const char *menu,
-                                 void (*func_add) (void *data, E_Menu *m),
-                                 void *data_add,
-                                 void (*func_del) (void *data, E_Menu *m),
-                                 void *data_del)
+e_int_menus_menu_augmentation_add_sorted(const char *menu,
+                                        const char *sort_key,
+                                        void (*func_add) (void *data, E_Menu *m),
+                                        void *data_add,
+                                        void (*func_del) (void *data, E_Menu *m),
+                                        void *data_del)
 {
    E_Int_Menu_Augmentation *maug;
    Eina_List *l;
@@ -347,6 +348,8 @@ e_int_menus_menu_augmentation_add(const char *menu,
    maug = E_NEW(E_Int_Menu_Augmentation, 1);
    if (!maug) return NULL;
 
+   maug->sort_key = eina_stringshare_add(sort_key);
+
    maug->add.func = func_add;
    maug->add.data = data_add;
 
@@ -365,7 +368,27 @@ e_int_menus_menu_augmentation_add(const char *menu,
        old = 0;
      }
 
-   l = eina_list_append(l, maug);
+   if ((!l) || (!maug->sort_key))
+     l = eina_list_append(l, maug);
+   else
+     {
+       E_Int_Menu_Augmentation *m2;
+       Eina_List *l2;
+
+       /* keep list sorted, those missing sort_key at the end. */
+       EINA_LIST_FOREACH(l, l2, m2)
+         {
+            if (!m2->sort_key)
+              break;
+            if (strcasecmp(maug->sort_key, m2->sort_key) < 0)
+              break;
+         }
+
+       if (l2)
+         l = eina_list_prepend_relative_list(l, maug, l2);
+       else
+         l = eina_list_append(l, maug);
+     }
 
    if (old)
      eina_hash_modify(_e_int_menus_augmentation, menu, l);
@@ -375,6 +398,17 @@ e_int_menus_menu_augmentation_add(const char *menu,
    return maug;
 }
 
+EAPI E_Int_Menu_Augmentation *
+e_int_menus_menu_augmentation_add(const char *menu,
+                                 void (*func_add) (void *data, E_Menu *m),
+                                 void *data_add,
+                                 void (*func_del) (void *data, E_Menu *m),
+                                 void *data_del)
+{
+   return e_int_menus_menu_augmentation_add_sorted
+     (menu, NULL, func_add, data_add, func_del, data_del);
+}
+
 EAPI void
 e_int_menus_menu_augmentation_del(const char *menu, E_Int_Menu_Augmentation *maug)
 {
@@ -382,6 +416,7 @@ e_int_menus_menu_augmentation_del(const char *menu, E_Int_Menu_Augmentation *mau
 
    if (!_e_int_menus_augmentation)
      {
+       eina_stringshare_del(maug->sort_key);
        free(maug);
        return;
      }
@@ -396,6 +431,7 @@ e_int_menus_menu_augmentation_del(const char *menu, E_Int_Menu_Augmentation *mau
        else
          eina_hash_del_by_key(_e_int_menus_augmentation, menu);
      }
+   eina_stringshare_del(maug->sort_key);
    free(maug);
 }
 
@@ -731,12 +767,6 @@ _e_int_menus_virtuals_icon_cb(void *data, E_Menu *m, E_Menu_Item *mi)
 }
 
 static void
-_e_int_menus_module_item_cb(void *data, E_Menu *m, E_Menu_Item *mi)
-{
-   e_configure_registry_call("extensions/modules", m->zone->container, NULL);
-}
-
-static void
 _e_int_menus_config_pre_cb(void *data, E_Menu *m)
 {
    E_Menu_Item *mi;
@@ -752,14 +782,6 @@ _e_int_menus_config_pre_cb(void *data, E_Menu *m)
        e_menu_item_separator_set(mi, 1);
      }
 
-   if (e_configure_registry_exists("extensions/modules"))
-     {
-       mi = e_menu_item_new(m);
-       e_menu_item_label_set(mi, _("Modules"));
-       e_util_menu_item_theme_icon_set(mi, "preferences-plugin");
-       e_menu_item_callback_set(mi, _e_int_menus_module_item_cb, NULL);
-     }
-
    l = _e_int_menus_augmentation_find("config/1");
    if (l) _e_int_menus_augmentation_add(m, l);
 
index ed269ad..95b44f3 100644 (file)
@@ -30,6 +30,7 @@ typedef struct _E_Int_Menu_Augmentation E_Int_Menu_Augmentation;
 
 struct _E_Int_Menu_Augmentation
 {
+   const char *sort_key;
    struct {
       void (*func)(void *data, E_Menu *m);
       void *data;
@@ -51,6 +52,12 @@ EAPI E_Int_Menu_Augmentation *e_int_menus_menu_augmentation_add(const char *menu
                                                                void *data_add,
                                                                void (*func_del) (void *data, E_Menu *m),
                                                                void *data_del);
+EAPI E_Int_Menu_Augmentation *e_int_menus_menu_augmentation_add_sorted(const char *menu,
+                                                                      const char *sort_key,
+                                                                      void (*func_add) (void *data, E_Menu *m),
+                                                                      void *data_add,
+                                                                      void (*func_del) (void *data, E_Menu *m),
+                                                                      void *data_del);
 EAPI void                     e_int_menus_menu_augmentation_del(const char *menu,
                                                                E_Int_Menu_Augmentation *maug);
     
index 8074895..e2de432 100644 (file)
@@ -139,7 +139,8 @@ e_modapi_init(E_Module *m)
        e_action_predef_name_set(_("Launch"), _("Settings Panel"), "configuration",
                                 NULL, NULL, 0);
      }
-   maug = e_int_menus_menu_augmentation_add("config/0", _e_mod_menu_add, NULL, NULL, NULL);
+   maug = e_int_menus_menu_augmentation_add_sorted
+     ("config/0", _("Settings Panel"), _e_mod_menu_add, NULL, NULL, NULL);
    e_module_delayed_set(m, 1);
    e_gadcon_provider_register(&_gadcon_class);
    return m;
index 60fb9e7..a89d101 100644 (file)
@@ -37,7 +37,8 @@ e_modapi_init(E_Module *m)
 {
    e_configure_registry_category_add("extensions", 90, _("Extensions"), NULL, "preferences-extensions");
    e_configure_registry_item_add("extensions/shelves", 20, _("Shelves"), NULL, "preferences-desktop-shelf", e_int_config_shelf);
-   maug = e_int_menus_menu_augmentation_add("config/1", _e_mod_menu_add, NULL, NULL, NULL);
+   maug = e_int_menus_menu_augmentation_add_sorted
+     ("config/1", _("Shelves"), _e_mod_menu_add, NULL, NULL, NULL);
 
    conf_module = m;
    e_module_delayed_set(m, 1);
index 4808171..1e9018c 100644 (file)
@@ -37,7 +37,7 @@ e_modapi_init(E_Module *m)
 {
    e_configure_registry_category_add("appearance", 10, _("Look"), NULL, "preferences-appearance");
    e_configure_registry_item_add("appearance/theme", 20, _("Theme"), NULL, "preferences-desktop-theme", e_int_config_theme);
-   maug = e_int_menus_menu_augmentation_add("config/1", _e_mod_menu_add, NULL, NULL, NULL);
+   maug = e_int_menus_menu_augmentation_add_sorted("config/1", _("Theme"), _e_mod_menu_add, NULL, NULL, NULL);
 
    conf_module = m;
    e_module_delayed_set(m, 1);
index 2299699..8da2a3f 100644 (file)
@@ -29,7 +29,7 @@ e_modapi_init(E_Module *m)
    e_configure_registry_item_add("appearance/wallpaper", 10, _("Wallpaper"), NULL, "preferences-desktop-wallpaper", e_int_config_wallpaper);
    e_configure_registry_category_add("internal", -1, _("Internal"), NULL, "enlightenment/internal");
    e_configure_registry_item_add("internal/wallpaper_desk", -1, _("Wallpaper"), NULL, "preferences-system-windows", e_int_config_wallpaper_desk);
-   maug = e_int_menus_menu_augmentation_add("config/1", _e_mod_menu_add, NULL, NULL, NULL);
+   maug = e_int_menus_menu_augmentation_add_sorted("config/1", _("Wallpaper"), _e_mod_menu_add, NULL, NULL, NULL);
 
    import_hdl = e_fm2_mime_handler_new(_("Set As Background"), "preferences-desktop-wallpaper", 
                                       e_int_config_wallpaper_handler_set, NULL,
index c2a3f7a..29e0a42 100644 (file)
@@ -29,7 +29,8 @@ e_modapi_init(E_Module *m)
    e_configure_registry_item_add("appearance/wallpaper2", 10, _("Wallpaper 2"), NULL, "preferences-desktop-wallpaper",wp_conf_show);
    e_configure_registry_category_add("internal", -1, _("Internal"), NULL, "enlightenment/internal");
 //   e_configure_registry_item_add("internal/wallpaper_desk", -1, _("Wallpaper 2"), NULL, "preferences-system-windows", e_int_config_wallpaper_desk);
-   maug = e_int_menus_menu_augmentation_add("config/1", _e_mod_menu_add, NULL, NULL, NULL);
+   maug = e_int_menus_menu_augmentation_add_sorted
+     ("config/1", _("Wallpaper 2"), _e_mod_menu_add, NULL, NULL, NULL);
 
 //   import_hdl = e_fm2_mime_handler_new(_("Set As Background 2"), "preferences-desktop-wallpaper", 
 //                                    e_int_config_wallpaper_handler_set, NULL,
index 565b165..376ec62 100644 (file)
@@ -48,7 +48,8 @@ e_modapi_init(E_Module *m)
        e_action_predef_name_set(_("Launch"), _("Run Command Dialog"), "exebuf",
                                 NULL, NULL, 0);
      }
-   maug = e_int_menus_menu_augmentation_add("main/1", _e_mod_menu_add, NULL, NULL, NULL);
+   maug = e_int_menus_menu_augmentation_add_sorted
+     ("main/1", _("Run Command"), _e_mod_menu_add, NULL, NULL, NULL);
    e_module_delayed_set(m, 1);
    return m;
 }
index f5d3e82..6d69e3c 100644 (file)
@@ -63,8 +63,8 @@ e_modapi_init(E_Module *m)
        e_action_predef_name_set(_("Launch"), _("File Manager"), 
                                 "fileman", NULL, "syntax: /path/to/dir or ~/path/to/dir or favorites or desktop, examples: /boot/grub, ~/downloads", 1);
      }
-   maug = e_int_menus_menu_augmentation_add("main/1", _e_mod_menu_add, 
-                                           NULL, NULL, NULL);
+   maug = e_int_menus_menu_augmentation_add_sorted
+     ("main/1", _("Files"),_e_mod_menu_add, NULL, NULL, NULL);
    e_module_delayed_set(m, 1);
 
    /* Hook into zones */
index 9ef427d..c2779bd 100644 (file)
@@ -73,8 +73,9 @@ e_modapi_init(E_Module *m)
    Man->icon_name = eina_stringshare_add(buf);
    Man->maug = NULL;
    Man->maug = 
-     e_int_menus_menu_augmentation_add("config/1", _gadman_maug_add,
-                                       (void *)Man->icon_name, NULL, NULL);
+     e_int_menus_menu_augmentation_add_sorted
+     ("config/1", _("Gadgets"), _gadman_maug_add, (void *)Man->icon_name,
+      NULL, NULL);
    /* Create toggle action */
    Man->action = e_action_add("gadman_toggle");
    if (Man->action)
index 9b3aa1c..836a708 100644 (file)
@@ -34,8 +34,8 @@ e_modapi_init(E_Module *m)
        e_action_predef_name_set(_("System"), _("System Control"), "syscon",
                                 NULL, NULL, 0);
      }
-   maug = e_int_menus_menu_augmentation_add("main/10", _e_mod_menu_add, 
-                                            NULL, NULL, NULL);
+   maug = e_int_menus_menu_augmentation_add_sorted
+     ("main/10", _("System"), _e_mod_menu_add, NULL, NULL, NULL);
    e_module_delayed_set(m, 1);
    return m;
 }