- cleanups
- patch from Jose for menus.
- patch from Mista for Open With and other misc.


SVN revision: 19581
This commit is contained in:
codewarrior 2006-01-06 23:45:13 +00:00 committed by codewarrior
parent 6bf7badbe5
commit d3c1a4a4a0
10 changed files with 1636 additions and 1223 deletions

View File

@ -18,6 +18,11 @@
#include <fnmatch.h> #include <fnmatch.h>
#include <limits.h> #include <limits.h>
#include <ctype.h> #include <ctype.h>
#include <time.h>
#include <dirent.h>
#include <pwd.h>
#include <grp.h>
#include <glob.h>
#include <Evas.h> #include <Evas.h>
#include <Evas_Engine_Buffer.h> #include <Evas_Engine_Buffer.h>

View File

@ -9,13 +9,6 @@
# define D(x) ((void) 0) # define D(x) ((void) 0)
#endif #endif
typedef struct _E_Fm_Assoc_App E_Fm_Assoc_App;
struct _E_Fm_Assoc_App
{
char *mime;
char *app;
};
/* local subsystem functions */ /* local subsystem functions */
static void _e_fm_file_free(E_Fm_File *file); static void _e_fm_file_free(E_Fm_File *file);
@ -23,30 +16,11 @@ static void _e_fm_file_free(E_Fm_File *file);
static E_Config_DD *assoc_app_edd = NULL; static E_Config_DD *assoc_app_edd = NULL;
static Evas_List *assoc_apps = NULL; static Evas_List *assoc_apps = NULL;
#if 0
{
E_Fm_Assoc_App *assoc;
assoc = E_NEW(E_Fm_Assoc_App, 1);
assoc->mime = (char*)E_NEW(char *, 5);
snprintf(assoc->mime, 5, "%s", ".jpg");
assoc->app = (char*)E_NEW(char *, 7);
snprintf(assoc->app, 7, "gqview");
sd->conf.main->apps = evas_list_append(sd->conf.main->apps, assoc);
assoc = E_NEW(E_Fm_Assoc_App, 1);
assoc->mime = (char*)E_NEW(char *, 5);
snprintf(assoc->mime, 5, "%s", ".png");
assoc->app = (char*)E_NEW(char *, 7);
snprintf(assoc->app, 7, "gqview");
sd->conf.main->apps = evas_list_append(sd->conf.main->apps, assoc);
}
#endif
/* externally accessible functions */ /* externally accessible functions */
E_Fm_File * E_Fm_File *
e_fm_file_new(const char *filename) e_fm_file_new(const char *filename)
{ {
char *ext;
E_Fm_File *file; E_Fm_File *file;
struct stat st; struct stat st;
@ -77,8 +51,10 @@ e_fm_file_new(const char *filename)
file->mtime = st.st_mtime; file->mtime = st.st_mtime;
file->ctime = st.st_ctime; file->ctime = st.st_ctime;
if (S_ISDIR(file->mode)) if (S_ISDIR(file->mode)){
file->type |= E_FM_FILE_TYPE_DIRECTORY; file->type |= E_FM_FILE_TYPE_DIRECTORY;
file->mime = "directory";
}
else if (S_ISREG(file->mode)) else if (S_ISREG(file->mode))
file->type = E_FM_FILE_TYPE_FILE; file->type = E_FM_FILE_TYPE_FILE;
else if (S_ISLNK(file->mode)) else if (S_ISLNK(file->mode))
@ -96,10 +72,20 @@ e_fm_file_new(const char *filename)
file->preview_funcs[3] = e_fm_file_is_eap; file->preview_funcs[3] = e_fm_file_is_eap;
file->preview_funcs[4] = NULL; file->preview_funcs[4] = NULL;
if(!file->mime)
{
ext = strrchr(file->name, '.');
if (ext)
{
file->mime = ext;
}
else
file->mime = "unknown";
}
D(("e_fm_file_new: %s\n", filename)); D(("e_fm_file_new: %s\n", filename));
return file; return file;
error: error:
if (file->path) free(file->path); if (file->path) free(file->path);
if (file->name) free(file->name); if (file->name) free(file->name);
free(file); free(file);
@ -182,7 +168,7 @@ e_fm_file_can_preview(E_Fm_File *file)
for (i = 0; file->preview_funcs[i]; i++) for (i = 0; file->preview_funcs[i]; i++)
{ {
E_Fm_File_Preview_Function func; E_Fm_File_Preview_Function func;
func = file->preview_funcs[i]; func = file->preview_funcs[i];
if (func(file)) if (func(file))
return 1; return 1;
@ -206,7 +192,7 @@ e_fm_file_is_image(E_Fm_File *file)
D(("e_fm_file_is_image: (%p)\n", file)); D(("e_fm_file_is_image: (%p)\n", file));
return (!strcasecmp(ext, ".jpg")) || (!strcasecmp(ext, ".png")) || return (!strcasecmp(ext, ".jpg")) || (!strcasecmp(ext, ".png")) ||
(!strcasecmp(ext, ".jpeg")); (!strcasecmp(ext, ".jpeg"));
} }
int int
@ -383,7 +369,7 @@ e_fm_file_assoc_exec(E_Fm_File *file)
Ecore_Exe *exe; Ecore_Exe *exe;
if (!assoc_apps) return 0; if (!assoc_apps) return 0;
for (l = assoc_apps; l; l = l->next) for (l = assoc_apps; l; l = l->next)
{ {
char *ext; char *ext;
@ -418,6 +404,28 @@ e_fm_file_assoc_exec(E_Fm_File *file)
return 1; return 1;
} }
int
e_fm_file_exec_with(E_Fm_File *file, char* exec_with)
{
Ecore_Exe *exe;
char app[PATH_MAX * 2];
if (!exec_with || !file) return 0;
snprintf(app, PATH_MAX * 2, "%s \"%s\"", exec_with, file->path);
exe = ecore_exe_run(app, NULL);
if (!exe)
{
e_error_dialog_show(_("Run Error"),
_("3 Enlightenment was unable fork a child process:\n"
"\n"
"%s\n"
"\n"),
app);
return 0;
}
}
/* local subsystem functions */ /* local subsystem functions */
static void static void
_e_fm_file_free(E_Fm_File *file) _e_fm_file_free(E_Fm_File *file)
@ -426,6 +434,7 @@ _e_fm_file_free(E_Fm_File *file)
free(file->preview_funcs); free(file->preview_funcs);
if (file->path) free(file->path); if (file->path) free(file->path);
if (file->name) free(file->name); if (file->name) free(file->name);
///??? if (file->mime) free(file->mime);
free(file); free(file);
} }

