177 lines
4.1 KiB
C
177 lines
4.1 KiB
C
|
#include "e.h"
|
||
|
|
||
|
typedef struct _About_Data About_Data;
|
||
|
|
||
|
struct _About_Data
|
||
|
{
|
||
|
E_Menu *menu;
|
||
|
E_Menu *modules;
|
||
|
};
|
||
|
|
||
|
/* local subsystem functions */
|
||
|
static void _e_int_menus_about_end (void *data, E_Menu *m);
|
||
|
static void _e_int_menus_about_about (void *data, E_Menu *m, E_Menu_Item *mi);
|
||
|
static void _e_int_menus_about_exit (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_start (void *data, E_Menu *m);
|
||
|
static void _e_int_menus_apps_end (void *data, E_Menu *m);
|
||
|
static void _e_int_menus_apps_free_hook(void *obj);
|
||
|
static void _e_int_menus_apps_run (void *data, E_Menu *m, E_Menu_Item *mi);
|
||
|
|
||
|
/* externally accessible functions */
|
||
|
E_Menu *
|
||
|
e_int_menus_about_new(void)
|
||
|
{
|
||
|
E_Menu *m, *subm;
|
||
|
E_Menu_Item *mi;
|
||
|
About_Data *dat;
|
||
|
|
||
|
dat = calloc(1, sizeof(About_Data));
|
||
|
m = e_menu_new();
|
||
|
dat->menu = m;
|
||
|
|
||
|
e_menu_post_deactivate_callback_set(m, _e_int_menus_about_end, dat);
|
||
|
mi = e_menu_item_new(m);
|
||
|
e_menu_item_label_set(mi, "About Enlightenment...");
|
||
|
e_menu_item_icon_file_set(mi,
|
||
|
e_path_find(path_images, "e.png"));
|
||
|
e_menu_item_callback_set(mi, _e_int_menus_about_about, NULL);
|
||
|
|
||
|
subm = e_module_menu_new();
|
||
|
dat->modules = subm;
|
||
|
mi = e_menu_item_new(m);
|
||
|
e_menu_item_label_set(mi, "Modules");
|
||
|
e_menu_item_submenu_set(mi, subm);
|
||
|
|
||
|
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, "Exit Enlightement");
|
||
|
e_menu_item_callback_set(mi, _e_int_menus_about_exit, NULL);
|
||
|
return m;
|
||
|
}
|
||
|
|
||
|
E_Menu *
|
||
|
e_int_menus_apps_new(char *dir, int top)
|
||
|
{
|
||
|
E_Menu *m;
|
||
|
E_Menu_Item *mi;
|
||
|
E_App *a;
|
||
|
|
||
|
m = e_menu_new();
|
||
|
a = e_app_new(dir, 0);
|
||
|
e_object_data_set(E_OBJECT(m), a);
|
||
|
e_menu_pre_activate_callback_set(m, _e_int_menus_apps_start, NULL);
|
||
|
if (top)
|
||
|
{
|
||
|
e_menu_post_deactivate_callback_set(m, _e_int_menus_apps_end, NULL);
|
||
|
e_object_free_attach_func_set(E_OBJECT(m), _e_int_menus_apps_free_hook);
|
||
|
}
|
||
|
return m;
|
||
|
}
|
||
|
|
||
|
/* local subsystem functions */
|
||
|
static void
|
||
|
_e_int_menus_about_end(void *data, E_Menu *m)
|
||
|
{
|
||
|
About_Data *dat;
|
||
|
|
||
|
dat = data;
|
||
|
e_object_unref(E_OBJECT(dat->modules));
|
||
|
e_object_unref(E_OBJECT(m));
|
||
|
free(dat);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
_e_int_menus_about_about(void *data, E_Menu *m, E_Menu_Item *mi)
|
||
|
{
|
||
|
e_error_dialog_show("About Enlightenment",
|
||
|
"This is Enlightenment "VERSION".\n"
|
||
|
"Copyright © 1999-2004, by the Enlightenment Dev Team.\n"
|
||
|
"\n"
|
||
|
"We hope you enjoy using this software as much as we enjoyed writing it.\n"
|
||
|
"Please think of the aardvarks. They need some love too."
|
||
|
);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
_e_int_menus_about_exit(void *data, E_Menu *m, E_Menu_Item *mi)
|
||
|
{
|
||
|
ecore_main_loop_quit();
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
_e_int_menus_apps_scan(E_Menu *m)
|
||
|
{
|
||
|
E_Menu_Item *mi;
|
||
|
E_App *a;
|
||
|
Evas_List *l;
|
||
|
|
||
|
a = e_object_data_get(E_OBJECT(m));
|
||
|
e_app_subdir_scan(a, 0);
|
||
|
for (l = a->subapps; l; l = l->next)
|
||
|
{
|
||
|
a = l->data;
|
||
|
|
||
|
mi = e_menu_item_new(m);
|
||
|
e_menu_item_label_set(mi, a->name);
|
||
|
if (a->exe)
|
||
|
{
|
||
|
e_menu_item_icon_edje_set(mi, a->path, "icon");
|
||
|
e_menu_item_callback_set(mi, _e_int_menus_apps_run, a);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
char buf[4096];
|
||
|
|
||
|
snprintf(buf, sizeof(buf), "%s/.directory.eet", a->path);
|
||
|
e_menu_item_icon_edje_set(mi, buf, "icon");
|
||
|
e_menu_item_submenu_set(mi, e_int_menus_apps_new(a->path, 0));
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
_e_int_menus_apps_start(void *data, E_Menu *m)
|
||
|
{
|
||
|
_e_int_menus_apps_scan(m);
|
||
|
e_menu_pre_activate_callback_set(m, NULL, NULL);
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
_e_int_menus_apps_end(void *data, E_Menu *m)
|
||
|
{
|
||
|
Evas_List *l;
|
||
|
|
||
|
for (l = m->items; l; l = l->next)
|
||
|
{
|
||
|
E_Menu_Item *mi;
|
||
|
|
||
|
mi = l->data;
|
||
|
if (mi->submenu)
|
||
|
_e_int_menus_apps_end(NULL, mi->submenu);
|
||
|
}
|
||
|
e_object_unref(E_OBJECT(m));
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
_e_int_menus_apps_free_hook(void *obj)
|
||
|
{
|
||
|
E_Menu *m;
|
||
|
E_App *a;
|
||
|
|
||
|
m = obj;
|
||
|
a = e_object_data_get(E_OBJECT(m));
|
||
|
if (a) e_object_unref(E_OBJECT(a));
|
||
|
}
|
||
|
|
||
|
static void
|
||
|
_e_int_menus_apps_run(void *data, E_Menu *m, E_Menu_Item *mi)
|
||
|
{
|
||
|
E_App *a;
|
||
|
|
||
|
a = data;
|
||
|
e_app_exec(a);
|
||
|
}
|