parent
afb38c8d86
commit
718be21b4b
6
src/e.h
6
src/e.h
|
@ -332,6 +332,12 @@ struct _E_View
|
|||
} arrange;
|
||||
} options;
|
||||
|
||||
struct {
|
||||
struct {
|
||||
int left, right, top, bottom;
|
||||
} inset, icon, spacing;
|
||||
} spacing;
|
||||
|
||||
Evas evas;
|
||||
struct {
|
||||
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 *icon;
|
||||
Ev_Mouse_Down *ev;
|
||||
Eevent *event;
|
||||
|
||||
event = e_view_get_current_event();
|
||||
ev = event->event;
|
||||
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->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 *icon;
|
||||
Ev_Mouse_Up *ev;
|
||||
Eevent *event;
|
||||
|
||||
event = e_view_get_current_event();
|
||||
ev = event->event;
|
||||
icon = _data;
|
||||
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->view->changed = 1;
|
||||
}
|
||||
|
@ -80,6 +100,84 @@ e_icon_new(void)
|
|||
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
|
||||
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 */
|
||||
{
|
||||
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)
|
||||
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;
|
||||
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.w;
|
||||
y *= icon->view->options.arrange.grid.h;
|
||||
x += (icon->view->options.arrange.grid.w - icon->current.w) / 2;
|
||||
y += (icon->view->options.arrange.grid.h - icon->current.h);
|
||||
x += (icon->view->options.arrange.grid.w -
|
||||
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);
|
||||
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 */
|
||||
{
|
||||
/* need to redo whole grid... */
|
||||
if ((icon->current.w > icon->view->options.arrange.grid.w) ||
|
||||
(icon->current.h > icon->view->options.arrange.grid.h))
|
||||
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;
|
||||
/* need to redo whole grid... ??? */
|
||||
if ((iw > icon->view->options.arrange.grid.w) ||
|
||||
(ih > icon->view->options.arrange.grid.h))
|
||||
{
|
||||
Evas_List l;
|
||||
|
||||
icon->view->options.arrange.grid.next_pos = 0;
|
||||
icon->view->options.arrange.grid.w = icon->current.w;
|
||||
icon->view->options.arrange.grid.h = icon->current.h;
|
||||
icon->view->options.arrange.grid.w = iw;
|
||||
icon->view->options.arrange.grid.h = ih;
|
||||
for (l = icon->view->icons; l; l = l->next)
|
||||
{
|
||||
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
|
||||
e_view_filter_file(E_View *v, char *file)
|
||||
{
|
||||
|
@ -559,7 +565,7 @@ e_view_handle_fs(EfsdEvent *ev)
|
|||
break;
|
||||
case EFSD_CMD_CHMOD:
|
||||
break;
|
||||
case EFSD_CMD_GETMIME:
|
||||
case EFSD_CMD_GETFILE:
|
||||
/* printf("Getmime event %i\n",
|
||||
ev->efsd_reply_event.command.efsd_file_cmd.id);
|
||||
*/ 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);
|
||||
if (icon)
|
||||
{
|
||||
char m1[4096], m2[4096], *p;
|
||||
|
||||
/* figure out icons to use */
|
||||
strcpy(m1, (char*)ev->efsd_reply_event.data);
|
||||
p = strchr(m1, '/');
|
||||
if (p) *p = 0;
|
||||
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);
|
||||
e_icon_apply_mime(icon, (char*)ev->efsd_reply_event.data);
|
||||
e_icon_get_icon(icon);
|
||||
e_icon_pre_show(icon);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -677,7 +617,8 @@ e_view_handle_fs(EfsdEvent *ev)
|
|||
icon->info.link_get_id =
|
||||
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->view->changed = 1;
|
||||
/* if (!icon->info.link_get_id)
|
||||
|
@ -789,6 +730,30 @@ e_view_new(void)
|
|||
v->options.back_pixmap = 0;
|
||||
#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);
|
||||
|
||||
/*
|
||||
|
@ -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,
|
||||
2, efsd_op_get_stat(),
|
||||
efsd_op_get_mimetype());
|
||||
efsd_op_get_filetype());
|
||||
v->is_listing = 1;
|
||||
v->changed = 1;
|
||||
}
|
||||
|
@ -834,6 +799,8 @@ e_view_scroll(E_View *v, int dx, int dy)
|
|||
{
|
||||
Evas_List l;
|
||||
|
||||
v->viewport.x -= dx;
|
||||
v->viewport.y -= dy;
|
||||
for (l = v->icons; l; l = l->next)
|
||||
{
|
||||
E_Icon *icon;
|
||||
|
@ -846,6 +813,12 @@ e_view_scroll(E_View *v, int dx, int dy)
|
|||
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
|
||||
e_view_add_icon(E_View *v, E_Icon *icon)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue