Remove fdo to .order code. Menus will be used directly soon.

SVN revision: 29029
This commit is contained in:
Sebastian Dransfeld 2007-03-24 18:02:29 +00:00
parent 542d042bac
commit d602265712
6 changed files with 0 additions and 509 deletions

View File

@ -176,7 +176,6 @@ e_int_config_wallpaper.h \
e_int_config_wallpaper_import.h \
e_int_config_wallpaper_gradient.h \
e_color_dialog.h \
e_fdo_menu_to_order.h \
e_sys.h \
e_obj_dialog.h \
e_int_config_transitions.h \
@ -340,7 +339,6 @@ e_int_config_wallpaper.c \
e_int_config_wallpaper_import.c \
e_int_config_wallpaper_gradient.c \
e_color_dialog.c \
e_fdo_menu_to_order.c \
e_sys.c \
e_int_config_transitions.c \
e_obj_dialog.c \

View File

@ -1,415 +0,0 @@
#include "e.h"
//#define DEBUG 1
// FIXME: If there is only one top level menu, likely called "Applications", then throw it away. The top level is already called "Applications".
struct order_data
{
char order_path[PATH_MAX];
Ecore_Sheap *sheap;
};
struct category_data
{
char *path;
Ecore_Hash *menus;
};
static void _e_fdo_menu_to_order_make_apps(const char *name, const char *path, const char *directory, Ecore_Hash *apps);
static void _e_fdo_menu_to_order_dump_each_hash_node(void *value, void *user_data);
static void _e_fdo_menu_to_order_add_sheap(Ecore_Sheap *sheap, const char *order_path, const char *file);
static void _e_fdo_menu_to_order_cb_desktop_dir_foreach(void *list_data, void *data);
static void _e_fdo_menu_to_order_cb_desktop_foreach(void *list_data, void *data);
static char *_e_fdo_menu_to_order_find_category(char *category);
static void _e_fdo_menu_to_order_dump_each_hash_node2(void *value, void *user_data);
static int menu_count;
static int item_count;
static int _do_nuke;
EAPI void
e_fdo_menu_to_order(int do_nuke)
{
Ecore_List *files;
const char *home;
char dir[PATH_MAX];
menu_count = 0;
item_count = 0;
_do_nuke = do_nuke;
ecore_desktop_instrumentation_reset();
home = e_user_homedir_get();
if (do_nuke)
{
/* Nuke the old menus. */
snprintf(dir, sizeof(dir), "%s/.e/e/applications/menu/all/", home);
ecore_file_recursive_rm(dir);
}
/* Scan through ~/.e/e/applications/all, nuke any dangling links.
* Start simple, add smarts later.
*/
snprintf(dir, sizeof(dir), "%s/.e/e/applications/all", home);
files = ecore_file_ls(dir);
if (files)
{
const char *file;
while ((file = ecore_list_next(files)))
{
char *real_file;
snprintf(dir, sizeof(dir), "%s/.e/e/applications/all/%s", home, file);
/* If it's not a link, readlink returns NULL.
* There are other failures that can result in NULL, we don't care about those.
*/
real_file = ecore_file_readlink(dir);
if (real_file)
{
if ((do_nuke) || (!ecore_file_exists(real_file)) )
{
/* FIXME: Should also remove that item from any menus it is in. */
ecore_file_unlink(dir);
}
free(real_file);
}
}
}
ecore_desktop_menu_for_each(_e_fdo_menu_to_order_make_apps);
ecore_desktop_instrumentation_print();
/* This is a hueristic to guess if there are not enough apps. Feel free to tweak it. */
if ((do_nuke) && ((item_count < 50) || (menu_count > (item_count * 3))) )
{
struct category_data cat_data;
printf("Not enough applications found in the system menus, creating fallback menus.\n");
/* search out all .desktop files and generate menus ala e17genmenu. */
ecore_desktop_instrumentation_reset();
cat_data.menus = ecore_hash_new(ecore_str_hash, ecore_str_compare);
if (cat_data.menus)
{
ecore_hash_set_free_key(cat_data.menus, free);
ecore_hash_set_free_value(cat_data.menus, (Ecore_Free_Cb) ecore_hash_destroy);
ecore_desktop_paths_for_each(ECORE_DESKTOP_PATHS_DESKTOPS, _e_fdo_menu_to_order_cb_desktop_dir_foreach, &cat_data);
ecore_hash_for_each_node(cat_data.menus, _e_fdo_menu_to_order_dump_each_hash_node2, &cat_data);
}
ecore_desktop_instrumentation_print();
}
}
static void
_e_fdo_menu_to_order_make_apps(const char *name, const char *path, const char *directory, Ecore_Hash *apps)
{
struct order_data order_data;
order_data.sheap = ecore_sheap_new(ecore_str_compare, 100);
if (order_data.sheap)
{
ecore_sheap_set_free_cb(order_data.sheap, free);
snprintf(order_data.order_path, sizeof(order_data.order_path), "%s/.e/e/applications/menu/all/%s", e_user_homedir_get(), path);
/* Collect the apps. */
ecore_hash_for_each_node(apps, _e_fdo_menu_to_order_dump_each_hash_node, &order_data);
/* Check if we need to create the directory. */
if ((order_data.sheap->size) && (!ecore_file_exists(order_data.order_path)))
{
Ecore_Sheap *sheap;
char *temp;
sheap = ecore_sheap_new(ecore_str_compare, 100);
temp = ecore_file_get_dir(order_data.order_path);
if ((sheap) && (temp))
{
ecore_sheap_set_free_cb(sheap, free);
ecore_file_mkpath(order_data.order_path);
menu_count++;
/* If we create a dir, we add it to the parents .order file. */
_e_fdo_menu_to_order_add_sheap(sheap, temp, ecore_file_get_file(order_data.order_path));
}
if (temp) free(temp);
if (sheap) ecore_sheap_destroy(sheap);
}
if (ecore_file_exists(order_data.order_path))
{
if (directory)
{
char dir[PATH_MAX];
snprintf(dir, sizeof(dir), "%s/.directory", order_data.order_path);
if ((ecore_file_exists(directory)) && (!ecore_file_exists(dir)))
ecore_file_symlink(directory, dir);
}
/* Create the apps. */
_e_fdo_menu_to_order_add_sheap(order_data.sheap, order_data.order_path, NULL);
ecore_sheap_destroy(order_data.sheap);
}
}
}
static void
_e_fdo_menu_to_order_dump_each_hash_node(void *value, void *user_data)
{
struct order_data *order_data;
Ecore_Hash_Node *node;
Ecore_Desktop *desktop;
const char *file, *key;
char path2[PATH_MAX];
int do_add, exists = 0;
order_data = (struct order_data *)user_data;
node = (Ecore_Hash_Node *) value;
key = (char *)node->key;
file = (char *)node->value;
do_add = _do_nuke;
snprintf(path2, sizeof(path2), "%s/.e/e/applications/all/%s", e_user_homedir_get(), key);
if (ecore_file_exists(path2))
{
desktop = ecore_desktop_get(path2, NULL);
exists = 1;
}
else
desktop = ecore_desktop_get(file, NULL);
/* Check if we process */
if (!desktop) return;
if ( (!desktop->hidden) && (!desktop->no_display)
&& ((desktop->type == NULL) || (strcmp(desktop->type, "Application") == 0))
&& ((desktop->OnlyShowIn == NULL) ||(ecore_hash_get(desktop->OnlyShowIn, "Enlightenment") != NULL))
&& ((desktop->NotShowIn == NULL) ||(ecore_hash_get(desktop->NotShowIn, "Enlightenment") == NULL)) )
{
item_count++;
if (!exists)
{
#ifdef DEBUG
printf("MAKING MENU ITEM %s -> %s (%s)\n", order_data->order_path, file, key);
#endif
ecore_file_symlink(file, path2);
do_add = 1;
}
if (do_add)
ecore_sheap_insert(order_data->sheap, strdup(key));
}
}
static void
_e_fdo_menu_to_order_add_sheap(Ecore_Sheap *sheap, const char *order_path, const char *file)
{
char path2[PATH_MAX];
FILE *f;
if (file)
ecore_sheap_insert(sheap, strdup(file));
snprintf(path2, sizeof(path2), "%s/.order", order_path);
f = fopen(path2, "r");
if (f)
{
char buffer[PATH_MAX];
/* Read all entries from existing order file, store in sheap for sorting. */
while (fgets(buffer, sizeof(buffer), f) != NULL)
{
int length;
/* Strip new line char */
if (buffer[(length = strlen(buffer) - 1)] == '\n')
buffer[length] = '\0';
ecore_sheap_insert(sheap, strdup(buffer));
}
fclose(f);
}
f = fopen(path2, "w");
if (!f)
fprintf(stderr, "ERROR: Cannot open order file %s \n", path2);
else
{
char *last = NULL;
int i;
for (i = 0; i < sheap->size; i++)
{
char *item;
item = ecore_sheap_item(sheap, i);
if (item)
{
/* Weed out the dupes. */
if ((last) && (strcmp(last, item) == 0))
continue;
fprintf(f, "%s\n", item);
last = item;
}
}
fclose(f);
}
}
static void
_e_fdo_menu_to_order_cb_desktop_dir_foreach(void *list_data, void *data)
{
char *path = list_data;
struct category_data *cat_data = data;
Ecore_List *desktops;
if(!path) return;
if(!cat_data) return;
cat_data->path = path;
desktops = ecore_file_ls(path);
if(desktops)
ecore_list_for_each(desktops, _e_fdo_menu_to_order_cb_desktop_foreach, cat_data);
}
static void
_e_fdo_menu_to_order_cb_desktop_foreach(void *list_data, void *data)
{
const char* filename = list_data;
struct category_data *cat_data = data;
char path[PATH_MAX], *ext;
Ecore_Desktop *desktop = ecore_desktop_get(path, NULL);
if(!filename)
return;
ext = strrchr(filename, '.');
if ((ext) && (strcmp(ext, ".desktop") == 0))
{
snprintf(path, PATH_MAX, "%s/%s", cat_data->path, filename);
desktop = ecore_desktop_get(path, NULL);
/* Check if we process */
if (!desktop) return;
if ( (!desktop->hidden) && (!desktop->no_display)
&& ((desktop->type == NULL) || (strcmp(desktop->type, "Application") == 0))
&& ((desktop->OnlyShowIn == NULL) ||(ecore_hash_get(desktop->OnlyShowIn, "Enlightenment") != NULL))
&& ((desktop->NotShowIn == NULL) ||(ecore_hash_get(desktop->NotShowIn, "Enlightenment") == NULL)) )
{
char *category;
Ecore_Hash *menu;
category = _e_fdo_menu_to_order_find_category(desktop->categories);
menu = ecore_hash_get(cat_data->menus, category);
if (!menu)
{
menu = ecore_hash_new(ecore_str_hash, ecore_str_compare);
if (menu)
{
ecore_hash_set_free_key(menu, free);
ecore_hash_set_free_value(menu, free);
ecore_hash_set(cat_data->menus, strdup(category), menu);
}
}
if (menu)
ecore_hash_set(menu, strdup(filename), strdup(path));
}
}
}
// FIXME: There are better ways of dealing with this, just a quick cut'n'paste from e17genmenu for now.
#define CATEGORIES "Accessibility:Accessories:Amusement:AudioVideo:Core:Development:Education:Game:Graphics:Multimedia:Network:Office:Programming:Settings:System:TextEditor:Utility:Video"
static char *
_e_fdo_menu_to_order_find_category(char *category)
{
char *token, *cat, *categories;
cat = NULL;
if (category)
{
categories = strdup(CATEGORIES);
if (categories)
{
token = strtok(categories, ":");
while (token)
{
/* Check If this token is in supplied $t */
if (strstr(category, token) != NULL)
{
if (strstr(token, "Development") != NULL)
{
cat = _("Programming");
}
else if (strstr(token, "Game") != NULL)
{
cat = _("Games");
}
else if ((strstr(token, "AudioVideo") != NULL) ||
(strstr(token, "Sound") != NULL) || (strstr(token, "Video") != NULL) || (strstr(token, "Multimedia") != NULL))
{
cat = _("Multimedia");
}
else if (strstr(token, "Net") != NULL)
{
cat = _("Internet");
}
else if (strstr(token, "Education") != NULL)
{
cat = _("Edutainment");
}
else if (strstr(token, "Amusement") != NULL)
{
cat = _("Toys");
}
else if (strstr(token, "System") != NULL)
{
cat = _("System");
}
else if ((strstr(token, "Shells") != NULL) || (strstr(token, "Utility") != NULL) || (strstr(token, "Tools") != NULL))
{
cat = _("Utilities");
}
else if ((strstr(token, "Viewers") != NULL) || (strstr(token, "Editors") != NULL) || (strstr(token, "Text") != NULL))
{
cat = _("Editors");
}
else if (strstr(token, "Graphics") != NULL)
{
cat = _("Graphics");
}
else if ((strstr(token, "WindowManagers") != NULL) || (strstr(token, "Core") != NULL))
{
cat = _("Core");
}
else if ((strstr(token, "Settings") != NULL) || (strstr(token, "Accessibility") != NULL))
{
cat = _("Settings");
}
else if (strstr(token, "Office") != NULL)
{
cat = _("Office");
}
else
{
cat = _("Core");
}
}
token = strtok(NULL, ":");
}
if (token)
free(token);
free(categories);
}
}
if (!cat)
cat = _("Core");
return strdup(cat);
}
static void
_e_fdo_menu_to_order_dump_each_hash_node2(void *value, void *user_data)
{
Ecore_Hash_Node *node;
Ecore_Hash *menu;
char *category;
node = (Ecore_Hash_Node *) value;
category = (char *)node->key;
menu = (Ecore_Hash *)node->value;
_e_fdo_menu_to_order_make_apps(category, category, "", menu);
}

View File

@ -1,12 +0,0 @@
/*
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
*/
#ifdef E_TYPEDEFS
#else
#ifndef E_FDO_MENU_TO_ORDER_H
#define E_FDO_MENU_TO_ORDER_H
EAPI void e_fdo_menu_to_order(int do_nuke);
#endif
#endif

View File

@ -151,7 +151,6 @@
#include "e_widget_color_well.h"
#include "e_widget_csel.h"
#include "e_color_dialog.h"
#include "e_fdo_menu_to_order.h"
#include "e_sys.h"
#include "e_int_config_transitions.h"
#include "e_obj_dialog.h"

View File

@ -582,67 +582,6 @@ _cb_button_move_down(void *data1, void *data2)
}
#endif
static E_Dialog *_e_int_config_apps_regen_dialog = NULL;
static void
_e_int_config_apps_cb_regen_dialog_regen(void *data, E_Dialog *dia)
{
e_object_del(E_OBJECT(_e_int_config_apps_regen_dialog));
_e_int_config_apps_regen_dialog = NULL;
e_fdo_menu_to_order(1);
// if (cfdata->gui.o_fm_all) e_fm2_refresh(cfdata->gui.o_fm_all);
// if (cfdata->gui.o_fm) e_fm2_refresh(cfdata->gui.o_fm);
}
static void
_e_int_config_apps_cb_regen_dialog_update(void *data, E_Dialog *dia)
{
e_object_del(E_OBJECT(_e_int_config_apps_regen_dialog));
_e_int_config_apps_regen_dialog = NULL;
e_fdo_menu_to_order(0);
}
static void
_e_int_config_apps_cb_regen_dialog_delete(E_Win *win)
{
E_Dialog *dia;
dia = win->data;
e_object_del(E_OBJECT(_e_int_config_apps_regen_dialog));
_e_int_config_apps_regen_dialog = NULL;
}
static void
_cb_button_regen(void *data1, void *data2)
{
E_Config_Dialog_Data *cfdata;
cfdata = data1;
if (_e_int_config_apps_regen_dialog) e_object_del(E_OBJECT(_e_int_config_apps_regen_dialog));
_e_int_config_apps_regen_dialog = e_dialog_new(e_container_current_get(e_manager_current_get()), "E", "_menu_regen_dialog");
if (!_e_int_config_apps_regen_dialog) return;
e_win_delete_callback_set(_e_int_config_apps_regen_dialog->win, _e_int_config_apps_cb_regen_dialog_delete);
e_dialog_title_set(_e_int_config_apps_regen_dialog, _("Regenerate or update your Applications menu?"));
e_dialog_text_set(_e_int_config_apps_regen_dialog,
_("You can regenerate your Applications menu.<br>"
"This will delete any customizations you have made.<br>"
"This will replace the Applications menu with the system menu.<br>"
"<br>"
"Or you could just update your Applications menu.<br>"
"This will add any new Applications, and remove any old ones from<br>"
"your Applications menu. Customizations you have made will remain."
));
e_dialog_icon_set(_e_int_config_apps_regen_dialog, "enlightenment/regenerate_menus", 64);
e_dialog_button_add(_e_int_config_apps_regen_dialog, _("Regenerate"), NULL,
_e_int_config_apps_cb_regen_dialog_regen, NULL);
e_dialog_button_add(_e_int_config_apps_regen_dialog, _("Update"), NULL,
_e_int_config_apps_cb_regen_dialog_update, NULL);
e_dialog_button_focus_num(_e_int_config_apps_regen_dialog, 1);
e_win_centered_set(_e_int_config_apps_regen_dialog->win, 1);
e_dialog_show(_e_int_config_apps_regen_dialog);
e_dialog_border_icon_set(_e_int_config_apps_regen_dialog,"enlightenment/regenerate_menus");
}
static Evas_Object *
_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cfdata)
{
@ -821,14 +760,6 @@ _basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, E_Config_Dialog_Data *cf
e_widget_framelist_object_append(of, mt);
e_widget_disabled_set(cfdata->gui.o_move_down_button, 1);
*/
if (!once)
{
mt = e_widget_button_add(evas, _("Regenerate / Update \"Applications\" Menu"), "enlightenment/regenerate_menus",
_cb_button_regen, cfdata, NULL);
cfdata->gui.o_regen_button = mt;
e_widget_framelist_object_append(of, mt);
}
e_widget_table_object_append(ot, of, 2, 0, 2, 4, 1, 1, 1, 1);
}
e_widget_list_object_append(o, ot, 1, 1, 0.5);

View File

@ -1043,16 +1043,6 @@ _e_main_dirs_init(void)
homedir);
system(buf);
}
/* FIXME: THIS is a hack to get people started!!!
* Soon to be replaced with fancy background converting and resyncing code.
* Currently this is likely to be done each time E is started up on some systems.
* On the other hand, some of those systems wont have FDO menus, so this should not take long.
*/
snprintf(buf, sizeof(buf), "%s/.e/e/applications/menu/all/.order", homedir);
if (!ecore_file_exists(buf))
{
e_fdo_menu_to_order(1);
}
/* FIXME: THIS is to get people started - shoudl be in a wizard */
snprintf(buf, sizeof(buf), "%s/.e/e/fileman/favorites", homedir);
if (!ecore_file_exists(buf))