forked from enlightenment/enlightenment
-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 <limits.h>
|
||||
#include <ctype.h>
|
||||
#include <time.h>
|
||||
#include <dirent.h>
|
||||
#include <pwd.h>
|
||||
#include <grp.h>
|
||||
#include <glob.h>
|
||||
|
||||
#include <Evas.h>
|
||||
#include <Evas_Engine_Buffer.h>
|
||||
|
|
|
@ -9,13 +9,6 @@
|
|||
# define D(x) ((void) 0)
|
||||
#endif
|
||||
|
||||
typedef struct _E_Fm_Assoc_App E_Fm_Assoc_App;
|
||||
struct _E_Fm_Assoc_App
|
||||
{
|
||||
char *mime;
|
||||
char *app;
|
||||
};
|
||||
|
||||
/* local subsystem functions */
|
||||
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 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 */
|
||||
E_Fm_File *
|
||||
e_fm_file_new(const char *filename)
|
||||
{
|
||||
char *ext;
|
||||
E_Fm_File *file;
|
||||
struct stat st;
|
||||
|
||||
|
@ -77,8 +51,10 @@ e_fm_file_new(const char *filename)
|
|||
file->mtime = st.st_mtime;
|
||||
file->ctime = st.st_ctime;
|
||||
|
||||
if (S_ISDIR(file->mode))
|
||||
file->type |= E_FM_FILE_TYPE_DIRECTORY;
|
||||
if (S_ISDIR(file->mode)){
|
||||
file->type |= E_FM_FILE_TYPE_DIRECTORY;
|
||||
file->mime = "directory";
|
||||
}
|
||||
else if (S_ISREG(file->mode))
|
||||
file->type = E_FM_FILE_TYPE_FILE;
|
||||
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[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));
|
||||
return file;
|
||||
|
||||
error:
|
||||
error:
|
||||
if (file->path) free(file->path);
|
||||
if (file->name) free(file->name);
|
||||
free(file);
|
||||
|
@ -182,7 +168,7 @@ e_fm_file_can_preview(E_Fm_File *file)
|
|||
for (i = 0; file->preview_funcs[i]; i++)
|
||||
{
|
||||
E_Fm_File_Preview_Function func;
|
||||
|
||||
|
||||
func = file->preview_funcs[i];
|
||||
if (func(file))
|
||||
return 1;
|
||||
|
@ -206,7 +192,7 @@ e_fm_file_is_image(E_Fm_File *file)
|
|||
|
||||
D(("e_fm_file_is_image: (%p)\n", file));
|
||||
return (!strcasecmp(ext, ".jpg")) || (!strcasecmp(ext, ".png")) ||
|
||||
(!strcasecmp(ext, ".jpeg"));
|
||||
(!strcasecmp(ext, ".jpeg"));
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -383,7 +369,7 @@ e_fm_file_assoc_exec(E_Fm_File *file)
|
|||
Ecore_Exe *exe;
|
||||
|
||||
if (!assoc_apps) return 0;
|
||||
|
||||
|
||||
for (l = assoc_apps; l; l = l->next)
|
||||
{
|
||||
char *ext;
|
||||
|
@ -418,6 +404,28 @@ e_fm_file_assoc_exec(E_Fm_File *file)
|
|||
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 */
|
||||
static void
|
||||
_e_fm_file_free(E_Fm_File *file)
|
||||
|
@ -426,6 +434,7 @@ _e_fm_file_free(E_Fm_File *file)
|
|||
free(file->preview_funcs);
|
||||
if (file->path) free(file->path);
|
||||
if (file->name) free(file->name);
|
||||
///??? if (file->mime) free(file->mime);
|
||||
free(file);
|
||||
}
|
||||
|
||||
|
|
|
@ -37,6 +37,7 @@ struct _E_Fm_File
|
|||
|
||||
char *path; /* full name with path */
|
||||
char *name; /* file name without parent directories */
|
||||
char *mime; /* mimetype (just the extension) */
|
||||
|
||||
dev_t device; /* ID of device containing file */
|
||||
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_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_exec_with (E_Fm_File *file, char* exec_with);
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
|
|
@ -14,7 +14,7 @@ struct _E_Smart_Data
|
|||
|
||||
char *thumb_path;
|
||||
char *saved_title;
|
||||
|
||||
|
||||
Evas_Object *event_object;
|
||||
Evas_Object *icon_object;
|
||||
Evas_Object *image_object;
|
||||
|
@ -22,11 +22,11 @@ struct _E_Smart_Data
|
|||
Evas_Object *thumb_object;
|
||||
|
||||
E_Fm_File *file;
|
||||
|
||||
|
||||
unsigned char visible : 1;
|
||||
|
||||
|
||||
int type;
|
||||
|
||||
|
||||
E_Fm_Icon_Metadata *meta;
|
||||
};
|
||||
|
||||
|
@ -43,7 +43,7 @@ static void _e_fm_icon_smart_clip_unset (Evas_Object *obj);
|
|||
/* Create icons */
|
||||
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_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);
|
||||
|
||||
/* local subsystem globals */
|
||||
|
@ -109,10 +109,10 @@ e_fm_icon_type_set(Evas_Object *obj, int type)
|
|||
|
||||
sd = evas_object_smart_data_get(obj);
|
||||
if (!sd) return;
|
||||
|
||||
|
||||
if(sd->type == type)
|
||||
return;
|
||||
|
||||
|
||||
sd->type = type;
|
||||
_e_fm_icon_type_set(sd);
|
||||
}
|
||||
|
@ -121,10 +121,10 @@ E_Fm_File *
|
|||
e_fm_icon_file_get(Evas_Object *obj)
|
||||
{
|
||||
E_Smart_Data *sd;
|
||||
|
||||
|
||||
sd = evas_object_smart_data_get(obj);
|
||||
if (!sd) return;
|
||||
|
||||
|
||||
return sd->file;
|
||||
}
|
||||
|
||||
|
@ -132,7 +132,7 @@ void
|
|||
e_fm_icon_file_set(Evas_Object *obj, E_Fm_File *file)
|
||||
{
|
||||
E_Smart_Data *sd;
|
||||
Evas_Coord icon_w, icon_h;
|
||||
Evas_Coord icon_w, icon_h;
|
||||
|
||||
sd = evas_object_smart_data_get(obj);
|
||||
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));
|
||||
sd->file = file;
|
||||
file->icon_object = obj;
|
||||
|
||||
|
||||
if (e_fm_file_can_preview(sd->file))
|
||||
{
|
||||
sd->thumb_path = e_thumb_file_get(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->iw,
|
||||
sd->ih,
|
||||
1);
|
||||
// evas_object_geometry_get(sd->thumb_object, NULL, NULL, &icon_w, &icon_h);
|
||||
// sd->iw = icon_w;
|
||||
// sd->ih = icon_h;
|
||||
// evas_object_geometry_get(sd->thumb_object, NULL, NULL, &icon_w, &icon_h);
|
||||
// sd->iw = icon_w;
|
||||
// sd->ih = icon_h;
|
||||
sd->image_object = edje_object_add(sd->evas);
|
||||
e_theme_edje_object_set(sd->image_object, "base/theme/fileman",
|
||||
"fileman/icon_thumb");
|
||||
|
@ -193,25 +193,25 @@ e_fm_icon_file_set(Evas_Object *obj, E_Fm_File *file)
|
|||
|
||||
void
|
||||
e_fm_icon_appear_cb(Evas_Object *obj, void *data)
|
||||
{
|
||||
{
|
||||
E_Smart_Data *sd;
|
||||
|
||||
evas_object_show(obj);
|
||||
return;
|
||||
|
||||
|
||||
sd = evas_object_smart_data_get(obj);
|
||||
if (!sd) return;
|
||||
if (!sd) return;
|
||||
if(sd->visible) return;
|
||||
sd->visible = 1;
|
||||
|
||||
|
||||
sd->icon_object = edje_object_add(sd->evas);
|
||||
evas_object_smart_member_add(sd->icon_object, obj);
|
||||
|
||||
|
||||
sd->event_object = evas_object_rectangle_add(sd->evas);
|
||||
evas_object_color_set(sd->event_object, 0, 0, 0, 0);
|
||||
evas_object_smart_member_add(sd->event_object, obj);
|
||||
evas_object_smart_data_set(obj, sd);
|
||||
|
||||
|
||||
e_fm_icon_file_set(obj, sd->file);
|
||||
evas_object_show(obj);
|
||||
}
|
||||
|
@ -223,35 +223,35 @@ e_fm_icon_disappear_cb(Evas_Object *obj, void *data)
|
|||
|
||||
evas_object_hide(obj);
|
||||
return;
|
||||
|
||||
|
||||
sd = evas_object_smart_data_get(obj);
|
||||
if (!sd) return;
|
||||
if(!sd->visible) return;
|
||||
sd->visible = 0;
|
||||
|
||||
|
||||
if (sd->event_object) evas_object_del(sd->event_object);
|
||||
if (sd->icon_object) evas_object_del(sd->icon_object);
|
||||
if (sd->image_object) evas_object_del(sd->image_object);
|
||||
if (sd->thumb_object) evas_object_del(sd->thumb_object);
|
||||
E_FREE(sd->saved_title);
|
||||
E_FREE(sd->saved_title);
|
||||
}
|
||||
|
||||
char *
|
||||
e_fm_icon_title_get(Evas_Object *obj)
|
||||
{
|
||||
E_Smart_Data *sd;
|
||||
|
||||
|
||||
sd = evas_object_smart_data_get(obj);
|
||||
if (!sd) return;
|
||||
|
||||
|
||||
return edje_object_part_text_get(sd->icon_object, "icon_title");
|
||||
}
|
||||
|
||||
void
|
||||
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);
|
||||
if (!sd) return;
|
||||
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)
|
||||
{
|
||||
#if 0
|
||||
#if 0
|
||||
Evas_Textblock_Style *e_editable_text_style;
|
||||
Evas_Coord fw, fh, il, ir, it, ib;
|
||||
|
||||
|
||||
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_object_textblock_style_set(sd->title_object, e_editable_text_style);
|
||||
evas_object_textblock_text_markup_set(sd->title_object, title);
|
||||
|
||||
|
||||
evas_object_resize(sd->title_object, sd->w, 1);
|
||||
evas_object_textblock_size_formatted_get(sd->title_object, &fw, &fh);
|
||||
evas_object_textblock_style_insets_get(sd->title_object, &il, &ir, &it, &ib);
|
||||
|
||||
|
||||
sd->h = sd->ih + 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);
|
||||
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_Fm_Icon_Metadata *m;
|
||||
|
||||
|
||||
sd = evas_object_smart_data_get(obj);
|
||||
if (!sd) return;
|
||||
|
||||
if (!sd) return;
|
||||
|
||||
m = calloc(1, sizeof(E_Fm_Icon_Metadata));
|
||||
if (!m) return NULL;
|
||||
_e_fm_icon_meta_fill(m, sd);
|
||||
|
||||
sd->meta = m;
|
||||
|
||||
|
||||
return m;
|
||||
}
|
||||
|
||||
|
@ -344,7 +343,6 @@ e_fm_icon_meta_free(E_Fm_Icon_Metadata *m)
|
|||
free(m);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
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->file = NULL;
|
||||
sd->meta = NULL;
|
||||
|
||||
|
||||
sd->icon_object = edje_object_add(sd->evas);
|
||||
evas_object_smart_member_add(sd->icon_object, obj);
|
||||
|
||||
|
||||
sd->event_object = evas_object_rectangle_add(sd->evas);
|
||||
evas_object_color_set(sd->event_object, 0, 0, 0, 0);
|
||||
evas_object_smart_member_add(sd->event_object, obj);
|
||||
evas_object_smart_data_set(obj, sd);
|
||||
|
||||
|
||||
sd->visible = 1;
|
||||
|
||||
|
||||
}
|
||||
|
||||
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);
|
||||
sd->meta->x = x;
|
||||
sd->meta->y = y;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
if (!sd) return;
|
||||
if ((sd->w == w) && (sd->h == h)) return;
|
||||
if ((sd->w == w) && (sd->h == h)) return;
|
||||
sd->w = w;
|
||||
sd->h = h;
|
||||
if(sd->event_object)
|
||||
if(sd->event_object)
|
||||
evas_object_resize(sd->event_object, sd->w, sd->h);
|
||||
if(sd->icon_object)
|
||||
evas_object_resize(sd->icon_object, sd->w, sd->h);
|
||||
if(sd->icon_object)
|
||||
evas_object_resize(sd->icon_object, sd->w, sd->h);
|
||||
if(sd->meta)
|
||||
{
|
||||
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);
|
||||
if (!sd) return;
|
||||
if(sd->event_object)
|
||||
if(sd->event_object)
|
||||
evas_object_show(sd->icon_object);
|
||||
if(sd->icon_object)
|
||||
evas_object_show(sd->event_object);
|
||||
if(sd->icon_object)
|
||||
evas_object_show(sd->event_object);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -466,10 +464,10 @@ _e_fm_icon_smart_hide(Evas_Object *obj)
|
|||
|
||||
sd = evas_object_smart_data_get(obj);
|
||||
if (!sd) return;
|
||||
if(sd->event_object)
|
||||
evas_object_hide(sd->icon_object);
|
||||
if(sd->icon_object)
|
||||
evas_object_hide(sd->event_object);
|
||||
if(sd->event_object)
|
||||
evas_object_hide(sd->icon_object);
|
||||
if(sd->icon_object)
|
||||
evas_object_hide(sd->event_object);
|
||||
}
|
||||
|
||||
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);
|
||||
if (!sd) return;
|
||||
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
|
||||
|
@ -518,7 +516,7 @@ _e_fm_icon_icon_mime_get(E_Smart_Data *sd)
|
|||
snprintf(part, PATH_MAX, "icons/fileman/%s", (ext + 1));
|
||||
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");
|
||||
free(ext);
|
||||
free(ext);
|
||||
}
|
||||
else
|
||||
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;
|
||||
char *ext;
|
||||
|
||||
|
||||
sd = data;
|
||||
|
||||
|
||||
ext = strrchr(sd->file->name, '.');
|
||||
if ((ext) && (strcasecmp(ext, ".eap")))
|
||||
ext = NULL;
|
||||
|
||||
|
||||
if ((ext) || (ecore_file_exists(sd->thumb_path)))
|
||||
{
|
||||
Evas_Coord icon_w, icon_h;
|
||||
|
||||
|
||||
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->iw,
|
||||
sd->ih,
|
||||
|
@ -578,22 +576,22 @@ _e_fm_icon_type_set(E_Smart_Data *sd)
|
|||
{
|
||||
switch (sd->type)
|
||||
{
|
||||
case E_FM_ICON_NORMAL:
|
||||
case E_FM_ICON_NORMAL:
|
||||
e_theme_edje_object_set(sd->icon_object, "base/theme/fileman",
|
||||
"fileman/icon_normal");
|
||||
"fileman/icon_normal");
|
||||
break;
|
||||
|
||||
|
||||
case E_FM_ICON_LIST:
|
||||
e_theme_edje_object_set(sd->icon_object, "base/theme/fileman",
|
||||
"fileman/icon_list");
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
e_theme_edje_object_set(sd->icon_object, "base/theme/fileman",
|
||||
"fileman/icon_normal");
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if (sd->image_object)
|
||||
{
|
||||
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);
|
||||
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_Coord fw, fh, il, ir, it, ib;
|
||||
|
||||
|
||||
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_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_resize(sd->title_object, sd->w, 1);
|
||||
evas_object_textblock_size_formatted_get(sd->title_object, &fw, &fh);
|
||||
evas_object_textblock_style_insets_get(sd->title_object, &il, &ir, &it, &ib);
|
||||
|
||||
|
||||
sd->h = sd->ih + 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);
|
||||
evas_object_resize(sd->icon_object, 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);
|
||||
#endif
|
||||
#endif
|
||||
edje_object_part_text_set(sd->icon_object, "icon_title", sd->saved_title);
|
||||
}
|
||||
else
|
||||
{
|
||||
#if 0
|
||||
#if 0
|
||||
Evas_Textblock_Style *e_editable_text_style;
|
||||
Evas_Coord fw, fh, il, ir, it, ib;
|
||||
|
||||
|
||||
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_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_resize(sd->title_object, sd->w, 1);
|
||||
evas_object_textblock_size_formatted_get(sd->title_object, &fw, &fh);
|
||||
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);
|
||||
#endif
|
||||
edje_object_part_text_set(sd->icon_object, "icon_title", sd->file->name);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -3,13 +3,180 @@
|
|||
*/
|
||||
#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_Directory_Change E_Event_Fm_Directory_Change;
|
||||
typedef struct _E_Fm_Assoc_App E_Fm_Assoc_App;
|
||||
|
||||
#else
|
||||
#ifndef 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
|
||||
{
|
||||
Evas_Object *object;
|
||||
|
@ -22,6 +189,12 @@ struct _E_Event_Fm_Directory_Change
|
|||
Evas_Coord w, h;
|
||||
};
|
||||
|
||||
struct _E_Fm_Assoc_App
|
||||
{
|
||||
char *mime;
|
||||
char *app;
|
||||
};
|
||||
|
||||
EAPI int e_fm_init(void);
|
||||
EAPI int e_fm_shutdown(void);
|
||||
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;
|
||||
|
||||
m = e_menu_new();
|
||||
e_menu_category_set(m,"border/stacking");
|
||||
e_menu_category_data_set("border/stacking",bd);
|
||||
bd->border_stacking_menu = m;
|
||||
/* Only allow to change layer for windows in "normal" layers */
|
||||
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();
|
||||
e_menu_category_set(m,"border/maximize");
|
||||
e_menu_category_data_set("border/maximize",bd);
|
||||
bd->border_maximize_menu = m;
|
||||
/* Only allow to change layer for windows in "normal" layers */
|
||||
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();
|
||||
e_menu_category_set(m,"border");
|
||||
e_menu_category_data_set("border",bd);
|
||||
e_object_data_set(E_OBJECT(m), bd);
|
||||
bd->border_menu = m;
|
||||
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_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();
|
||||
dat->apps = subm;
|
||||
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
|
||||
*/
|
||||
|
||||
/* 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 */
|
||||
static void _e_menu_free (E_Menu *m);
|
||||
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 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 */
|
||||
static Ecore_X_Window _e_menu_win = 0;
|
||||
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 int _e_menu_activate_floating = 0;
|
||||
static Ecore_Timer *_e_menu_scroll_timer = NULL;
|
||||
|
@ -128,6 +148,13 @@ e_menu_shutdown(void)
|
|||
e_object_unref(E_OBJECT(m));
|
||||
}
|
||||
_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;
|
||||
}
|
||||
|
||||
|
@ -140,9 +167,11 @@ e_menu_new(void)
|
|||
if (!m) return NULL;
|
||||
m->cur.w = 1;
|
||||
m->cur.h = 1;
|
||||
m->category = NULL;
|
||||
return m;
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
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 */
|
||||
}
|
||||
|
||||
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
|
||||
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;
|
||||
|
||||
E_OBJECT_CHECK_RETURN(mi, -1);
|
||||
E_OBJECT_CHECK_RETURN(m->menu, -1);
|
||||
E_OBJECT_TYPE_CHECK_RETURN(mi, E_MENU_TYPE, -1);
|
||||
for (i = 0, l = mi->menu->items; l; l = l->next, i++)
|
||||
{
|
||||
|
@ -847,7 +928,20 @@ static void
|
|||
_e_menu_free(E_Menu *m)
|
||||
{
|
||||
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_FREE(m->shape_rects);
|
||||
m->shape_rects_num = 0;
|
||||
|
@ -884,6 +978,21 @@ _e_menu_item_free(E_Menu_Item *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
|
||||
_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_List *l;
|
||||
E_Menu_Category *cat;
|
||||
|
||||
|
||||
int ok;
|
||||
|
||||
if (m->realized) return;
|
||||
|
@ -1212,6 +1324,7 @@ _e_menu_realize(E_Menu *m)
|
|||
e_box_homogenous_set(o, 0);
|
||||
edje_object_part_swallow(m->bg_object, "items", m->container_object);
|
||||
|
||||
|
||||
for (l = m->items; l; l = l->next)
|
||||
{
|
||||
E_Menu_Item *mi;
|
||||
|
@ -1219,7 +1332,7 @@ _e_menu_realize(E_Menu *m)
|
|||
mi = l->data;
|
||||
_e_menu_item_realize(mi);
|
||||
}
|
||||
|
||||
|
||||
o = m->container_object;
|
||||
_e_menu_items_layout_update(m);
|
||||
e_box_thaw(o);
|
||||
|
@ -1452,6 +1565,7 @@ _e_menu_item_unrealize(E_Menu_Item *mi)
|
|||
static void
|
||||
_e_menu_unrealize(E_Menu *m)
|
||||
{
|
||||
E_Menu_Category *cat;
|
||||
Evas_List *l;
|
||||
|
||||
if (!m->realized) return;
|
||||
|
@ -1460,6 +1574,7 @@ _e_menu_unrealize(E_Menu *m)
|
|||
e_object_del(E_OBJECT(m->shape));
|
||||
m->shape = NULL;
|
||||
e_box_freeze(m->container_object);
|
||||
|
||||
for (l = m->items; l; l = l->next)
|
||||
{
|
||||
E_Menu_Item *mi;
|
||||
|
@ -1487,6 +1602,9 @@ _e_menu_unrealize(E_Menu *m)
|
|||
static void
|
||||
_e_menu_activate_internal(E_Menu *m, E_Zone *zone)
|
||||
{
|
||||
Evas_List *l;
|
||||
E_Menu_Category *cat;
|
||||
|
||||
if (m->pre_activate_cb.func)
|
||||
m->pre_activate_cb.func(m->pre_activate_cb.data, m);
|
||||
m->fast_mouse = 0;
|
||||
|
@ -1519,6 +1637,18 @@ _e_menu_activate_internal(E_Menu *m, E_Zone *zone)
|
|||
m->active = 1;
|
||||
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->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_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;
|
||||
|
||||
char * category;
|
||||
|
||||
struct {
|
||||
char visible : 1;
|
||||
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 void e_menu_title_set(E_Menu *m, char *title);
|
||||
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_post_deactivate_callback_set(E_Menu *m, void (*func) (void *data, E_Menu *m), void *data);
|
||||
|
||||
|
|
Loading…
Reference in New Issue