-Efm:
- cleanups - patch from Jose for menus. - patch from Mista for Open With and other misc. SVN revision: 19581
This commit is contained in:
parent
6bf7badbe5
commit
d3c1a4a4a0
|
@ -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>
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
|
|
149
src/bin/e_menu.c
149
src/bin/e_menu.c
|
@ -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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue