Enlightenment CVS committal

Author  : englebass
Project : e17
Module  : apps/e

Dir     : e17/apps/e/src/bin


Modified Files:
        e_int_menus.c 


Log Message:
Create menu directly from fdo menu.

===================================================================
RCS file: /cvs/e/e17/apps/e/src/bin/e_int_menus.c,v
retrieving revision 1.203
retrieving revision 1.204
diff -u -3 -r1.203 -r1.204
--- e_int_menus.c       24 Mar 2007 18:18:42 -0000      1.203
+++ e_int_menus.c       24 Mar 2007 18:45:36 -0000      1.204
@@ -32,9 +32,10 @@
 static void _e_int_menus_main_reboot         (void *data, E_Menu *m, 
E_Menu_Item *mi);
 static void _e_int_menus_main_suspend        (void *data, E_Menu *m, 
E_Menu_Item *mi);
 static void _e_int_menus_main_hibernate      (void *data, E_Menu *m, 
E_Menu_Item *mi);
-static void _e_int_menus_apps_scan           (E_Menu *m);
+static void _e_int_menus_apps_scan           (E_Menu *m, Efreet_Menu *menu);
 static void _e_int_menus_apps_start          (void *data, E_Menu *m);
 static void _e_int_menus_apps_free_hook      (void *obj);
+static void _e_int_menus_apps_free_hook2     (void *obj);
 static void _e_int_menus_apps_run            (void *data, E_Menu *m, 
E_Menu_Item *mi);
 static void _e_int_menus_apps_drag           (void *data, E_Menu *m, 
E_Menu_Item *mi);
 static void _e_int_menus_apps_drag_finished  (E_Drag *drag, int dropped);
@@ -206,11 +207,9 @@
 e_int_menus_apps_new(const char *dir)
 {
    E_Menu *m;
-   E_App *a;
-   
+ 
    m = e_menu_new();
-   a = e_app_new(dir, 0);
-   e_object_data_set(E_OBJECT(m), a);
+   if (dir) e_object_data_set(E_OBJECT(m), strdup(dir));
    e_menu_pre_activate_callback_set(m, _e_int_menus_apps_start, NULL);
    e_object_del_attach_func_set(E_OBJECT(m), _e_int_menus_items_del_hook);
    e_object_free_attach_func_set(E_OBJECT(m), _e_int_menus_apps_free_hook);
@@ -261,7 +260,7 @@
    const char *homedir;
    
    homedir = e_user_homedir_get();
-   snprintf(buf, sizeof(buf), "%s/.e/e/applications/menu/favorite", homedir);
+   snprintf(buf, sizeof(buf), "%s/.e/e/applications/menu/favorite.menu", 
homedir);
    m = e_int_menus_apps_new(buf);
    return m;
 }
@@ -270,12 +269,7 @@
 e_int_menus_all_apps_new(void)
 {
    E_Menu *m;
-   char buf[4096];
-   const char *homedir;
-   
-   homedir = e_user_homedir_get();
-   snprintf(buf, sizeof(buf), "%s/.e/e/applications/menu/all", homedir);
-   m = e_int_menus_apps_new(buf);
+   m = e_int_menus_apps_new(NULL);
    return m;
 }
 
@@ -523,64 +517,79 @@
 }
 
 static void
-_e_int_menus_apps_scan(E_Menu *m)
+_e_int_menus_apps_scan(E_Menu *m, Efreet_Menu *menu)
 {
    E_Menu_Item *mi;
-   E_App *a;
-   Evas_List *l;
-   int app_count = 0;
-   
-   ecore_desktop_instrumentation_reset();
-   a = e_object_data_get(E_OBJECT(m));
-   if (a)
+
+   if (menu->entries)
      {
-       e_app_subdir_scan(a, 0);
-       for (l = a->subapps; l; l = l->next)
+       Efreet_Menu *entry;
+
+        ecore_list_goto_first(menu->entries);
+       while ((entry = ecore_list_next(menu->entries)))
          {
-            a = l->data;
-            
-//             if (e_app_valid_exe_get(a) || (!a->exe))
+            mi = e_menu_item_new(m);
+            if (entry->name) e_menu_item_label_set(mi, entry->name);
+            if (entry->icon)
+              {
+                 const char *file;
+
+                 if (entry->icon[0] == '/') file = entry->icon;
+                 else file = efreet_icon_path_find(e_config->icon_theme, 
entry->icon, "24x24");
+                 e_menu_item_icon_file_set(mi, file);
+              }
+            if (entry->type == EFREET_MENU_ENTRY_SEPARATOR)
+              e_menu_item_separator_set(mi, 1);
+            else if (entry->type == EFREET_MENU_ENTRY_DESKTOP)
+              {
+                 E_App *a;
+
+                 a = e_app_new(entry->desktop->orig_path, 0);
+                 e_menu_item_callback_set(mi, _e_int_menus_apps_run, a);
+                 e_menu_item_drag_callback_set(mi, _e_int_menus_apps_drag, a);
+              }
+            else if (entry->type == EFREET_MENU_ENTRY_MENU)
               {
-                 int opt = 0;
-                 char label[4096];
-                 
-                 mi = e_menu_item_new(m);
-                 if (e_config->menu_eap_name_show && a->name) opt |= 0x4;
-                 if (e_config->menu_eap_generic_show && a->generic) opt |= 0x2;
-                 if (e_config->menu_eap_comment_show && a->comment) opt |= 0x1;
-                 if      (opt == 0x7) snprintf(label, sizeof(label), "%s (%s) 
[%s]", a->name, a->generic, a->comment);
-                 else if (opt == 0x6) snprintf(label, sizeof(label), "%s 
(%s)", a->name, a->generic);
-                 else if (opt == 0x5) snprintf(label, sizeof(label), "%s 
[%s]", a->name, a->comment);
-                 else if (opt == 0x4) snprintf(label, sizeof(label), "%s", 
a->name);
-                 else if (opt == 0x3) snprintf(label, sizeof(label), "%s 
[%s]", a->generic, a->comment);
-                 else if (opt == 0x2) snprintf(label, sizeof(label), "%s", 
a->generic);
-                 else if (opt == 0x1) snprintf(label, sizeof(label), "%s", 
a->comment);
-                 else snprintf(label, sizeof(label), "%s", a->name);
-                 e_menu_item_label_set(mi, label);
-                  e_app_icon_add_to_menu_item(a, mi);
-                 if (a->exe)
-                   {
-                      e_menu_item_callback_set(mi, _e_int_menus_apps_run, a);
-                      e_menu_item_drag_callback_set(mi, 
_e_int_menus_apps_drag, a);
-                   }
-                 else
-                    e_menu_item_submenu_set(mi, e_int_menus_apps_new(a->path));
-                 app_count++;
+                 E_Menu *subm;
+
+                 subm = e_menu_new();
+                 e_menu_pre_activate_callback_set(subm, 
_e_int_menus_apps_start, entry);
+                 e_object_del_attach_func_set(E_OBJECT(subm), 
_e_int_menus_items_del_hook);
+                 e_menu_item_submenu_set(mi, subm);
               }
+            /* TODO: Highlight header
+            else if (entry->type == EFREET_MENU_ENTRY_HEADER)
+            */
          }
      }
-   if (app_count == 0)
+   else
      {
        mi = e_menu_item_new(m);
        e_menu_item_label_set(mi, _("(No Applications)"));
      }
-   ecore_desktop_instrumentation_print();
 }
 
 static void
 _e_int_menus_apps_start(void *data, E_Menu *m)
 {
-   _e_int_menus_apps_scan(m);
+   Efreet_Menu *menu;
+
+   menu = data;
+   if (!menu)
+     {
+       char *dir;
+       
+       dir = e_object_data_get(E_OBJECT(m));
+       if (dir)
+         {
+            menu = efreet_menu_parse(dir);
+            free(dir);
+         }
+       else menu = efreet_menu_get();
+       e_object_data_set(E_OBJECT(m), menu);
+       e_object_free_attach_func_set(E_OBJECT(m), 
_e_int_menus_apps_free_hook2);
+     }
+   if (menu) _e_int_menus_apps_scan(m, menu);
    e_menu_pre_activate_callback_set(m, NULL, NULL);
 }
 
@@ -604,12 +613,22 @@
 _e_int_menus_apps_free_hook(void *obj)
 {
    E_Menu *m;
-   E_App *a;
+   char *dir;
+   
+   m = obj;
+   dir = e_object_data_get(E_OBJECT(m));
+   E_FREE(dir);
+}
+
+static void
+_e_int_menus_apps_free_hook2(void *obj)
+{
+   E_Menu *m;
+   Efreet_Menu *menu;
    
    m = obj;
-   a = e_object_data_get(E_OBJECT(m));
-   /* note: app objects are shared so we ALWAYS unref not del! */
-   if (a) e_object_unref(E_OBJECT(a));
+   menu = e_object_data_get(E_OBJECT(m));
+   if (menu) efreet_menu_free(menu);
 }
 
 static void



-------------------------------------------------------------------------
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