forked from enlightenment/enlightenment
parent
afb38c8d86
commit
718be21b4b
6
src/e.h
6
src/e.h
|
@ -332,6 +332,12 @@ struct _E_View
|
||||||
} arrange;
|
} arrange;
|
||||||
} options;
|
} options;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
struct {
|
||||||
|
int left, right, top, bottom;
|
||||||
|
} inset, icon, spacing;
|
||||||
|
} spacing;
|
||||||
|
|
||||||
Evas evas;
|
Evas evas;
|
||||||
struct {
|
struct {
|
||||||
Window base;
|
Window base;
|
||||||
|
|
164
src/icons.c
164
src/icons.c
|
@ -31,8 +31,28 @@ static void
|
||||||
e_icon_down_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y)
|
e_icon_down_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y)
|
||||||
{
|
{
|
||||||
E_Icon *icon;
|
E_Icon *icon;
|
||||||
|
Ev_Mouse_Down *ev;
|
||||||
|
Eevent *event;
|
||||||
|
|
||||||
|
event = e_view_get_current_event();
|
||||||
|
ev = event->event;
|
||||||
icon = _data;
|
icon = _data;
|
||||||
|
if (ev->triple_click)
|
||||||
|
{
|
||||||
|
printf("triple\n");
|
||||||
|
}
|
||||||
|
else if (ev->double_click)
|
||||||
|
{
|
||||||
|
printf("double\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
printf("up\n");
|
||||||
|
}
|
||||||
|
if (icon->current.state.selected)
|
||||||
|
icon->current.state.selected = 0;
|
||||||
|
else
|
||||||
|
icon->current.state.selected = 1;
|
||||||
icon->current.state.clicked = 1;
|
icon->current.state.clicked = 1;
|
||||||
icon->changed = 1;
|
icon->changed = 1;
|
||||||
icon->view->changed = 1;
|
icon->view->changed = 1;
|
||||||
|
@ -42,13 +62,13 @@ static void
|
||||||
e_icon_up_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y)
|
e_icon_up_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y)
|
||||||
{
|
{
|
||||||
E_Icon *icon;
|
E_Icon *icon;
|
||||||
|
Ev_Mouse_Up *ev;
|
||||||
|
Eevent *event;
|
||||||
|
|
||||||
|
event = e_view_get_current_event();
|
||||||
|
ev = event->event;
|
||||||
icon = _data;
|
icon = _data;
|
||||||
icon->current.state.clicked = 0;
|
icon->current.state.clicked = 0;
|
||||||
if (icon->current.state.selected)
|
|
||||||
icon->current.state.selected = 0;
|
|
||||||
else
|
|
||||||
icon->current.state.selected = 1;
|
|
||||||
icon->changed = 1;
|
icon->changed = 1;
|
||||||
icon->view->changed = 1;
|
icon->view->changed = 1;
|
||||||
}
|
}
|
||||||
|
@ -80,6 +100,84 @@ e_icon_new(void)
|
||||||
return icon;
|
return icon;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
e_icon_apply_mime(E_Icon *icon, char *mime)
|
||||||
|
{
|
||||||
|
char m1[4096], m2[4096], *p;
|
||||||
|
|
||||||
|
strcpy(m1, mime);
|
||||||
|
p = strchr(m1, '/');
|
||||||
|
if (p) *p = 0;
|
||||||
|
p = strchr(mime, '/');
|
||||||
|
if (p) strcpy(m2, &(p[1]));
|
||||||
|
else m2[0] = 0;
|
||||||
|
IF_FREE(icon->info.mime.base);
|
||||||
|
IF_FREE(icon->info.mime.type);
|
||||||
|
icon->info.mime.base = strdup(m1);
|
||||||
|
icon->info.mime.type = strdup(m2);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
e_icon_get_icon(E_Icon *icon)
|
||||||
|
{
|
||||||
|
char m1[4096], m2[4096], *p;
|
||||||
|
int found = 0;
|
||||||
|
|
||||||
|
/* errr.. hmm do something useful if its a symlink */
|
||||||
|
if (icon->info.link)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
sprintf(m1, "%s/data/icons/%s/%s.db",PACKAGE_DATA_DIR,
|
||||||
|
icon->info.mime.base,
|
||||||
|
icon->info.mime.type);
|
||||||
|
if (e_file_exists(m1)) found = 1;
|
||||||
|
if (!found)
|
||||||
|
{
|
||||||
|
strcpy(m2, icon->info.mime.type);
|
||||||
|
p = strrchr(m2, '-');
|
||||||
|
while (p)
|
||||||
|
{
|
||||||
|
p[0] = 0;
|
||||||
|
sprintf(m1, "%s/data/icons/%s/%s.db",PACKAGE_DATA_DIR,
|
||||||
|
icon->info.mime.base, m2);
|
||||||
|
if (e_file_exists(m1))
|
||||||
|
{
|
||||||
|
found = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
p = strrchr(m2, '-');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!found)
|
||||||
|
{
|
||||||
|
sprintf(m1, "%s/data/icons/%s/default.db",PACKAGE_DATA_DIR,
|
||||||
|
icon->info.mime.base);
|
||||||
|
if (e_file_exists(m1)) found = 1;
|
||||||
|
}
|
||||||
|
if (!found)
|
||||||
|
{
|
||||||
|
sprintf(m1, "%s/data/icons/unknown/unknown.db",PACKAGE_DATA_DIR);
|
||||||
|
if (e_file_exists(m1)) found = 1;
|
||||||
|
}
|
||||||
|
if (!found)
|
||||||
|
{
|
||||||
|
sprintf(m1, "%s/data/icons/unknown/default.db",PACKAGE_DATA_DIR);
|
||||||
|
found = 1;
|
||||||
|
}
|
||||||
|
printf("%s/%s: %s\n", icon->info.mime.base, icon->info.mime.type, m1);
|
||||||
|
IF_FREE(icon->info.icon.normal);
|
||||||
|
IF_FREE(icon->info.icon.selected);
|
||||||
|
IF_FREE(icon->info.icon.clicked);
|
||||||
|
sprintf(m2, "%s:/icon/normal", m1);
|
||||||
|
icon->info.icon.normal = strdup(m2);
|
||||||
|
sprintf(m2, "%s:/icon/selected", m1);
|
||||||
|
icon->info.icon.selected = strdup(m2);
|
||||||
|
sprintf(m2, "%s:/icon/clicked", m1);
|
||||||
|
icon->info.icon.clicked = strdup(m2);
|
||||||
|
icon->changed = 1;
|
||||||
|
icon->view->changed = 1;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
e_icon_place_grid(E_Icon *icon)
|
e_icon_place_grid(E_Icon *icon)
|
||||||
{
|
{
|
||||||
|
@ -88,16 +186,46 @@ e_icon_place_grid(E_Icon *icon)
|
||||||
if (icon->view->options.arrange.grid.dir == 0) /* h */
|
if (icon->view->options.arrange.grid.dir == 0) /* h */
|
||||||
{
|
{
|
||||||
int gw;
|
int gw;
|
||||||
|
int iw, ih;
|
||||||
|
|
||||||
|
iw = icon->current.w +
|
||||||
|
icon->view->spacing.icon.left +
|
||||||
|
icon->view->spacing.icon.right +
|
||||||
|
icon->view->spacing.spacing.left +
|
||||||
|
icon->view->spacing.spacing.right;
|
||||||
|
ih = icon->current.h +
|
||||||
|
icon->view->spacing.icon.top +
|
||||||
|
icon->view->spacing.icon.bottom +
|
||||||
|
icon->view->spacing.spacing.top +
|
||||||
|
icon->view->spacing.spacing.bottom;
|
||||||
if (icon->view->options.arrange.grid.w > 0)
|
if (icon->view->options.arrange.grid.w > 0)
|
||||||
gw = icon->view->size.w / icon->view->options.arrange.grid.w;
|
gw = (icon->view->size.w -
|
||||||
|
icon->view->spacing.inset.left -
|
||||||
|
icon->view->spacing.inset.right) /
|
||||||
|
icon->view->options.arrange.grid.w;
|
||||||
else gw = 1;
|
else gw = 1;
|
||||||
y = icon->view->options.arrange.grid.next_pos / gw;
|
y = icon->view->options.arrange.grid.next_pos / gw;
|
||||||
x = icon->view->options.arrange.grid.next_pos - (y * gw);
|
x = icon->view->options.arrange.grid.next_pos - (y * gw);
|
||||||
x *= icon->view->options.arrange.grid.w;
|
x *= icon->view->options.arrange.grid.w;
|
||||||
y *= icon->view->options.arrange.grid.h;
|
y *= icon->view->options.arrange.grid.h;
|
||||||
x += (icon->view->options.arrange.grid.w - icon->current.w) / 2;
|
x += (icon->view->options.arrange.grid.w -
|
||||||
y += (icon->view->options.arrange.grid.h - icon->current.h);
|
icon->view->spacing.icon.left -
|
||||||
|
icon->view->spacing.icon.right -
|
||||||
|
icon->view->spacing.spacing.left -
|
||||||
|
icon->view->spacing.spacing.right -
|
||||||
|
icon->current.w) / 2;
|
||||||
|
y += (icon->view->options.arrange.grid.h -
|
||||||
|
icon->view->spacing.icon.top -
|
||||||
|
icon->view->spacing.icon.bottom -
|
||||||
|
icon->view->spacing.spacing.top -
|
||||||
|
icon->view->spacing.spacing.bottom -
|
||||||
|
icon->current.h);
|
||||||
|
x -= icon->view->viewport.x;
|
||||||
|
y -= icon->view->viewport.y;
|
||||||
|
x += icon->view->spacing.inset.left;
|
||||||
|
y += icon->view->spacing.inset.top;
|
||||||
|
x += icon->view->spacing.icon.left + icon->view->spacing.spacing.left;
|
||||||
|
y += icon->view->spacing.icon.top + icon->view->spacing.spacing.top;
|
||||||
e_icon_set_xy(icon, x, y);
|
e_icon_set_xy(icon, x, y);
|
||||||
icon->view->options.arrange.grid.next_pos++;
|
icon->view->options.arrange.grid.next_pos++;
|
||||||
}
|
}
|
||||||
|
@ -124,15 +252,27 @@ e_icon_pre_show(E_Icon *icon)
|
||||||
{
|
{
|
||||||
if (icon->view->options.arrange.method == 0) /* grid */
|
if (icon->view->options.arrange.method == 0) /* grid */
|
||||||
{
|
{
|
||||||
/* need to redo whole grid... */
|
int iw, ih;
|
||||||
if ((icon->current.w > icon->view->options.arrange.grid.w) ||
|
|
||||||
(icon->current.h > icon->view->options.arrange.grid.h))
|
iw = icon->current.w +
|
||||||
|
icon->view->spacing.icon.left +
|
||||||
|
icon->view->spacing.icon.right +
|
||||||
|
icon->view->spacing.spacing.left +
|
||||||
|
icon->view->spacing.spacing.right;
|
||||||
|
ih = icon->current.h +
|
||||||
|
icon->view->spacing.icon.top +
|
||||||
|
icon->view->spacing.icon.bottom +
|
||||||
|
icon->view->spacing.spacing.top +
|
||||||
|
icon->view->spacing.spacing.bottom;
|
||||||
|
/* need to redo whole grid... ??? */
|
||||||
|
if ((iw > icon->view->options.arrange.grid.w) ||
|
||||||
|
(ih > icon->view->options.arrange.grid.h))
|
||||||
{
|
{
|
||||||
Evas_List l;
|
Evas_List l;
|
||||||
|
|
||||||
icon->view->options.arrange.grid.next_pos = 0;
|
icon->view->options.arrange.grid.next_pos = 0;
|
||||||
icon->view->options.arrange.grid.w = icon->current.w;
|
icon->view->options.arrange.grid.w = iw;
|
||||||
icon->view->options.arrange.grid.h = icon->current.h;
|
icon->view->options.arrange.grid.h = ih;
|
||||||
for (l = icon->view->icons; l; l = l->next)
|
for (l = icon->view->icons; l; l = l->next)
|
||||||
{
|
{
|
||||||
E_Icon *ic;
|
E_Icon *ic;
|
||||||
|
|
117
src/view.c
117
src/view.c
|
@ -359,6 +359,12 @@ e_window_expose(Eevent * ev)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Eevent *
|
||||||
|
e_view_get_current_event(void)
|
||||||
|
{
|
||||||
|
return current_ev;
|
||||||
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
e_view_filter_file(E_View *v, char *file)
|
e_view_filter_file(E_View *v, char *file)
|
||||||
{
|
{
|
||||||
|
@ -559,7 +565,7 @@ e_view_handle_fs(EfsdEvent *ev)
|
||||||
break;
|
break;
|
||||||
case EFSD_CMD_CHMOD:
|
case EFSD_CMD_CHMOD:
|
||||||
break;
|
break;
|
||||||
case EFSD_CMD_GETMIME:
|
case EFSD_CMD_GETFILE:
|
||||||
/* printf("Getmime event %i\n",
|
/* printf("Getmime event %i\n",
|
||||||
ev->efsd_reply_event.command.efsd_file_cmd.id);
|
ev->efsd_reply_event.command.efsd_file_cmd.id);
|
||||||
*/ if (ev->efsd_reply_event.status == SUCCESS)
|
*/ if (ev->efsd_reply_event.status == SUCCESS)
|
||||||
|
@ -569,76 +575,10 @@ e_view_handle_fs(EfsdEvent *ev)
|
||||||
icon = e_view_find_icon_by_path(ev->efsd_reply_event.command.efsd_file_cmd.file);
|
icon = e_view_find_icon_by_path(ev->efsd_reply_event.command.efsd_file_cmd.file);
|
||||||
if (icon)
|
if (icon)
|
||||||
{
|
{
|
||||||
char m1[4096], m2[4096], *p;
|
|
||||||
|
|
||||||
/* figure out icons to use */
|
/* figure out icons to use */
|
||||||
strcpy(m1, (char*)ev->efsd_reply_event.data);
|
e_icon_apply_mime(icon, (char*)ev->efsd_reply_event.data);
|
||||||
p = strchr(m1, '/');
|
e_icon_get_icon(icon);
|
||||||
if (p) *p = 0;
|
e_icon_pre_show(icon);
|
||||||
p = strchr((char*)ev->efsd_reply_event.data, '/');
|
|
||||||
if (p) strcpy(m2, &(p[1]));
|
|
||||||
else m2[0] = 0;
|
|
||||||
icon->info.mime.base = strdup(m1);
|
|
||||||
icon->info.mime.type = strdup(m2);
|
|
||||||
|
|
||||||
printf("%s: %s/%s\n", icon->file, icon->info.mime.base, icon->info.mime.type);
|
|
||||||
sprintf(m1, "%s/data/icons/%s/%s.db",PACKAGE_DATA_DIR,
|
|
||||||
icon->info.mime.base,
|
|
||||||
icon->info.mime.type);
|
|
||||||
if (!e_file_exists(m1))
|
|
||||||
{
|
|
||||||
int found;
|
|
||||||
|
|
||||||
printf("fallback 0\n");
|
|
||||||
strcpy(m2, icon->info.mime.type);
|
|
||||||
p = strrchr(m2, '-');
|
|
||||||
found = 0;
|
|
||||||
while (p)
|
|
||||||
{
|
|
||||||
p[0] = 0;
|
|
||||||
sprintf(m1, "%s/data/icons/%s/%s.db",PACKAGE_DATA_DIR,
|
|
||||||
icon->info.mime.base, m2);
|
|
||||||
printf("try %s\n", m1);
|
|
||||||
if (e_file_exists(m1))
|
|
||||||
{
|
|
||||||
found = 1;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
p = strrchr(m2, '-');
|
|
||||||
}
|
|
||||||
if (!found)
|
|
||||||
{
|
|
||||||
printf("fallback 1\n");
|
|
||||||
sprintf(m1, "%s/data/icons/%s/default.db",PACKAGE_DATA_DIR,
|
|
||||||
icon->info.mime.base);
|
|
||||||
if (!e_file_exists(m1))
|
|
||||||
{
|
|
||||||
printf("fallback 2\n");
|
|
||||||
sprintf(m1, "%s/data/icons/unknown/unknown.db",PACKAGE_DATA_DIR);
|
|
||||||
if (!e_file_exists(m1))
|
|
||||||
{
|
|
||||||
printf("fallback 3\n");
|
|
||||||
sprintf(m1, "%s/data/icons/unknown/default.db",PACKAGE_DATA_DIR);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
IF_FREE(icon->info.icon.normal);
|
|
||||||
IF_FREE(icon->info.icon.selected);
|
|
||||||
IF_FREE(icon->info.icon.clicked);
|
|
||||||
sprintf(m2, "%s:/icon/normal", m1);
|
|
||||||
icon->info.icon.normal = strdup(m2);
|
|
||||||
sprintf(m2, "%s:/icon/selected", m1);
|
|
||||||
icon->info.icon.selected = strdup(m2);
|
|
||||||
sprintf(m2, "%s:/icon/clicked", m1);
|
|
||||||
icon->info.icon.clicked = strdup(m2);
|
|
||||||
if (icon->info.link)
|
|
||||||
{
|
|
||||||
/* icon->info.icon.normal = strdup(PACKAGE_DATA_DIR"/data/icons/file/default.db:/icon/normal");
|
|
||||||
icon->info.icon.selected = strdup(PACKAGE_DATA_DIR"/data/icons/file/default.db:/icon/selected");
|
|
||||||
icon->info.icon.clicked = strdup(PACKAGE_DATA_DIR"/data/icons/file/default.db:/icon/clicked");
|
|
||||||
*/ }
|
|
||||||
e_icon_pre_show(icon);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -677,7 +617,8 @@ e_view_handle_fs(EfsdEvent *ev)
|
||||||
icon->info.link_get_id =
|
icon->info.link_get_id =
|
||||||
efsd_readlink(e_fs_get_connection(), f);
|
efsd_readlink(e_fs_get_connection(), f);
|
||||||
}
|
}
|
||||||
icon->info.is_exe = e_file_can_exec(st);
|
if ((!icon->info.link_get_id) && (!icon->info.is_dir))
|
||||||
|
icon->info.is_exe = e_file_can_exec(st);
|
||||||
icon->changed = 1;
|
icon->changed = 1;
|
||||||
icon->view->changed = 1;
|
icon->view->changed = 1;
|
||||||
/* if (!icon->info.link_get_id)
|
/* if (!icon->info.link_get_id)
|
||||||
|
@ -789,6 +730,30 @@ e_view_new(void)
|
||||||
v->options.back_pixmap = 0;
|
v->options.back_pixmap = 0;
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
{
|
||||||
|
Ebits_Object obj;
|
||||||
|
int pl, pr, pt, pb;
|
||||||
|
|
||||||
|
pl = pr = pt = pb = 0;
|
||||||
|
v->spacing.inset.left = 2;
|
||||||
|
v->spacing.inset.right = 2;
|
||||||
|
v->spacing.inset.top = 2;
|
||||||
|
v->spacing.inset.bottom = 2;
|
||||||
|
obj = ebits_load(PACKAGE_DATA_DIR"/data/config/appearance/default/selections/file.bits.db");
|
||||||
|
if (obj)
|
||||||
|
{
|
||||||
|
ebits_get_insets(obj, &pl, &pr, &pt, &pb);
|
||||||
|
ebits_free(obj);
|
||||||
|
}
|
||||||
|
v->spacing.icon.left = pl;
|
||||||
|
v->spacing.icon.right = pr;
|
||||||
|
v->spacing.icon.top = pt;
|
||||||
|
v->spacing.icon.bottom = pb;
|
||||||
|
v->spacing.spacing.left = 1;
|
||||||
|
v->spacing.spacing.right = 1;
|
||||||
|
v->spacing.spacing.top = 1;
|
||||||
|
v->spacing.spacing.bottom = 1;
|
||||||
|
}
|
||||||
views = evas_list_append(views, v);
|
views = evas_list_append(views, v);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -824,7 +789,7 @@ e_view_set_dir(E_View *v, char *dir)
|
||||||
/* v->monitor_id = efsd_start_monitor(e_fs_get_connection(), v->dir); */
|
/* v->monitor_id = efsd_start_monitor(e_fs_get_connection(), v->dir); */
|
||||||
v->monitor_id = efsd_start_monitor(e_fs_get_connection(), v->dir,
|
v->monitor_id = efsd_start_monitor(e_fs_get_connection(), v->dir,
|
||||||
2, efsd_op_get_stat(),
|
2, efsd_op_get_stat(),
|
||||||
efsd_op_get_mimetype());
|
efsd_op_get_filetype());
|
||||||
v->is_listing = 1;
|
v->is_listing = 1;
|
||||||
v->changed = 1;
|
v->changed = 1;
|
||||||
}
|
}
|
||||||
|
@ -834,6 +799,8 @@ e_view_scroll(E_View *v, int dx, int dy)
|
||||||
{
|
{
|
||||||
Evas_List l;
|
Evas_List l;
|
||||||
|
|
||||||
|
v->viewport.x -= dx;
|
||||||
|
v->viewport.y -= dy;
|
||||||
for (l = v->icons; l; l = l->next)
|
for (l = v->icons; l; l = l->next)
|
||||||
{
|
{
|
||||||
E_Icon *icon;
|
E_Icon *icon;
|
||||||
|
@ -846,6 +813,12 @@ e_view_scroll(E_View *v, int dx, int dy)
|
||||||
v->changed = 1;
|
v->changed = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
e_view_scroll_to(E_View *v, int x, int y)
|
||||||
|
{
|
||||||
|
e_view_scroll(v, v->viewport.x - x, v->viewport.y - y);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
e_view_add_icon(E_View *v, E_Icon *icon)
|
e_view_add_icon(E_View *v, E_Icon *icon)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue