forked from enlightenment/enlightenment
and the new fm code can single, multi and range select, optionally force
single select only... it can asl display icons and thumbnails (testing list mode only atm). SVN revision: 23966
This commit is contained in:
parent
12689c6176
commit
19713696fa
File diff suppressed because it is too large
Load Diff
450
src/bin/e_fm.c
450
src/bin/e_fm.c
|
@ -18,6 +18,12 @@ struct _E_Fm2_Smart_Data
|
|||
char *path;
|
||||
char *realpath;
|
||||
E_Fm2_View_Mode view_mode;
|
||||
struct {
|
||||
int w, h;
|
||||
int list_w, list_h;
|
||||
unsigned char fixed_w : 1;
|
||||
unsigned char fixed_h : 1;
|
||||
} icon;
|
||||
struct {
|
||||
Evas_Coord w, h;
|
||||
} max;
|
||||
|
@ -37,10 +43,13 @@ struct _E_Fm2_Smart_Data
|
|||
DIR *dir;
|
||||
unsigned char no_case_sort : 1;
|
||||
unsigned char iconlist_changed : 1;
|
||||
unsigned char show_extension : 1;
|
||||
unsigned char dirs_first : 1;
|
||||
unsigned char dirs_last : 1;
|
||||
unsigned char single_select : 1;
|
||||
unsigned char windows_multi_select_modifiers : 1;
|
||||
// unsigned char no_dnd : 1;
|
||||
// unsigned char single_select : 1;
|
||||
// unsigned char single_click : 1;
|
||||
// unsigned char show_ext : 1;
|
||||
};
|
||||
|
||||
struct _E_Fm2_Region
|
||||
|
@ -55,15 +64,16 @@ struct _E_Fm2_Icon
|
|||
{
|
||||
E_Fm2_Smart_Data *sd;
|
||||
E_Fm2_Region *region;
|
||||
Evas_Coord x, y, w, h;
|
||||
Evas_Object *obj;
|
||||
Evas_Coord x, y, w, h, min_w, min_h;
|
||||
Evas_Object *obj, *obj_icon;
|
||||
int saved_x, saved_y;
|
||||
int saved_rel;
|
||||
char *file;
|
||||
char *mime;
|
||||
struct stat st;
|
||||
unsigned char realized : 1;
|
||||
unsigned char selected : 1;
|
||||
unsigned char thumb : 1;
|
||||
unsigned char last_selected : 1;
|
||||
unsigned char saved_pos : 1;
|
||||
unsigned char odd : 1;
|
||||
// unsigned char single_click : 1;
|
||||
|
@ -87,6 +97,10 @@ static void _e_fm2_icon_free(E_Fm2_Icon *ic);
|
|||
static void _e_fm2_icon_realize(E_Fm2_Icon *ic);
|
||||
static void _e_fm2_icon_unrealize(E_Fm2_Icon *ic);
|
||||
static int _e_fm2_icon_visible(E_Fm2_Icon *ic);
|
||||
static void _e_fm2_icon_label_set(E_Fm2_Icon *ic, Evas_Object *obj);
|
||||
static void _e_fm2_icon_icon_set(E_Fm2_Icon *ic);
|
||||
static void _e_fm2_icon_select(E_Fm2_Icon *ic);
|
||||
static void _e_fm2_icon_deselect(E_Fm2_Icon *ic);
|
||||
|
||||
static E_Fm2_Region *_e_fm2_region_new(E_Fm2_Smart_Data *sd);
|
||||
static void _e_fm2_region_free(E_Fm2_Region *rg);
|
||||
|
@ -94,6 +108,10 @@ static void _e_fm2_region_realize(E_Fm2_Region *rg);
|
|||
static void _e_fm2_region_unrealize(E_Fm2_Region *rg);
|
||||
static int _e_fm2_region_visible(E_Fm2_Region *rg);
|
||||
|
||||
static void _e_fm2_cb_icon_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
static void _e_fm2_cb_icon_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
static void _e_fm2_cb_icon_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info);
|
||||
static void _e_fm2_cb_icon_thumb_gen(void *data, Evas_Object *obj, void *event_info);
|
||||
static void _e_fm2_cb_scroll_job(void *data);
|
||||
static void _e_fm2_cb_resize_job(void *data);
|
||||
static int _e_fm2_cb_icon_sort(void *data1, void *data2);
|
||||
|
@ -175,9 +193,21 @@ e_fm2_path_set(Evas_Object *obj, char *dev, char *path)
|
|||
/* we split up files into regions. each region can have a maximum of 128
|
||||
* icons and we realize/unrealize whole regions at once when that region
|
||||
* becomes visible - this saves of object count and memory */
|
||||
sd->regions.member_max = 128;
|
||||
sd->view_mode = E_FM2_VIEW_MODE_LIST;
|
||||
sd->regions.member_max = 32;
|
||||
// sd->view_mode = E_FM2_VIEW_MODE_ICONS;
|
||||
sd->view_mode = E_FM2_VIEW_MODE_LIST;
|
||||
sd->icon.w = 64;
|
||||
sd->icon.h = 64;
|
||||
sd->icon.list_w = 24;
|
||||
sd->icon.list_h = 24;
|
||||
sd->icon.fixed_w = 0;
|
||||
sd->icon.fixed_h = 1;
|
||||
sd->no_case_sort = 1;
|
||||
sd->show_extension = 0;
|
||||
sd->dirs_first = 1;
|
||||
sd->dirs_last = 1;
|
||||
sd->single_select = 0;
|
||||
sd->windows_multi_select_modifiers = 0;
|
||||
|
||||
_e_fm2_scan_stop(obj);
|
||||
_e_fm2_queue_free(obj);
|
||||
|
@ -338,8 +368,11 @@ _e_fm2_file_add(Evas_Object *obj, char *file)
|
|||
if (!sd) return;
|
||||
/* create icon obj and append to unsorted list */
|
||||
ic = _e_fm2_icon_new(sd, file);
|
||||
sd->queue = evas_list_append(sd->queue, ic);
|
||||
sd->iconlist_changed = 1;
|
||||
if (ic)
|
||||
{
|
||||
sd->queue = evas_list_append(sd->queue, ic);
|
||||
sd->iconlist_changed = 1;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -659,7 +692,10 @@ _e_fm2_icons_place_list(E_Fm2_Smart_Data *sd)
|
|||
/* FIXME: place in vertical list */
|
||||
ic->x = x;
|
||||
ic->y = y;
|
||||
ic->w = sd->w;
|
||||
if (sd->w > ic->min_w)
|
||||
ic->w = sd->w;
|
||||
else
|
||||
ic->w = ic->min_w;
|
||||
y += ic->h;
|
||||
ic->odd = (i & 0x01);
|
||||
if ((ic->x + ic->w) > sd->max.w) sd->max.w = ic->x + ic->w;
|
||||
|
@ -750,37 +786,81 @@ static E_Fm2_Icon *
|
|||
_e_fm2_icon_new(E_Fm2_Smart_Data *sd, char *file)
|
||||
{
|
||||
E_Fm2_Icon *ic;
|
||||
Evas_Coord mw = 0, mh = 0;
|
||||
Evas_Object *obj, *obj2;
|
||||
char buf[4096];
|
||||
|
||||
/* create icon */
|
||||
ic = E_NEW(E_Fm2_Icon, 1);
|
||||
snprintf(buf, sizeof(buf), "%s/%s", sd->realpath, file);
|
||||
if (stat(buf, &(ic->st)) == -1)
|
||||
{
|
||||
free(ic);
|
||||
return NULL;
|
||||
}
|
||||
ic->sd = sd;
|
||||
ic->file = strdup(file);
|
||||
/* FIXME: have many icon size policies. fixed, max, auto-calc etc. */
|
||||
switch (sd->view_mode)
|
||||
{
|
||||
case E_FM2_VIEW_MODE_ICONS:
|
||||
ic->w = 64;
|
||||
ic->h = 64;
|
||||
break;
|
||||
case E_FM2_VIEW_MODE_GRID_ICONS:
|
||||
ic->w = 64;
|
||||
ic->h = 64;
|
||||
break;
|
||||
case E_FM2_VIEW_MODE_CUSTOM_ICONS:
|
||||
ic->w = 64;
|
||||
ic->h = 64;
|
||||
break;
|
||||
case E_FM2_VIEW_MODE_CUSTOM_GRID_ICONS:
|
||||
ic->w = 64;
|
||||
ic->h = 64;
|
||||
break;
|
||||
case E_FM2_VIEW_MODE_CUSTOM_SMART_GRID_ICONS:
|
||||
ic->w = 64;
|
||||
ic->h = 64;
|
||||
/* FIXME: need to define icon edjes. here goes:
|
||||
*
|
||||
* fileman/icon/fixed
|
||||
* fileman/icon/variable
|
||||
* fileman/list/fixed
|
||||
* fileman/list/variable
|
||||
* fileman/list_odd/fixed
|
||||
* fileman/list_odd/variable
|
||||
*
|
||||
* and now list other things i will need
|
||||
*
|
||||
* fileman/background
|
||||
* fileman/selection
|
||||
* fileman/scrollframe
|
||||
*
|
||||
*/
|
||||
if ((!sd->icon.fixed_w) || (!sd->icon.fixed_h))
|
||||
{
|
||||
obj = edje_object_add(evas_object_evas_get(sd->obj));
|
||||
e_theme_edje_object_set(obj, "base/theme/fileman",
|
||||
"fileman/icon/variable");
|
||||
edje_object_part_text_set(obj, "label", ic->file);
|
||||
edje_object_size_min_calc(obj, &mw, &mh);
|
||||
evas_object_del(obj);
|
||||
}
|
||||
if (sd->icon.fixed_w) ic->w = sd->icon.w;
|
||||
if (sd->icon.fixed_h) ic->h = sd->icon.h;
|
||||
ic->min_w = mw;
|
||||
ic->min_h = mh;
|
||||
break;
|
||||
case E_FM2_VIEW_MODE_LIST:
|
||||
ic->w = sd->w;
|
||||
ic->h = 24;
|
||||
{
|
||||
obj = edje_object_add(evas_object_evas_get(sd->obj));
|
||||
if (sd->icon.fixed_w)
|
||||
e_theme_edje_object_set(obj, "base/theme/fileman",
|
||||
"fileman/list/fixed");
|
||||
else
|
||||
e_theme_edje_object_set(obj, "base/theme/fileman",
|
||||
"fileman/list/variable");
|
||||
_e_fm2_icon_label_set(ic, obj);
|
||||
obj2 = evas_object_rectangle_add(evas_object_evas_get(sd->obj));
|
||||
edje_extern_object_min_size_set(obj2, sd->icon.list_w, sd->icon.list_h);
|
||||
edje_extern_object_max_size_set(obj2, sd->icon.list_w, sd->icon.list_h);
|
||||
edje_object_part_swallow(obj, "icon_swallow", obj2);
|
||||
edje_object_size_min_calc(obj, &mw, &mh);
|
||||
evas_object_del(obj2);
|
||||
evas_object_del(obj);
|
||||
}
|
||||
if (mw < sd->w) ic->w = sd->w;
|
||||
else ic->w = mw;
|
||||
ic->h = mh;
|
||||
ic->min_w = mw;
|
||||
ic->min_h = mh;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
@ -807,15 +887,29 @@ _e_fm2_icon_realize(E_Fm2_Icon *ic)
|
|||
ic->obj = edje_object_add(evas_object_evas_get(ic->sd->obj));
|
||||
edje_object_freeze(ic->obj);
|
||||
evas_object_smart_member_add(ic->obj, ic->sd->obj);
|
||||
/* FIXME: this is currently a hack just to get a display working - go back
|
||||
* and do proper icon stuff later */
|
||||
if (ic->sd->view_mode == E_FM2_VIEW_MODE_LIST)
|
||||
{
|
||||
if (ic->odd)
|
||||
e_theme_edje_object_set(ic->obj, "base/theme/widgets",
|
||||
"widgets/ilist_odd");
|
||||
if (ic->sd->icon.fixed_w)
|
||||
{
|
||||
if (ic->odd)
|
||||
e_theme_edje_object_set(ic->obj, "base/theme/widgets",
|
||||
"fileman/list_odd/fixed");
|
||||
else
|
||||
e_theme_edje_object_set(ic->obj, "base/theme/widgets",
|
||||
"fileman/list/fixed");
|
||||
}
|
||||
else
|
||||
e_theme_edje_object_set(ic->obj, "base/theme/widgets",
|
||||
"widgets/ilist");
|
||||
edje_object_part_text_set(ic->obj, "label", ic->file);
|
||||
{
|
||||
if (ic->odd)
|
||||
e_theme_edje_object_set(ic->obj, "base/theme/widgets",
|
||||
"fileman/list_odd/variable");
|
||||
else
|
||||
e_theme_edje_object_set(ic->obj, "base/theme/widgets",
|
||||
"fileman/list/variable");
|
||||
}
|
||||
_e_fm2_icon_label_set(ic, ic->obj);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -828,9 +922,23 @@ _e_fm2_icon_realize(E_Fm2_Icon *ic)
|
|||
ic->sd->x + ic->x - ic->sd->pos.x,
|
||||
ic->sd->y + ic->y - ic->sd->pos.y);
|
||||
evas_object_resize(ic->obj, ic->w, ic->h);
|
||||
|
||||
evas_object_event_callback_add(ic->obj, EVAS_CALLBACK_MOUSE_DOWN, _e_fm2_cb_icon_mouse_down, ic);
|
||||
evas_object_event_callback_add(ic->obj, EVAS_CALLBACK_MOUSE_UP, _e_fm2_cb_icon_mouse_up, ic);
|
||||
evas_object_event_callback_add(ic->obj, EVAS_CALLBACK_MOUSE_MOVE, _e_fm2_cb_icon_mouse_move, ic);
|
||||
|
||||
_e_fm2_icon_icon_set(ic);
|
||||
|
||||
edje_object_thaw(ic->obj);
|
||||
evas_event_thaw(evas_object_evas_get(ic->sd->obj));
|
||||
evas_object_show(ic->obj);
|
||||
|
||||
if (ic->selected)
|
||||
{
|
||||
/* FIXME: need new signal to INSTANTLY activate - no anim */
|
||||
edje_object_signal_emit(ic->obj, "active", "");
|
||||
edje_object_signal_emit(ic->obj_icon, "active", "");
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -841,6 +949,8 @@ _e_fm2_icon_unrealize(E_Fm2_Icon *ic)
|
|||
ic->realized = 0;
|
||||
evas_object_del(ic->obj);
|
||||
ic->obj = NULL;
|
||||
evas_object_del(ic->obj_icon);
|
||||
ic->obj_icon = NULL;
|
||||
}
|
||||
|
||||
static int
|
||||
|
@ -857,6 +967,138 @@ _e_fm2_icon_visible(E_Fm2_Icon *ic)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fm2_icon_label_set(E_Fm2_Icon *ic, Evas_Object *obj)
|
||||
{
|
||||
char buf[4096], *p;
|
||||
int len;
|
||||
|
||||
if (ic->sd->show_extension)
|
||||
edje_object_part_text_set(obj, "label", ic->file);
|
||||
else
|
||||
{
|
||||
/* remove extension. handle double extensions like .tar.gz too
|
||||
* also be fuzzy - up to 4 chars of extn is ok - eg .html but 5 or
|
||||
* more is considered part of the name
|
||||
*/
|
||||
strncpy(buf, ic->file, sizeof(buf) - 2);
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
|
||||
len = strlen(buf);
|
||||
p = strrchr(buf, '.');
|
||||
if ((p) && ((len - (p - buf)) < 6))
|
||||
{
|
||||
*p = 0;
|
||||
|
||||
len = strlen(buf);
|
||||
p = strrchr(buf, '.');
|
||||
if ((p) && ((len - (p - buf)) < 6)) *p = 0;
|
||||
}
|
||||
edje_object_part_text_set(obj, "label", buf);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fm2_icon_icon_set(E_Fm2_Icon *ic)
|
||||
{
|
||||
char buf[4096];
|
||||
|
||||
if (!ic->realized) return;
|
||||
/* FIXME: use mimetype - for now just using extension glob */
|
||||
if (S_ISDIR(ic->st.st_mode))
|
||||
{
|
||||
ic->obj_icon = edje_object_add(evas_object_evas_get(ic->sd->obj));
|
||||
e_theme_edje_object_set(ic->obj_icon, "base/theme/fileman",
|
||||
"icons/fileman/folder");
|
||||
edje_object_part_swallow(ic->obj, "icon_swallow", ic->obj_icon);
|
||||
evas_object_show(ic->obj_icon);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (
|
||||
(e_util_glob_case_match(ic->file, "*.jpg")) ||
|
||||
(e_util_glob_case_match(ic->file, "*.jpeg")) ||
|
||||
(e_util_glob_case_match(ic->file, "*.jfif")) ||
|
||||
(e_util_glob_case_match(ic->file, "*.jpe")) ||
|
||||
(e_util_glob_case_match(ic->file, "*.png")) ||
|
||||
(e_util_glob_case_match(ic->file, "*.gif")) ||
|
||||
(e_util_glob_case_match(ic->file, "*.tif")) ||
|
||||
(e_util_glob_case_match(ic->file, "*.tiff"))
|
||||
)
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "%s/%s", ic->sd->realpath, ic->file);
|
||||
ic->obj_icon = e_thumb_icon_add(evas_object_evas_get(ic->sd->obj));
|
||||
e_thumb_icon_file_set(ic->obj_icon, buf, NULL);
|
||||
e_thumb_icon_size_set(ic->obj_icon, 64, 64);
|
||||
evas_object_smart_callback_add(ic->obj_icon, "e_thumb_gen", _e_fm2_cb_icon_thumb_gen, ic);
|
||||
e_thumb_icon_begin(ic->obj_icon);
|
||||
edje_object_part_swallow(ic->obj, "icon_swallow", ic->obj_icon);
|
||||
evas_object_show(ic->obj_icon);
|
||||
}
|
||||
else if (
|
||||
(e_util_glob_case_match(ic->file, "*.edj"))
|
||||
)
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "%s/%s", ic->sd->realpath, ic->file);
|
||||
ic->obj_icon = e_thumb_icon_add(evas_object_evas_get(ic->sd->obj));
|
||||
e_thumb_icon_file_set(ic->obj_icon, buf, "desktop/background");
|
||||
e_thumb_icon_size_set(ic->obj_icon, 64, 64);
|
||||
evas_object_smart_callback_add(ic->obj_icon, "e_thumb_gen", _e_fm2_cb_icon_thumb_gen, ic);
|
||||
e_thumb_icon_begin(ic->obj_icon);
|
||||
edje_object_part_swallow(ic->obj, "icon_swallow", ic->obj_icon);
|
||||
evas_object_show(ic->obj_icon);
|
||||
}
|
||||
else if (
|
||||
(e_util_glob_case_match(ic->file, "*.eap"))
|
||||
)
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "%s/%s", ic->sd->realpath, ic->file);
|
||||
ic->obj_icon = e_thumb_icon_add(evas_object_evas_get(ic->sd->obj));
|
||||
e_thumb_icon_file_set(ic->obj_icon, buf, "icon");
|
||||
e_thumb_icon_size_set(ic->obj_icon, 64, 64);
|
||||
evas_object_smart_callback_add(ic->obj_icon, "e_thumb_gen", _e_fm2_cb_icon_thumb_gen, ic);
|
||||
e_thumb_icon_begin(ic->obj_icon);
|
||||
edje_object_part_swallow(ic->obj, "icon_swallow", ic->obj_icon);
|
||||
evas_object_show(ic->obj_icon);
|
||||
}
|
||||
else
|
||||
{
|
||||
ic->obj_icon = edje_object_add(evas_object_evas_get(ic->sd->obj));
|
||||
e_theme_edje_object_set(ic->obj_icon, "base/theme/fileman",
|
||||
"icons/fileman/file");
|
||||
edje_object_part_swallow(ic->obj, "icon_swallow", ic->obj_icon);
|
||||
evas_object_show(ic->obj_icon);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fm2_icon_select(E_Fm2_Icon *ic)
|
||||
{
|
||||
if (ic->selected) return;
|
||||
ic->selected = 1;
|
||||
ic->last_selected = 1;
|
||||
if (ic->realized)
|
||||
{
|
||||
edje_object_signal_emit(ic->obj, "active", "");
|
||||
edje_object_signal_emit(ic->obj_icon, "active", "");
|
||||
evas_object_raise(ic->obj);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fm2_icon_deselect(E_Fm2_Icon *ic)
|
||||
{
|
||||
if (!ic->selected) return;
|
||||
ic->selected = 0;
|
||||
ic->last_selected = 0;
|
||||
if (ic->realized)
|
||||
{
|
||||
edje_object_signal_emit(ic->obj, "passive", "");
|
||||
edje_object_signal_emit(ic->obj_icon, "passive", "");
|
||||
}
|
||||
}
|
||||
|
||||
/**************************/
|
||||
static E_Fm2_Region *
|
||||
_e_fm2_region_new(E_Fm2_Smart_Data *sd)
|
||||
|
@ -926,6 +1168,125 @@ _e_fm2_region_visible(E_Fm2_Region *rg)
|
|||
|
||||
/**************************/
|
||||
|
||||
static void
|
||||
_e_fm2_cb_icon_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
Evas_Event_Mouse_Down *ev;
|
||||
E_Fm2_Icon *ic, *ic2;
|
||||
int multi_sel = 0, range_sel = 0, seen = 0;
|
||||
Evas_List *l;
|
||||
|
||||
ic = data;
|
||||
ev = event_info;
|
||||
if (ev->button == 1)
|
||||
{
|
||||
if (ic->sd->windows_multi_select_modifiers)
|
||||
{
|
||||
if (evas_key_modifier_is_set(ev->modifiers, "Shift"))
|
||||
range_sel = 1;
|
||||
else if (evas_key_modifier_is_set(ev->modifiers, "Control"))
|
||||
multi_sel = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (evas_key_modifier_is_set(ev->modifiers, "Control"))
|
||||
range_sel = 1;
|
||||
else if (evas_key_modifier_is_set(ev->modifiers, "Shift"))
|
||||
multi_sel = 1;
|
||||
}
|
||||
if (ic->sd->single_select)
|
||||
{
|
||||
multi_sel = 0;
|
||||
range_sel = 0;
|
||||
}
|
||||
if (range_sel)
|
||||
{
|
||||
/* find last selected - if any, and seletc all icons between */
|
||||
for (l = ic->sd->icons; l; l = l->next)
|
||||
{
|
||||
ic2 = l->data;
|
||||
if (ic2 == ic) seen = 1;
|
||||
if (ic2->last_selected)
|
||||
{
|
||||
ic2->last_selected = 0;
|
||||
if (seen)
|
||||
{
|
||||
for (; (l) && (l->data != ic); l = l->prev)
|
||||
{
|
||||
ic2 = l->data;
|
||||
_e_fm2_icon_select(ic2);
|
||||
ic2->last_selected = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (; (l) && (l->data != ic); l = l->next)
|
||||
{
|
||||
ic2 = l->data;
|
||||
_e_fm2_icon_select(ic2);
|
||||
ic2->last_selected = 0;
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (!multi_sel)
|
||||
{
|
||||
/* desel others */
|
||||
for (l = ic->sd->icons; l; l = l->next)
|
||||
{
|
||||
ic2 = l->data;
|
||||
if (ic2 != ic)
|
||||
{
|
||||
if (ic2->selected) _e_fm2_icon_deselect(ic2);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (l = ic->sd->icons; l; l = l->next)
|
||||
{
|
||||
ic2 = l->data;
|
||||
ic2->last_selected = 0;
|
||||
}
|
||||
}
|
||||
if ((!range_sel) && (ic->selected))
|
||||
_e_fm2_icon_deselect(ic);
|
||||
else
|
||||
_e_fm2_icon_select(ic);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fm2_cb_icon_mouse_up(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
Evas_Event_Mouse_Up *ev;
|
||||
E_Fm2_Icon *ic;
|
||||
|
||||
ic = data;
|
||||
ev = event_info;
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fm2_cb_icon_mouse_move(void *data, Evas *e, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
Evas_Event_Mouse_Move *ev;
|
||||
E_Fm2_Icon *ic;
|
||||
|
||||
ic = data;
|
||||
ev = event_info;
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fm2_cb_icon_thumb_gen(void *data, Evas_Object *obj, void *event_info)
|
||||
{
|
||||
E_Fm2_Icon *ic;
|
||||
|
||||
ic = data;
|
||||
edje_object_signal_emit(ic->obj, "thumb", "gen");
|
||||
}
|
||||
|
||||
static void
|
||||
_e_fm2_cb_scroll_job(void *data)
|
||||
{
|
||||
|
@ -948,7 +1309,6 @@ _e_fm2_cb_resize_job(void *data)
|
|||
{
|
||||
E_Fm2_Smart_Data *sd;
|
||||
Evas_List *l;
|
||||
E_Fm2_Icon *ic;
|
||||
|
||||
sd = evas_object_smart_data_get(data);
|
||||
if (!sd) return;
|
||||
|
@ -968,16 +1328,22 @@ _e_fm2_cb_resize_job(void *data)
|
|||
_e_fm2_regions_populate(sd->obj);
|
||||
break;
|
||||
case E_FM2_VIEW_MODE_CUSTOM_ICONS:
|
||||
_e_fm2_regions_eval(sd->obj);
|
||||
_e_fm2_obj_icons_place(sd);
|
||||
break;
|
||||
case E_FM2_VIEW_MODE_CUSTOM_GRID_ICONS:
|
||||
_e_fm2_regions_eval(sd->obj);
|
||||
_e_fm2_obj_icons_place(sd);
|
||||
break;
|
||||
case E_FM2_VIEW_MODE_CUSTOM_SMART_GRID_ICONS:
|
||||
_e_fm2_regions_eval(sd->obj);
|
||||
_e_fm2_obj_icons_place(sd);
|
||||
break;
|
||||
case E_FM2_VIEW_MODE_LIST:
|
||||
if (sd->iconlist_changed)
|
||||
{
|
||||
for (l = sd->icons; l; l = l->next)
|
||||
_e_fm2_icon_unrealize(ic);
|
||||
_e_fm2_icon_unrealize(l->data);
|
||||
}
|
||||
_e_fm2_regions_free(sd->obj);
|
||||
_e_fm2_icons_place(sd->obj);
|
||||
|
@ -998,6 +1364,22 @@ _e_fm2_cb_icon_sort(void *data1, void *data2)
|
|||
|
||||
ic1 = data1;
|
||||
ic2 = data2;
|
||||
if (ic1->sd->dirs_last)
|
||||
{
|
||||
if ((S_ISDIR(ic1->st.st_mode)) != (S_ISDIR(ic2->st.st_mode)))
|
||||
{
|
||||
if (S_ISDIR(ic1->st.st_mode)) return -1;
|
||||
else return 1;
|
||||
}
|
||||
}
|
||||
else if (ic1->sd->dirs_first)
|
||||
{
|
||||
if ((S_ISDIR(ic1->st.st_mode)) != (S_ISDIR(ic2->st.st_mode)))
|
||||
{
|
||||
if (S_ISDIR(ic1->st.st_mode)) return 1;
|
||||
else return -1;
|
||||
}
|
||||
}
|
||||
if (ic1->sd->no_case_sort)
|
||||
{
|
||||
char buf1[4096], buf2[4096], *p;
|
||||
|
|
|
@ -595,7 +595,7 @@ _e_test_internal(E_Container *con)
|
|||
e_dialog_title_set(dia, "A Test Dialog");
|
||||
|
||||
o = e_fm2_add(dia->win->evas);
|
||||
e_fm2_path_set(o, NULL, "/dev");
|
||||
e_fm2_path_set(o, "~/", "/pix/bg");
|
||||
evas_object_show(o);
|
||||
|
||||
o2 = e_scrollframe_add(dia->win->evas);
|
||||
|
|
Loading…
Reference in New Issue