View File

@ -37,6 +37,7 @@ struct _E_Fm_File
char *path; /* full name with path */ char *path; /* full name with path */
char *name; /* file name without parent directories */ char *name; /* file name without parent directories */
char *mime; /* mimetype (just the extension) */
dev_t device; /* ID of device containing file */ dev_t device; /* ID of device containing file */
ino_t inode; /* inode number */ ino_t inode; /* inode number */
@ -66,6 +67,7 @@ EAPI int e_fm_file_can_exec (E_Fm_File *file);
EAPI int e_fm_file_exec (E_Fm_File *file); EAPI int e_fm_file_exec (E_Fm_File *file);
EAPI int e_fm_file_assoc_set (E_Fm_File *file, const char *assoc); EAPI int e_fm_file_assoc_set (E_Fm_File *file, const char *assoc);
EAPI int e_fm_file_assoc_exec (E_Fm_File *file); EAPI int e_fm_file_assoc_exec (E_Fm_File *file);
EAPI int e_fm_file_exec_with (E_Fm_File *file, char* exec_with);
#endif #endif
#endif #endif

View File

@ -14,7 +14,7 @@ struct _E_Smart_Data
char *thumb_path; char *thumb_path;
char *saved_title; char *saved_title;
Evas_Object *event_object; Evas_Object *event_object;
Evas_Object *icon_object; Evas_Object *icon_object;
Evas_Object *image_object; Evas_Object *image_object;
@ -22,11 +22,11 @@ struct _E_Smart_Data
Evas_Object *thumb_object; Evas_Object *thumb_object;
E_Fm_File *file; E_Fm_File *file;
unsigned char visible : 1; unsigned char visible : 1;
int type; int type;
E_Fm_Icon_Metadata *meta; E_Fm_Icon_Metadata *meta;
}; };
@ -43,7 +43,7 @@ static void _e_fm_icon_smart_clip_unset (Evas_Object *obj);
/* Create icons */ /* Create icons */
static void _e_fm_icon_icon_mime_get(E_Smart_Data *sd); static void _e_fm_icon_icon_mime_get(E_Smart_Data *sd);
static void _e_fm_icon_thumb_generate_cb(Evas_Object *obj, void *data); static void _e_fm_icon_thumb_generate_cb(Evas_Object *obj, void *data);
static void _e_fm_icon_type_set(E_Smart_Data *sd); static void _e_fm_icon_type_set(E_Smart_Data *sd);
static void _e_fm_icon_meta_fill(E_Fm_Icon_Metadata *m, E_Smart_Data *sd); static void _e_fm_icon_meta_fill(E_Fm_Icon_Metadata *m, E_Smart_Data *sd);
/* local subsystem globals */ /* local subsystem globals */
@ -109,10 +109,10 @@ e_fm_icon_type_set(Evas_Object *obj, int type)
sd = evas_object_smart_data_get(obj); sd = evas_object_smart_data_get(obj);
if (!sd) return; if (!sd) return;
if(sd->type == type) if(sd->type == type)
return; return;
sd->type = type; sd->type = type;
_e_fm_icon_type_set(sd); _e_fm_icon_type_set(sd);
} }
@ -121,10 +121,10 @@ E_Fm_File *
e_fm_icon_file_get(Evas_Object *obj) e_fm_icon_file_get(Evas_Object *obj)
{ {
E_Smart_Data *sd; E_Smart_Data *sd;
sd = evas_object_smart_data_get(obj); sd = evas_object_smart_data_get(obj);
if (!sd) return; if (!sd) return;
return sd->file; return sd->file;
} }
@ -132,7 +132,7 @@ void
e_fm_icon_file_set(Evas_Object *obj, E_Fm_File *file) e_fm_icon_file_set(Evas_Object *obj, E_Fm_File *file)
{ {
E_Smart_Data *sd; E_Smart_Data *sd;
Evas_Coord icon_w, icon_h; Evas_Coord icon_w, icon_h;
sd = evas_object_smart_data_get(obj); sd = evas_object_smart_data_get(obj);
if (!sd) return; if (!sd) return;
@ -140,20 +140,20 @@ e_fm_icon_file_set(Evas_Object *obj, E_Fm_File *file)
e_object_ref(E_OBJECT(file)); e_object_ref(E_OBJECT(file));
sd->file = file; sd->file = file;
file->icon_object = obj; file->icon_object = obj;
if (e_fm_file_can_preview(sd->file)) if (e_fm_file_can_preview(sd->file))
{ {
sd->thumb_path = e_thumb_file_get(sd->file->path); sd->thumb_path = e_thumb_file_get(sd->file->path);
if (e_thumb_exists(sd->file->path)) if (e_thumb_exists(sd->file->path))
{ {
sd->thumb_object = e_thumb_evas_object_get(sd->file->path, sd->thumb_object = e_thumb_evas_object_get(sd->file->path,
sd->evas, sd->evas,
sd->iw, sd->iw,
sd->ih, sd->ih,
1); 1);
// evas_object_geometry_get(sd->thumb_object, NULL, NULL, &icon_w, &icon_h); // evas_object_geometry_get(sd->thumb_object, NULL, NULL, &icon_w, &icon_h);
// sd->iw = icon_w; // sd->iw = icon_w;
// sd->ih = icon_h; // sd->ih = icon_h;
sd->image_object = edje_object_add(sd->evas); sd->image_object = edje_object_add(sd->evas);
e_theme_edje_object_set(sd->image_object, "base/theme/fileman", e_theme_edje_object_set(sd->image_object, "base/theme/fileman",
"fileman/icon_thumb"); "fileman/icon_thumb");
@ -193,25 +193,25 @@ e_fm_icon_file_set(Evas_Object *obj, E_Fm_File *file)
void void
e_fm_icon_appear_cb(Evas_Object *obj, void *data) e_fm_icon_appear_cb(Evas_Object *obj, void *data)
{ {
E_Smart_Data *sd; E_Smart_Data *sd;
evas_object_show(obj); evas_object_show(obj);
return; return;
sd = evas_object_smart_data_get(obj); sd = evas_object_smart_data_get(obj);
if (!sd) return; if (!sd) return;
if(sd->visible) return; if(sd->visible) return;
sd->visible = 1; sd->visible = 1;
sd->icon_object = edje_object_add(sd->evas); sd->icon_object = edje_object_add(sd->evas);
evas_object_smart_member_add(sd->icon_object, obj); evas_object_smart_member_add(sd->icon_object, obj);
sd->event_object = evas_object_rectangle_add(sd->evas); sd->event_object = evas_object_rectangle_add(sd->evas);
evas_object_color_set(sd->event_object, 0, 0, 0, 0); evas_object_color_set(sd->event_object, 0, 0, 0, 0);
evas_object_smart_member_add(sd->event_object, obj); evas_object_smart_member_add(sd->event_object, obj);
evas_object_smart_data_set(obj, sd); evas_object_smart_data_set(obj, sd);
e_fm_icon_file_set(obj, sd->file); e_fm_icon_file_set(obj, sd->file);
evas_object_show(obj); evas_object_show(obj);
} }
@ -223,35 +223,35 @@ e_fm_icon_disappear_cb(Evas_Object *obj, void *data)
evas_object_hide(obj); evas_object_hide(obj);
return; return;
sd = evas_object_smart_data_get(obj); sd = evas_object_smart_data_get(obj);
if (!sd) return; if (!sd) return;
if(!sd->visible) return; if(!sd->visible) return;
sd->visible = 0; sd->visible = 0;
if (sd->event_object) evas_object_del(sd->event_object); if (sd->event_object) evas_object_del(sd->event_object);
if (sd->icon_object) evas_object_del(sd->icon_object); if (sd->icon_object) evas_object_del(sd->icon_object);
if (sd->image_object) evas_object_del(sd->image_object); if (sd->image_object) evas_object_del(sd->image_object);
if (sd->thumb_object) evas_object_del(sd->thumb_object); if (sd->thumb_object) evas_object_del(sd->thumb_object);
E_FREE(sd->saved_title); E_FREE(sd->saved_title);
} }
char * char *
e_fm_icon_title_get(Evas_Object *obj) e_fm_icon_title_get(Evas_Object *obj)
{ {
E_Smart_Data *sd; E_Smart_Data *sd;
sd = evas_object_smart_data_get(obj); sd = evas_object_smart_data_get(obj);
if (!sd) return; if (!sd) return;
return edje_object_part_text_get(sd->icon_object, "icon_title"); return edje_object_part_text_get(sd->icon_object, "icon_title");
} }
void void
e_fm_icon_title_set(Evas_Object *obj, const char *title) e_fm_icon_title_set(Evas_Object *obj, const char *title)
{ {
E_Smart_Data *sd; E_Smart_Data *sd;
sd = evas_object_smart_data_get(obj); sd = evas_object_smart_data_get(obj);
if (!sd) return; if (!sd) return;
E_FREE(sd->saved_title); E_FREE(sd->saved_title);
@ -260,23 +260,22 @@ e_fm_icon_title_set(Evas_Object *obj, const char *title)
//if (sd->icon_object) edje_object_part_text_set(sd->icon_object, "icon_title", title); //if (sd->icon_object) edje_object_part_text_set(sd->icon_object, "icon_title", title);
if(sd->icon_object) if(sd->icon_object)
{ {
#if 0 #if 0
Evas_Textblock_Style *e_editable_text_style; Evas_Textblock_Style *e_editable_text_style;
Evas_Coord fw, fh, il, ir, it, ib; Evas_Coord fw, fh, il, ir, it, ib;
e_editable_text_style = evas_textblock_style_new(); e_editable_text_style = evas_textblock_style_new();
evas_textblock_style_set(e_editable_text_style, "DEFAULT='font=Vera font_size=10 style=shadow shadow_color=#ffffff80 align=center color=#000000 wrap=char'"); evas_textblock_style_set(e_editable_text_style, "DEFAULT='font=Vera font_size=10 style=shadow shadow_color=#ffffff80 align=center color=#000000 wrap=char'");
evas_object_textblock_style_set(sd->title_object, e_editable_text_style); evas_object_textblock_style_set(sd->title_object, e_editable_text_style);
evas_object_textblock_text_markup_set(sd->title_object, title); evas_object_textblock_text_markup_set(sd->title_object, title);
evas_object_resize(sd->title_object, sd->w, 1); evas_object_resize(sd->title_object, sd->w, 1);
evas_object_textblock_size_formatted_get(sd->title_object, &fw, &fh); evas_object_textblock_size_formatted_get(sd->title_object, &fw, &fh);
evas_object_textblock_style_insets_get(sd->title_object, &il, &ir, &it, &ib); evas_object_textblock_style_insets_get(sd->title_object, &il, &ir, &it, &ib);
sd->h = sd->ih + fh + it + ib; sd->h = sd->ih + fh + it + ib;
evas_object_resize(sd->title_object, sd->w, fh + it + ib); evas_object_resize(sd->title_object, sd->w, fh + it + ib);
edje_extern_object_min_size_set(sd->title_object, sd->w, fh + it + ib); edje_extern_object_min_size_set(sd->title_object, sd->w, fh + it + ib);
evas_object_resize(sd->icon_object, sd->w, sd->h); evas_object_resize(sd->icon_object, sd->w, sd->h);
@ -322,16 +321,16 @@ e_fm_icon_meta_generate(Evas_Object *obj)
{ {
E_Smart_Data *sd; E_Smart_Data *sd;
E_Fm_Icon_Metadata *m; E_Fm_Icon_Metadata *m;
sd = evas_object_smart_data_get(obj); sd = evas_object_smart_data_get(obj);
if (!sd) return; if (!sd) return;
m = calloc(1, sizeof(E_Fm_Icon_Metadata)); m = calloc(1, sizeof(E_Fm_Icon_Metadata));
if (!m) return NULL; if (!m) return NULL;
_e_fm_icon_meta_fill(m, sd); _e_fm_icon_meta_fill(m, sd);
sd->meta = m; sd->meta = m;
return m; return m;
} }
@ -344,7 +343,6 @@ e_fm_icon_meta_free(E_Fm_Icon_Metadata *m)
free(m); free(m);
} }
int int
e_fm_icon_assoc_set(Evas_Object *obj, const char *assoc) e_fm_icon_assoc_set(Evas_Object *obj, const char *assoc)
{ {
@ -373,17 +371,17 @@ _e_fm_icon_smart_add(Evas_Object *obj)
sd->ih = 48; sd->ih = 48;
sd->file = NULL; sd->file = NULL;
sd->meta = NULL; sd->meta = NULL;
sd->icon_object = edje_object_add(sd->evas); sd->icon_object = edje_object_add(sd->evas);
evas_object_smart_member_add(sd->icon_object, obj); evas_object_smart_member_add(sd->icon_object, obj);
sd->event_object = evas_object_rectangle_add(sd->evas); sd->event_object = evas_object_rectangle_add(sd->evas);
evas_object_color_set(sd->event_object, 0, 0, 0, 0); evas_object_color_set(sd->event_object, 0, 0, 0, 0);
evas_object_smart_member_add(sd->event_object, obj); evas_object_smart_member_add(sd->event_object, obj);
evas_object_smart_data_set(obj, sd); evas_object_smart_data_set(obj, sd);
sd->visible = 1; sd->visible = 1;
} }
static void static void
@ -421,7 +419,7 @@ _e_fm_icon_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y)
//printf("update meta for %s: x=%d y=%d\n", sd->file->name, x, y); //printf("update meta for %s: x=%d y=%d\n", sd->file->name, x, y);
sd->meta->x = x; sd->meta->x = x;
sd->meta->y = y; sd->meta->y = y;
} }
} }
static void static void
@ -431,13 +429,13 @@ _e_fm_icon_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
sd = evas_object_smart_data_get(obj); sd = evas_object_smart_data_get(obj);
if (!sd) return; if (!sd) return;
if ((sd->w == w) && (sd->h == h)) return; if ((sd->w == w) && (sd->h == h)) return;
sd->w = w; sd->w = w;
sd->h = h; sd->h = h;
if(sd->event_object) if(sd->event_object)
evas_object_resize(sd->event_object, sd->w, sd->h); evas_object_resize(sd->event_object, sd->w, sd->h);
if(sd->icon_object) if(sd->icon_object)
evas_object_resize(sd->icon_object, sd->w, sd->h); evas_object_resize(sd->icon_object, sd->w, sd->h);
if(sd->meta) if(sd->meta)
{ {
printf("update meta: w=%d h=%d\n", w, h); printf("update meta: w=%d h=%d\n", w, h);
@ -453,10 +451,10 @@ _e_fm_icon_smart_show(Evas_Object *obj)
sd = evas_object_smart_data_get(obj); sd = evas_object_smart_data_get(obj);
if (!sd) return; if (!sd) return;
if(sd->event_object) if(sd->event_object)
evas_object_show(sd->icon_object); evas_object_show(sd->icon_object);
if(sd->icon_object) if(sd->icon_object)
evas_object_show(sd->event_object); evas_object_show(sd->event_object);
} }
static void static void
@ -466,10 +464,10 @@ _e_fm_icon_smart_hide(Evas_Object *obj)
sd = evas_object_smart_data_get(obj); sd = evas_object_smart_data_get(obj);
if (!sd) return; if (!sd) return;
if(sd->event_object) if(sd->event_object)
evas_object_hide(sd->icon_object); evas_object_hide(sd->icon_object);
if(sd->icon_object) if(sd->icon_object)
evas_object_hide(sd->event_object); evas_object_hide(sd->event_object);
} }
static void static void
@ -480,7 +478,7 @@ _e_fm_icon_smart_clip_set(Evas_Object *obj, Evas_Object *clip)
sd = evas_object_smart_data_get(obj); sd = evas_object_smart_data_get(obj);
if (!sd) return; if (!sd) return;
evas_object_clip_set(sd->event_object, clip); evas_object_clip_set(sd->event_object, clip);
evas_object_clip_set(sd->icon_object, clip); evas_object_clip_set(sd->icon_object, clip);
} }
static void static void
@ -518,7 +516,7 @@ _e_fm_icon_icon_mime_get(E_Smart_Data *sd)
snprintf(part, PATH_MAX, "icons/fileman/%s", (ext + 1)); snprintf(part, PATH_MAX, "icons/fileman/%s", (ext + 1));
if (!e_theme_edje_object_set(sd->image_object, "base/theme/fileman", part)) if (!e_theme_edje_object_set(sd->image_object, "base/theme/fileman", part))
e_theme_edje_object_set(sd->image_object, "base/theme/fileman", "icons/fileman/file"); e_theme_edje_object_set(sd->image_object, "base/theme/fileman", "icons/fileman/file");
free(ext); free(ext);
} }
else else
e_theme_edje_object_set(sd->image_object, "base/theme/fileman", "icons/fileman/file"); e_theme_edje_object_set(sd->image_object, "base/theme/fileman", "icons/fileman/file");
@ -535,20 +533,20 @@ _e_fm_icon_thumb_generate_cb(Evas_Object *obj, void *data)
{ {
E_Smart_Data *sd; E_Smart_Data *sd;
char *ext; char *ext;
sd = data; sd = data;
ext = strrchr(sd->file->name, '.'); ext = strrchr(sd->file->name, '.');
if ((ext) && (strcasecmp(ext, ".eap"))) if ((ext) && (strcasecmp(ext, ".eap")))
ext = NULL; ext = NULL;
if ((ext) || (ecore_file_exists(sd->thumb_path))) if ((ext) || (ecore_file_exists(sd->thumb_path)))
{ {
Evas_Coord icon_w, icon_h; Evas_Coord icon_w, icon_h;
if (sd->image_object) evas_object_del(sd->image_object); if (sd->image_object) evas_object_del(sd->image_object);
sd->thumb_object = e_thumb_evas_object_get(sd->file->path, sd->thumb_object = e_thumb_evas_object_get(sd->file->path,
sd->evas, sd->evas,
sd->iw, sd->iw,
sd->ih, sd->ih,
@ -578,22 +576,22 @@ _e_fm_icon_type_set(E_Smart_Data *sd)
{ {
switch (sd->type) switch (sd->type)
{ {
case E_FM_ICON_NORMAL: case E_FM_ICON_NORMAL:
e_theme_edje_object_set(sd->icon_object, "base/theme/fileman", e_theme_edje_object_set(sd->icon_object, "base/theme/fileman",
"fileman/icon_normal"); "fileman/icon_normal");
break; break;
case E_FM_ICON_LIST: case E_FM_ICON_LIST:
e_theme_edje_object_set(sd->icon_object, "base/theme/fileman", e_theme_edje_object_set(sd->icon_object, "base/theme/fileman",
"fileman/icon_list"); "fileman/icon_list");
break; break;
default: default:
e_theme_edje_object_set(sd->icon_object, "base/theme/fileman", e_theme_edje_object_set(sd->icon_object, "base/theme/fileman",
"fileman/icon_normal"); "fileman/icon_normal");
break; break;
} }
if (sd->image_object) if (sd->image_object)
{ {
edje_extern_object_min_size_set(sd->image_object, sd->iw, sd->ih); edje_extern_object_min_size_set(sd->image_object, sd->iw, sd->ih);
@ -602,47 +600,45 @@ _e_fm_icon_type_set(E_Smart_Data *sd)
sd->image_object); sd->image_object);
evas_object_show(sd->image_object); evas_object_show(sd->image_object);
} }
if (sd->saved_title) if (sd->saved_title)
{ {
#if 0 #if 0
Evas_Textblock_Style *e_editable_text_style; Evas_Textblock_Style *e_editable_text_style;
Evas_Coord fw, fh, il, ir, it, ib; Evas_Coord fw, fh, il, ir, it, ib;
e_editable_text_style = evas_textblock_style_new(); e_editable_text_style = evas_textblock_style_new();
evas_textblock_style_set(e_editable_text_style, "DEFAULT='font=Vera font_size=10 style=shadow shadow_color=#ffffff80 align=center color=#000000 wrap=char'"); evas_textblock_style_set(e_editable_text_style, "DEFAULT='font=Vera font_size=10 style=shadow shadow_color=#ffffff80 align=center color=#000000 wrap=char'");
evas_object_textblock_style_set(sd->title_object, e_editable_text_style); evas_object_textblock_style_set(sd->title_object, e_editable_text_style);
evas_object_textblock_text_markup_set(sd->title_object, sd->saved_title); evas_object_textblock_text_markup_set(sd->title_object, sd->saved_title);
evas_object_resize(sd->title_object, sd->w, 1); evas_object_resize(sd->title_object, sd->w, 1);
evas_object_textblock_size_formatted_get(sd->title_object, &fw, &fh); evas_object_textblock_size_formatted_get(sd->title_object, &fw, &fh);
evas_object_textblock_style_insets_get(sd->title_object, &il, &ir, &it, &ib); evas_object_textblock_style_insets_get(sd->title_object, &il, &ir, &it, &ib);
sd->h = sd->ih + fh + it + ib; sd->h = sd->ih + fh + it + ib;
evas_object_resize(sd->title_object, sd->w, fh + it + ib); evas_object_resize(sd->title_object, sd->w, fh + it + ib);
edje_extern_object_min_size_set(sd->title_object, sd->w, fh + it + ib); edje_extern_object_min_size_set(sd->title_object, sd->w, fh + it + ib);
evas_object_resize(sd->icon_object, sd->w, sd->h); evas_object_resize(sd->icon_object, sd->w, sd->h);
evas_object_resize(sd->obj, sd->w, sd->h); evas_object_resize(sd->obj, sd->w, sd->h);
edje_object_part_swallow(sd->icon_object, "icon_title", sd->title_object); edje_object_part_swallow(sd->icon_object, "icon_title", sd->title_object);
#endif #endif
edje_object_part_text_set(sd->icon_object, "icon_title", sd->saved_title); edje_object_part_text_set(sd->icon_object, "icon_title", sd->saved_title);
} }
else else
{ {
#if 0 #if 0
Evas_Textblock_Style *e_editable_text_style; Evas_Textblock_Style *e_editable_text_style;
Evas_Coord fw, fh, il, ir, it, ib; Evas_Coord fw, fh, il, ir, it, ib;
e_editable_text_style = evas_textblock_style_new(); e_editable_text_style = evas_textblock_style_new();
evas_textblock_style_set(e_editable_text_style, "DEFAULT='font=Vera font_size=10 style=shadow shadow_color=#ffffff80 align=center color=#000000 wrap=char'"); evas_textblock_style_set(e_editable_text_style, "DEFAULT='font=Vera font_size=10 style=shadow shadow_color=#ffffff80 align=center color=#000000 wrap=char'");
evas_object_textblock_style_set(sd->title_object, e_editable_text_style); evas_object_textblock_style_set(sd->title_object, e_editable_text_style);
evas_object_textblock_text_markup_set(sd->title_object, sd->file->name); evas_object_textblock_text_markup_set(sd->title_object, sd->file->name);
evas_object_resize(sd->title_object, sd->w, 1); evas_object_resize(sd->title_object, sd->w, 1);
evas_object_textblock_size_formatted_get(sd->title_object, &fw, &fh); evas_object_textblock_size_formatted_get(sd->title_object, &fw, &fh);
evas_object_textblock_style_insets_get(sd->title_object, &il, &ir, &it, &ib); evas_object_textblock_style_insets_get(sd->title_object, &il, &ir, &it, &ib);
@ -656,7 +652,7 @@ _e_fm_icon_type_set(E_Smart_Data *sd)
edje_object_part_swallow(sd->icon_object, "icon_title", sd->title_object); edje_object_part_swallow(sd->icon_object, "icon_title", sd->title_object);
#endif #endif
edje_object_part_text_set(sd->icon_object, "icon_title", sd->file->name); edje_object_part_text_set(sd->icon_object, "icon_title", sd->file->name);
} }
} }
static void static void

File diff suppressed because it is too large Load Diff

View File

@ -3,13 +3,180 @@
*/ */
#ifdef E_TYPEDEFS #ifdef E_TYPEDEFS
typedef struct _E_Fm_Smart_Data E_Fm_Smart_Data;
typedef struct _E_Fm_Icon E_Fm_Icon;
typedef struct _E_Fm_Icon_CFData E_Fm_Icon_CFData;
typedef struct _E_Fm_Config E_Fm_Config;
typedef struct _E_Fm_Dir_Metadata E_Fm_Dir_Metadata;
typedef struct _E_Fm_Fake_Mouse_Up_Info E_Fm_Fake_Mouse_Up_Info;
typedef enum _E_Fm_Arrange E_Fm_Arrange;
typedef enum _E_Fm_State E_Fm_State;
typedef struct _E_Event_Fm_Reconfigure E_Event_Fm_Reconfigure; typedef struct _E_Event_Fm_Reconfigure E_Event_Fm_Reconfigure;
typedef struct _E_Event_Fm_Directory_Change E_Event_Fm_Directory_Change; typedef struct _E_Event_Fm_Directory_Change E_Event_Fm_Directory_Change;
typedef struct _E_Fm_Assoc_App E_Fm_Assoc_App;
#else #else
#ifndef E_FM_SMART_H #ifndef E_FM_SMART_H
#define E_FM_SMART_H #define E_FM_SMART_H
struct _E_Fm_Config
{
int width;
int height;
Evas_List *apps;
};
struct _E_Fm_Dir_Metadata
{
char *name; /* dir name */
char *bg; /* dir's custom bg */
int view; /* dir's saved view type */
Evas_List *files; /* files in dir */
/* these are generated post-load */
Evas_Hash *files_hash; /* quick lookup hash */
};
struct _E_Fm_Icon
{
E_Fm_File *file;
Evas_Object *icon_obj;
E_Fm_Smart_Data *sd;
struct {
unsigned char selected : 1;
}
state;
E_Menu *menu;
};
struct _E_Fm_Icon_CFData
{
/*- BASIC -*/
int protect;
int readwrite;
/*- ADVANCED -*/
struct {
int r;
int w;
int x;
}
user, group, world;
/*- common -*/
E_Fm_Icon *icon;
};
enum _E_Fm_Arrange
{
E_FILEMAN_CANVAS_ARRANGE_NAME = 0,
E_FILEMAN_CANVAS_ARRANGE_MODTIME = 1,
E_FILEMAN_CANVAS_ARRANGE_SIZE = 2,
};
enum _E_Fm_State
{
E_FILEMAN_STATE_IDLE = 0,
E_FILEMAN_STATE_TYPEBUFFER = 1,
E_FILEMAN_STATE_RENAME = 2,
};
struct _E_Fm_Fake_Mouse_Up_Info
{
Evas *canvas;
int button;
};
struct _E_Fm_Smart_Data
{
E_Menu *menu;
E_Win *win;
Evas *evas;
Evas_Object *edje_obj;
Evas_Object *event_obj;
Evas_Object *clip_obj;
Evas_Object *layout;
Evas_Object *object;
Evas_Object *entry_obj;
E_Fm_Dir_Metadata *meta;
Evas_Hash *mime_menu_hash;
char *dir;
DIR *dir2;
double timer_int;
Ecore_Timer *timer;
Evas_List *event_handlers;
Evas_List *files;
Evas_List *files_raw;
Ecore_File_Monitor *monitor;
E_Fm_Arrange arrange;
E_Fm_State state;
// E_Fm_Icon *active_file;
int frozen;
double position;
int is_selector;
void (*selector_func) (Evas_Object *object, char *file, void *data);
void *selector_data;
void (*selector_hilite_func) (Evas_Object *object, char *file, void *data);
Evas_Coord x, y, w, h;
struct {
unsigned char start : 1;
int x, y;
Ecore_Evas *ecore_evas;
Evas *evas;
Ecore_X_Window win;
E_Fm_Icon *icon_obj;
Evas_Object *image_object;
}
drag;
struct {
Evas_Coord x_space, y_space, w, h;
}
icon_info;
struct {
Evas_Coord x, y, w, h;
}
child;
struct {
Evas_List *files;
struct {
E_Fm_Icon *file;
Evas_List *ptr;
}
current;
struct {
unsigned char enabled : 1;
Evas_Coord x, y;
Evas_Object *obj;
Evas_List *files;
}
band;
}
selection;
struct {
E_Config_DD *main_edd;
E_Fm_Config *main;
}
conf;
};
struct _E_Event_Fm_Reconfigure struct _E_Event_Fm_Reconfigure
{ {
Evas_Object *object; Evas_Object *object;
@ -22,6 +189,12 @@ struct _E_Event_Fm_Directory_Change
Evas_Coord w, h; Evas_Coord w, h;
}; };
struct _E_Fm_Assoc_App
{
char *mime;
char *app;
};
EAPI int e_fm_init(void); EAPI int e_fm_init(void);
EAPI int e_fm_shutdown(void); EAPI int e_fm_shutdown(void);
EAPI Evas_Object *e_fm_add(Evas *evas); EAPI Evas_Object *e_fm_add(Evas *evas);

View File

@ -34,6 +34,8 @@ e_int_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key, Ecore_
if (bd->border_menu) return; if (bd->border_menu) return;
m = e_menu_new(); m = e_menu_new();
e_menu_category_set(m,"border/stacking");
e_menu_category_data_set("border/stacking",bd);
bd->border_stacking_menu = m; bd->border_stacking_menu = m;
/* Only allow to change layer for windows in "normal" layers */ /* Only allow to change layer for windows in "normal" layers */
if ((!bd->lock_user_stacking) && if ((!bd->lock_user_stacking) &&
@ -72,6 +74,8 @@ e_int_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key, Ecore_
} }
m = e_menu_new(); m = e_menu_new();
e_menu_category_set(m,"border/maximize");
e_menu_category_data_set("border/maximize",bd);
bd->border_maximize_menu = m; bd->border_maximize_menu = m;
/* Only allow to change layer for windows in "normal" layers */ /* Only allow to change layer for windows in "normal" layers */
if ((!bd->lock_user_maximize) && if ((!bd->lock_user_maximize) &&
@ -121,6 +125,8 @@ e_int_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key, Ecore_
} }
m = e_menu_new(); m = e_menu_new();
e_menu_category_set(m,"border");
e_menu_category_data_set("border",bd);
e_object_data_set(E_OBJECT(m), bd); e_object_data_set(E_OBJECT(m), bd);
bd->border_menu = m; bd->border_menu = m;
e_menu_post_deactivate_callback_set(m, _e_border_cb_border_menu_end, NULL); e_menu_post_deactivate_callback_set(m, _e_border_cb_border_menu_end, NULL);

View File

@ -72,6 +72,7 @@ e_int_menus_main_new(void)
e_object_data_set(E_OBJECT(m), dat); e_object_data_set(E_OBJECT(m), dat);
e_object_del_attach_func_set(E_OBJECT(m), _e_int_menus_main_del_hook); e_object_del_attach_func_set(E_OBJECT(m), _e_int_menus_main_del_hook);
e_menu_category_set(m,"main");
subm = e_int_menus_favorite_apps_new(); subm = e_int_menus_favorite_apps_new();
dat->apps = subm; dat->apps = subm;
mi = e_menu_item_new(m); mi = e_menu_item_new(m);

View File

@ -23,6 +23,23 @@
* * support obscures to indicate offscreen/not visible menu parts * * support obscures to indicate offscreen/not visible menu parts
*/ */
/* local subsystem data types */
typedef struct _E_Menu_Category E_Menu_Category;
typedef struct _E_Menu_Category_Callback E_Menu_Category_Callback;
struct _E_Menu_Category
{
void *data;
Evas_List *callbacks;
};
struct _E_Menu_Category_Callback
{
void *data;
void (*create) (E_Menu *m, void *category_data, void *data);
void (*free) (void *data);
};
/* local subsystem functions */ /* local subsystem functions */
static void _e_menu_free (E_Menu *m); static void _e_menu_free (E_Menu *m);
static void _e_menu_item_free (E_Menu_Item *mi); static void _e_menu_item_free (E_Menu_Item *mi);
@ -69,10 +86,13 @@ static int _e_menu_cb_scroll_timer (void *data);
static int _e_menu_cb_window_shape (void *data, int ev_type, void *ev); static int _e_menu_cb_window_shape (void *data, int ev_type, void *ev);
static void _e_menu_cb_item_submenu_post_default (void *data, E_Menu *m, E_Menu_Item *mi); static void _e_menu_cb_item_submenu_post_default (void *data, E_Menu *m, E_Menu_Item *mi);
static Evas_Bool _e_menu_categories_free_cb(Evas_Hash *hash, const char *key, void *data, void *fdata);
/* local subsystem globals */ /* local subsystem globals */
static Ecore_X_Window _e_menu_win = 0; static Ecore_X_Window _e_menu_win = 0;
static Evas_List *_e_active_menus = NULL; static Evas_List *_e_active_menus = NULL;
/*static Evas_Hash *_e_menu_category_items = NULL;*/
static Evas_Hash *_e_menu_categories = NULL;
static Ecore_X_Time _e_menu_activate_time = 0; static Ecore_X_Time _e_menu_activate_time = 0;
static int _e_menu_activate_floating = 0; static int _e_menu_activate_floating = 0;
static Ecore_Timer *_e_menu_scroll_timer = NULL; static Ecore_Timer *_e_menu_scroll_timer = NULL;
@ -128,6 +148,13 @@ e_menu_shutdown(void)
e_object_unref(E_OBJECT(m)); e_object_unref(E_OBJECT(m));
} }
_e_active_menus = NULL; _e_active_menus = NULL;
if (_e_menu_categories)
{
evas_hash_foreach(_e_menu_categories, _e_menu_categories_free_cb, NULL);
evas_hash_free(_e_menu_categories);
_e_menu_categories = NULL;
}
return 1; return 1;
} }
@ -140,9 +167,11 @@ e_menu_new(void)
if (!m) return NULL; if (!m) return NULL;
m->cur.w = 1; m->cur.w = 1;
m->cur.h = 1; m->cur.h = 1;
m->category = NULL;
return m; return m;
} }
void void
e_menu_activate_key(E_Menu *m, E_Zone *zone, int x, int y, int w, int h, int dir) e_menu_activate_key(E_Menu *m, E_Zone *zone, int x, int y, int w, int h, int dir)
{ {
@ -340,6 +369,57 @@ e_menu_icon_file_set(E_Menu *m, char *icon)
/* FIXME: support menu icons */ /* FIXME: support menu icons */
} }
void
e_menu_category_set(E_Menu *m, char *category)
{
E_OBJECT_CHECK(m);
E_OBJECT_TYPE_CHECK(m, E_MENU_TYPE);
if (m->category)
{
evas_stringshare_del(m->category);
m->category = NULL;
}
if (category) m->category = evas_stringshare_add(category);
else m->category = NULL;
m->changed = 1;
}
void
e_menu_category_data_set(char *category, void *data)
{
E_Menu_Category *cat;
cat = evas_hash_find(_e_menu_categories, category);
if (cat)
cat->data = data;
/* if it isnt found create the new hash */
else
{
cat = calloc(1, sizeof(E_Menu_Category));
cat->data = data;
_e_menu_categories = evas_hash_add(_e_menu_categories,category,cat);
}
}
void
e_menu_category_callback_set(char *category, void (*create) (E_Menu *m, void *category_data, void *data), void (*free) (void *data), void *data)
{
E_Menu_Category *cat;
E_Menu_Category_Callback *cb;
cat = evas_hash_find(_e_menu_categories, category);
/* if it isnt found create the new hash */
if (!cat)
{
cat = calloc(1, sizeof(E_Menu_Category));
_e_menu_categories = evas_hash_add(_e_menu_categories,category,cat);
}
cb = calloc(1, sizeof(E_Menu_Category_Callback));
cb->data = data;
cb->create = create;
cb->free = free;
cat->callbacks = evas_list_append(cat->callbacks,cb);
}
void void
e_menu_pre_activate_callback_set(E_Menu *m, void (*func) (void *data, E_Menu *m), void *data) e_menu_pre_activate_callback_set(E_Menu *m, void (*func) (void *data, E_Menu *m), void *data)
{ {
@ -402,6 +482,7 @@ e_menu_item_num_get(E_Menu_Item *mi)
int i; int i;
E_OBJECT_CHECK_RETURN(mi, -1); E_OBJECT_CHECK_RETURN(mi, -1);
E_OBJECT_CHECK_RETURN(m->menu, -1);
E_OBJECT_TYPE_CHECK_RETURN(mi, E_MENU_TYPE, -1); E_OBJECT_TYPE_CHECK_RETURN(mi, E_MENU_TYPE, -1);
for (i = 0, l = mi->menu->items; l; l = l->next, i++) for (i = 0, l = mi->menu->items; l; l = l->next, i++)
{ {
@ -847,7 +928,20 @@ static void
_e_menu_free(E_Menu *m) _e_menu_free(E_Menu *m)
{ {
Evas_List *l, *tmp; Evas_List *l, *tmp;
E_Menu_Category *cat;
/* the foreign menu items */
cat = evas_hash_find(_e_menu_categories, m->category);
if(cat)
{
for(l = cat->callbacks; l; l = l->next)
{
E_Menu_Category_Callback *cb;
cb = l->data;
if(cb->free) cb->free(cb->data);
}
}
_e_menu_unrealize(m); _e_menu_unrealize(m);
E_FREE(m->shape_rects); E_FREE(m->shape_rects);
m->shape_rects_num = 0; m->shape_rects_num = 0;
@ -884,6 +978,21 @@ _e_menu_item_free(E_Menu_Item *mi)
free(mi); free(mi);
} }
static void
_e_menu_category_item_free(E_Menu_Item *mi)
{
if (mi->submenu)
{
mi->submenu->parent_item = NULL;
e_object_unref(E_OBJECT(mi->submenu));
}
if (mi->menu->realized) _e_menu_item_unrealize(mi);
if (mi->icon) evas_stringshare_del(mi->icon);
if (mi->icon_key) evas_stringshare_del(mi->icon_key);
if (mi->label) evas_stringshare_del(mi->label);
free(mi);
}
static void static void
_e_menu_cb_intercept_item_move(void *data, Evas_Object *o, Evas_Coord x, Evas_Coord y) _e_menu_cb_intercept_item_move(void *data, Evas_Object *o, Evas_Coord x, Evas_Coord y)
{ {
@ -1155,6 +1264,9 @@ _e_menu_realize(E_Menu *m)
{ {
Evas_Object *o; Evas_Object *o;
Evas_List *l; Evas_List *l;
E_Menu_Category *cat;
int ok; int ok;
if (m->realized) return; if (m->realized) return;
@ -1212,6 +1324,7 @@ _e_menu_realize(E_Menu *m)
e_box_homogenous_set(o, 0); e_box_homogenous_set(o, 0);
edje_object_part_swallow(m->bg_object, "items", m->container_object); edje_object_part_swallow(m->bg_object, "items", m->container_object);
for (l = m->items; l; l = l->next) for (l = m->items; l; l = l->next)
{ {
E_Menu_Item *mi; E_Menu_Item *mi;
@ -1219,7 +1332,7 @@ _e_menu_realize(E_Menu *m)
mi = l->data; mi = l->data;
_e_menu_item_realize(mi); _e_menu_item_realize(mi);
} }
o = m->container_object; o = m->container_object;
_e_menu_items_layout_update(m); _e_menu_items_layout_update(m);
e_box_thaw(o); e_box_thaw(o);
@ -1452,6 +1565,7 @@ _e_menu_item_unrealize(E_Menu_Item *mi)
static void static void
_e_menu_unrealize(E_Menu *m) _e_menu_unrealize(E_Menu *m)
{ {
E_Menu_Category *cat;
Evas_List *l; Evas_List *l;
if (!m->realized) return; if (!m->realized) return;
@ -1460,6 +1574,7 @@ _e_menu_unrealize(E_Menu *m)
e_object_del(E_OBJECT(m->shape)); e_object_del(E_OBJECT(m->shape));
m->shape = NULL; m->shape = NULL;
e_box_freeze(m->container_object); e_box_freeze(m->container_object);
for (l = m->items; l; l = l->next) for (l = m->items; l; l = l->next)
{ {
E_Menu_Item *mi; E_Menu_Item *mi;
@ -1487,6 +1602,9 @@ _e_menu_unrealize(E_Menu *m)
static void static void
_e_menu_activate_internal(E_Menu *m, E_Zone *zone) _e_menu_activate_internal(E_Menu *m, E_Zone *zone)
{ {
Evas_List *l;
E_Menu_Category *cat;
if (m->pre_activate_cb.func) if (m->pre_activate_cb.func)
m->pre_activate_cb.func(m->pre_activate_cb.data, m); m->pre_activate_cb.func(m->pre_activate_cb.data, m);
m->fast_mouse = 0; m->fast_mouse = 0;
@ -1519,6 +1637,18 @@ _e_menu_activate_internal(E_Menu *m, E_Zone *zone)
m->active = 1; m->active = 1;
e_object_ref(E_OBJECT(m)); e_object_ref(E_OBJECT(m));
} }
/* the foreign menu items */
cat = evas_hash_find(_e_menu_categories, m->category);
if(cat)
{
for(l = cat->callbacks; l; l = l->next)
{
E_Menu_Category_Callback *cb;
cb = l->data;
if(cb->create) cb->create(m,cat->data,cb->data);
}
}
m->cur.visible = 1; m->cur.visible = 1;
m->zone = zone; m->zone = zone;
} }
@ -2473,3 +2603,20 @@ _e_menu_cb_item_submenu_post_default(void *data, E_Menu *m, E_Menu_Item *mi)
e_menu_item_submenu_set(mi, NULL); e_menu_item_submenu_set(mi, NULL);
e_object_del(E_OBJECT(subm)); e_object_del(E_OBJECT(subm));
} }
static Evas_Bool _e_menu_categories_free_cb(Evas_Hash *hash, const char *key, void *data, void *fdata)
{
Evas_List *l;
E_Menu_Category *cat;
cat = (E_Menu_Category *)data;
l = (Evas_List *)cat->callbacks;
while (l)
{
free(l->data); /* free the callback struct */
l = evas_list_remove_list(l,l);
}
free(cat);
}

View File

@ -26,6 +26,8 @@ struct _E_Menu
{ {
E_Object e_obj_inherit; E_Object e_obj_inherit;
char * category;
struct { struct {
char visible : 1; char visible : 1;
int x, y, w, h; int x, y, w, h;
@ -140,6 +142,13 @@ EAPI int e_menu_freeze(E_Menu *m);
EAPI int e_menu_thaw(E_Menu *m); EAPI int e_menu_thaw(E_Menu *m);
EAPI void e_menu_title_set(E_Menu *m, char *title); EAPI void e_menu_title_set(E_Menu *m, char *title);
EAPI void e_menu_icon_file_set(E_Menu *m, char *icon); EAPI void e_menu_icon_file_set(E_Menu *m, char *icon);
/* menu categories functions */
EAPI void e_menu_category_set(E_Menu *m, char *category);
EAPI void e_menu_category_data_set(char *category, void *data);
EAPI void e_menu_category_callback_set(char *category, void (*create) (E_Menu *m, void *category_data, void *data), void (free) (void *data), void *data);
EAPI void e_menu_pre_activate_callback_set(E_Menu *m, void (*func) (void *data, E_Menu *m), void *data); EAPI void e_menu_pre_activate_callback_set(E_Menu *m, void (*func) (void *data, E_Menu *m), void *data);
EAPI void e_menu_post_deactivate_callback_set(E_Menu *m, void (*func) (void *data, E_Menu *m), void *data); EAPI void e_menu_post_deactivate_callback_set(E_Menu *m, void (*func) (void *data, E_Menu *m), void *data);