/* TODO:
*
+ * - if we resize efm while we're generating files, we crash
+ *
+ * - convert current layout scheme to canvas layout (AmigaOS style)
+ *
+ * - begin configuration dialogs
+ *
+ * - allow per dir bg
+ *
+ * - allow custom icon images
+ *
* - add ability to have icons on desktop (this works, but we need some fixes)
* files should go on ~/.e/e/desktop for example.
*
*
* - allow for icon movement inside the canvas
*
- * - add metadata system which allows us to save icon positions and will
- * eventually allow us to have custom icon sizes, custom bgs per dir...
- *
* - double check dir monitoring. note: when we are in a dir that is constantly
* changing, we cant keep calling redraw_new as it will kill us.
*
/* BUGS:
*
- * - we need to look at the deletion / free'ing routines.
- *
* - Closing Efm window while its thumbnailing causes a segv
*
* - Deleting a dir causes a segv
struct _E_Fm_Icon
{
E_Fm_File *file;
- Evas_Object *icon_object;
+ Evas_Object *icon_obj;
E_Fm_Smart_Data *sd;
struct {
Evas_Object *clip_obj;
Evas_Object *layout;
Evas_Object *object;
- Evas_Object *entry_object;
+ Evas_Object *entry_obj;
E_Fm_Dir_Metadata *meta;
Ecore_Evas *ecore_evas;
Evas *evas;
Ecore_X_Window win;
- E_Fm_Icon *icon_object;
+ E_Fm_Icon *icon_obj;
Evas_Object *image_object;
} drag;
sd->child.x = x;
sd->child.y = y;
- e_icon_layout_clip_freeze(sd->layout);
+ e_icon_canvas_xy_freeze(sd->layout);
evas_object_move(sd->layout, sd->x - sd->child.x, sd->y - sd->child.y);
- e_icon_layout_clip_thaw(sd->layout);
-
+ e_icon_canvas_xy_thaw(sd->layout);
evas_object_smart_callback_call(sd->object, "changed", NULL);
}
{
if (sd->h < sd->child.h) *y = sd->child.h - sd->h;
else *y = 0;
- }
-
+ }
}
void
if (y) *y = sd->child.y;
}
-
void
e_fm_geometry_virtual_get(Evas_Object *object, Evas_Coord *w, Evas_Coord *h)
{
edje_object_part_swallow(sd->edje_obj, "background", bg);
}
+Evas_Object *
+e_fm_icon_create(void *data)
+{
+ E_Fm_Icon *icon;
+
+ if(!data) return NULL;
+ icon = data;
+
+ icon->icon_obj = e_fm_icon_add(icon->sd->evas);
+ e_fm_icon_file_set(icon->icon_obj, icon->file);
+ evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_DOWN, _e_fm_icon_mouse_down_cb, icon);
+ evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_UP, _e_fm_icon_mouse_up_cb, icon);
+ evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_IN, _e_fm_icon_mouse_in_cb, icon);
+ evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_OUT, _e_fm_icon_mouse_out_cb, icon);
+ evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_MOVE, _e_fm_icon_mouse_move_cb, icon->sd);
+ evas_object_show(icon->icon_obj);
+ return icon->icon_obj;
+}
+
+void
+e_fm_icon_destroy(Evas_Object *obj, void *data)
+{
+ E_Fm_Icon *icon;
+
+ icon = data;
+ e_thumb_generate_end(icon->file->path);
+ evas_object_del(icon->icon_obj);
+}
+
/* local subsystem functions */
static void
_e_fm_smart_add(Evas_Object *object)
sd->icon_info.x_space = 12;
sd->icon_info.y_space = 10;
+ sd->child.x = 0;
+ sd->child.y = 0;
+
sd->timer_int = 0.001;
sd->timer = NULL;
evas_object_event_callback_add(sd->event_obj, EVAS_CALLBACK_MOUSE_MOVE,
_e_fm_mouse_move_cb, sd);
- sd->layout = e_icon_layout_add(sd->evas);
- e_icon_layout_viewport_set(sd->layout, sd->edje_obj);
- e_icon_layout_spacing_set(sd->layout, sd->icon_info.x_space, sd->icon_info.y_space);
+ sd->layout = e_icon_canvas_add(sd->evas);
+ e_icon_canvas_viewport_set(sd->layout, sd->edje_obj);
+ e_icon_canvas_spacing_set(sd->layout, sd->icon_info.x_space, sd->icon_info.y_space);
evas_object_show(sd->layout);
sd->clip_obj = evas_object_rectangle_add(sd->evas);
}
evas_object_smart_data_set(object, sd);
-
- if (getcwd(dir, sizeof(dir)))
- _e_fm_dir_set(sd, dir);
}
static void
evas_object_del(sd->clip_obj);
evas_object_del(sd->edje_obj);
evas_object_del(sd->layout);
- if (sd->entry_object) evas_object_del(sd->entry_object);
+ if (sd->entry_obj) evas_object_del(sd->entry_obj);
if (sd->menu) e_object_del(E_OBJECT(sd->menu));
evas_event_thaw(evas_object_evas_get(object));
evas_object_move(sd->edje_obj, x, y);
evas_object_move(sd->clip_obj, x, y);
evas_object_move(sd->event_obj, x, y);
-// evas_object_move(sd->layout, sd->x - sd->child.x, sd->y - sd->child.y);
}
static void
evas_object_resize(sd->edje_obj, w, h);
evas_object_resize(sd->clip_obj, w, h);
evas_object_resize(sd->event_obj, w, h);
-// evas_object_resize(sd->layout, w, h);
- e_icon_layout_width_fix(sd->layout, w);
- e_icon_layout_virtual_size_get(sd->layout, &sd->child.w, &sd->child.h);
+// e_icon_canvas_width_fix(sd->layout, w);
+// e_icon_canvas_virtual_size_get(sd->layout, &sd->child.w, &sd->child.h);
sd->conf.main->width = w;
sd->conf.main->height = h;
return;
evas_object_show(sd->edje_obj);
-// evas_object_show(sd->layout);
evas_object_show(sd->clip_obj);
}
{
E_Event_Fm_Reconfigure *ev;
- e_icon_layout_redraw_force(sd->layout);
+ e_icon_canvas_redraw_force(sd->layout);
if(sd->frozen)
return;
if (e_fm_file_rename(icon->file, name))
{
- e_fm_icon_title_set(icon->icon_object, name);
+ e_fm_icon_title_set(icon->icon_obj, name);
}
}
}
icon->sd->files = evas_list_remove(icon->sd->files, icon);
- e_icon_layout_freeze(icon->sd->layout);
- e_icon_layout_unpack(icon->icon_object);
- e_icon_layout_thaw(icon->sd->layout);
+ e_icon_canvas_freeze(icon->sd->layout);
+ e_icon_canvas_unpack(icon->icon_obj);
+ e_icon_canvas_thaw(icon->sd->layout);
_e_fm_redraw(icon->sd);
_e_fm_file_free(icon);
}
icon = data;
- icon->sd->entry_object = e_entry_add(icon->sd->evas);
- evas_object_focus_set(icon->sd->entry_object, 1);
- evas_object_show(icon->sd->entry_object);
- e_entry_cursor_show(icon->sd->entry_object);
+ icon->sd->entry_obj = e_entry_add(icon->sd->evas);
+ evas_object_focus_set(icon->sd->entry_obj, 1);
+ evas_object_show(icon->sd->entry_obj);
+ e_entry_cursor_show(icon->sd->entry_obj);
- e_fm_icon_edit_entry_set(icon->icon_object, icon->sd->entry_object);
- e_fm_icon_title_set(icon->icon_object, "");
+ e_fm_icon_edit_entry_set(icon->icon_obj, icon->sd->entry_obj);
+ e_fm_icon_title_set(icon->icon_obj, "");
e_fm_mouse_up_handler = ecore_event_handler_add(ECORE_X_EVENT_MOUSE_BUTTON_UP,
_e_fm_win_mouse_up_cb, icon);
e_grabinput_get(icon->sd->win->evas_win, 1, icon->sd->win->evas_win);
- e_entry_cursor_move_at_start(icon->sd->entry_object);
- e_entry_text_set(icon->sd->entry_object, icon->file->name);
+ e_entry_cursor_move_at_start(icon->sd->entry_obj);
+ e_entry_text_set(icon->sd->entry_obj, icon->file->name);
e_fm_grab_time = ecore_time_get();
}
list = ecore_list_new();
ecore_list_set_free_cb(list, free);
/* TODO: use sorting function here */
- heap = ecore_sheap_new(ECORE_COMPARE_CB(strcmp), ecore_list_nodes(list));
+ heap = ecore_sheap_new(ECORE_COMPARE_CB(strcasecmp), ecore_list_nodes(list));
while(dp = readdir(dir2))
{
if ((!strcmp(dp->d_name, ".") || (!strcmp (dp->d_name, "..")))) continue;
if(sd->meta)
{
Evas_List *l;
- printf("Loaded meta! (%s) %p\n", sd->meta->name, sd->meta->files);
+
for(l = sd->meta->files; l; l = l->next)
{
E_Fm_Icon_Metadata *im;
im = l->data;
- printf("META: file = %s\n", im->name);
}
}
-
+ else
+ e_icon_canvas_width_fix(sd->layout, sd->w);
+
/* Reset position */
sd->position = 0.0;
_e_fm_file_free(sd->files->data);
sd->files = evas_list_remove_list(sd->files, sd->files);
}
- e_icon_layout_reset(sd->layout);
+ e_icon_canvas_reset(sd->layout);
/* Get new files */
if (sd->monitor) ecore_file_monitor_del(sd->monitor);
icon->file = e_fm_file_new(path);
icon->file->mode = 0040000;
icon->file->type = E_FM_FILE_TYPE_DIRECTORY;
- icon->icon_object = e_fm_icon_add(sd->evas);
+ icon->icon_obj = e_fm_icon_add(sd->evas);
icon->sd = sd;
- e_fm_icon_file_set(icon->icon_object, icon->file);
+ e_fm_icon_file_set(icon->icon_obj, icon->file);
sd->files = evas_list_prepend(sd->files, icon);
- e_icon_layout_pack(sd->layout, icon->icon_object);
- e_icon_layout_icon_callbacks_set(icon->icon_object, e_fm_icon_appear_cb, e_fm_icon_disappear_cb, NULL);
- evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_DOWN, _e_fm_icon_mouse_down_cb, icon);
- evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_UP, _e_fm_icon_mouse_up_cb, icon);
- evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_IN, _e_fm_icon_mouse_in_cb, icon);
- evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_OUT, _e_fm_icon_mouse_out_cb, icon);
+ e_icon_canvas_pack(sd->layout, icon->icon_obj, e_fm_icon_create, e_fm_icon_destroy, icon);
+ evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_DOWN, _e_fm_icon_mouse_down_cb, icon);
+ evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_UP, _e_fm_icon_mouse_up_cb, icon);
+ evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_IN, _e_fm_icon_mouse_in_cb, icon);
+ evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_OUT, _e_fm_icon_mouse_out_cb, icon);
}
}
i = 0;
sd = data;
- e_icon_layout_freeze(sd->layout);
+ e_icon_canvas_freeze(sd->layout);
while (i < 2)
{
}
else
{
- icon->icon_object = e_fm_icon_add(sd->evas);
+ icon->icon_obj = e_fm_icon_add(sd->evas);
icon->sd = sd;
- e_fm_icon_file_set(icon->icon_object, icon->file);
+ e_fm_icon_file_set(icon->icon_obj, icon->file);
sd->files = evas_list_append(sd->files, icon);
- evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_DOWN, _e_fm_icon_mouse_down_cb, icon);
- evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_UP, _e_fm_icon_mouse_up_cb, icon);
- evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_IN, _e_fm_icon_mouse_in_cb, icon);
- evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_OUT, _e_fm_icon_mouse_out_cb, icon);
- evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_MOVE, _e_fm_icon_mouse_move_cb, sd);
- evas_object_show(icon->icon_object);
- e_icon_layout_pack(sd->layout, icon->icon_object);
- e_icon_layout_icon_callbacks_set(icon->icon_object, e_fm_icon_appear_cb, e_fm_icon_disappear_cb, NULL);
+ evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_DOWN, _e_fm_icon_mouse_down_cb, icon);
+ evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_UP, _e_fm_icon_mouse_up_cb, icon);
+ evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_IN, _e_fm_icon_mouse_in_cb, icon);
+ evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_OUT, _e_fm_icon_mouse_out_cb, icon);
+ evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_MOVE, _e_fm_icon_mouse_move_cb, sd);
+ evas_object_show(icon->icon_obj);
+ if(sd->meta)
+ {
+ E_Fm_Icon_Metadata *im;
+ if((im = evas_hash_find(sd->meta->files_hash, icon->file->name)) != NULL)
+ {
+ //printf("packing old icon at %d %d\n", im->x, im->y);
+ e_icon_canvas_pack_at_location(sd->layout, icon->icon_obj, e_fm_icon_create, e_fm_icon_destroy, icon, im->x, im->y);
+ }
+ else
+ {
+ E_Fm_Icon_Metadata *im;
+
+ //printf("packing new icon!\n");
+ im = e_fm_icon_meta_generate(icon->icon_obj);
+ if (im)
+ {
+ sd->meta->files = evas_list_append(sd->meta->files, im);
+ sd->meta->files_hash = evas_hash_add(sd->meta->files_hash, icon->file->name, im);
+ }
+ e_icon_canvas_pack(sd->layout, icon->icon_obj, e_fm_icon_create, e_fm_icon_destroy, icon);
+ }
+ }
+ else
+ {
+ E_Fm_Icon_Metadata *im;
+
+ //printf("packing new icon!\n");
+ sd->meta = calloc(1, sizeof(E_Fm_Dir_Metadata));
+ sd->meta->files = NULL;
+ im = e_fm_icon_meta_generate(icon->icon_obj);
+ if (im)
+ {
+ sd->meta->files = evas_list_append(sd->meta->files, im);
+ sd->meta->files_hash = evas_hash_add(sd->meta->files_hash, icon->file->name, im);
+ }
+ e_icon_canvas_pack(sd->layout, icon->icon_obj, e_fm_icon_create, e_fm_icon_destroy, icon);
+ }
}
i++;
sd->files_raw = evas_list_remove_list(sd->files_raw, sd->files_raw);
}
- e_icon_layout_thaw(sd->layout);
+ e_icon_canvas_thaw(sd->layout);
- e_icon_layout_virtual_size_get(sd->layout, &sd->child.w, &sd->child.h);
+ e_icon_canvas_virtual_size_get(sd->layout, &sd->child.w, &sd->child.h);
evas_object_smart_callback_call(sd->object, "changed", NULL);
if(!sd->files_raw) {
sd->timer = NULL;
- if(!sd->meta)
- {
- printf("Generating Meta!\n");
- _e_fm_dir_meta_generate(sd);
- _e_fm_dir_meta_save(sd);
- }
+ if(sd->meta)
+ _e_fm_dir_meta_save(sd);
return 0;
}
_e_fm_dir_pop(const char *path)
{
char *start, *end, *dir;
- int i;
- i = 0;
start = strchr(path, '/');
end = strrchr(path ,'/');
free(icon);
return;
}
- icon->icon_object = e_fm_icon_add(sd->evas);
+ icon->icon_obj = e_fm_icon_add(sd->evas);
icon->sd = sd;
- e_icon_layout_freeze(sd->layout);
- e_fm_icon_file_set(icon->icon_object, icon->file);
- //evas_object_resize(icon->icon_object, sd->icon_info.w, sd->icon_info.h);
- evas_object_show(icon->icon_object);
- e_icon_layout_pack(sd->layout, icon->icon_object);
- e_icon_layout_icon_callbacks_set(icon->icon_object, e_fm_icon_appear_cb, e_fm_icon_disappear_cb, NULL);
- evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_DOWN, _e_fm_icon_mouse_down_cb, icon);
- evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_UP, _e_fm_icon_mouse_up_cb, icon);
- evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_IN, _e_fm_icon_mouse_in_cb, icon);
- evas_object_event_callback_add(icon->icon_object, EVAS_CALLBACK_MOUSE_OUT, _e_fm_icon_mouse_out_cb, icon);
- e_icon_layout_thaw(sd->layout);
+ e_icon_canvas_freeze(sd->layout);
+ e_fm_icon_file_set(icon->icon_obj, icon->file);
+ evas_object_show(icon->icon_obj);
+ e_icon_canvas_pack(sd->layout, icon->icon_obj, e_fm_icon_create, e_fm_icon_destroy, icon);
+ evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_DOWN, _e_fm_icon_mouse_down_cb, icon);
+ evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_UP, _e_fm_icon_mouse_up_cb, icon);
+ evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_IN, _e_fm_icon_mouse_in_cb, icon);
+ evas_object_event_callback_add(icon->icon_obj, EVAS_CALLBACK_MOUSE_OUT, _e_fm_icon_mouse_out_cb, icon);
+ e_icon_canvas_thaw(sd->layout);
sd->files = evas_list_prepend(sd->files, icon);
_e_fm_redraw(sd);
break;
if (!strcmp(icon->file->path, path))
{
sd->files = evas_list_remove_list(sd->files, l);
- e_icon_layout_freeze(sd->layout);
- e_icon_layout_unpack(icon->icon_object);
- e_icon_layout_thaw(sd->layout);
+ e_icon_canvas_freeze(sd->layout);
+ e_icon_canvas_unpack(icon->icon_obj);
+ e_icon_canvas_thaw(sd->layout);
_e_fm_file_free(icon);
_e_fm_redraw(sd);
break;
static void
_e_fm_file_free(E_Fm_Icon *icon)
{
- e_icon_layout_unpack(icon->icon_object);
- evas_object_del(icon->icon_object);
+ e_icon_canvas_unpack(icon->icon_obj);
+ evas_object_del(icon->icon_obj);
e_object_del(E_OBJECT(icon->file));
/*
if (file->menu)
E_Fm_Icon *icon;
icon = l->data;
- e_fm_icon_signal_emit(icon->icon_object, "unclicked", "");
+ e_fm_icon_signal_emit(icon->icon_obj, "unclicked", "");
icon->state.selected = 0;
}
sd->selection.files = evas_list_free(sd->selection.files);
icon->sd->selection.current.file = icon;
icon->sd->selection.current.ptr = icon_ptr;
if (icon->state.selected) return;
- e_fm_icon_signal_emit(icon->icon_object, "clicked", "");
+ e_fm_icon_signal_emit(icon->icon_obj, "clicked", "");
icon->sd->selection.files = evas_list_append(icon->sd->selection.files, icon);
icon->state.selected = 1;
}
icon->sd->selection.current.file = icon;
icon->sd->selection.current.ptr = icon_ptr;
if (icon->state.selected) return;
- e_fm_icon_signal_emit(icon->icon_object, "hilight", "");
+ e_fm_icon_signal_emit(icon->icon_obj, "hilight", "");
}
static void
icon = l->data;
- evas_object_geometry_get(icon->icon_object, &xx, &yy, &ww, &hh);
+ evas_object_geometry_get(icon->icon_obj, &xx, &yy, &ww, &hh);
if (E_INTERSECTS(x, y, w, h, xx, yy, ww, hh))
{
if (!evas_list_find(icon->sd->selection.band.files, icon))
_e_fm_selections_del(E_Fm_Icon *icon)
{
if (!icon->state.selected) return;
- e_fm_icon_signal_emit(icon->icon_object, "unclicked", "");
+ e_fm_icon_signal_emit(icon->icon_obj, "unclicked", "");
icon->sd->selection.files = evas_list_remove(icon->sd->selection.files, icon);
if (icon->sd->selection.current.file == icon)
{
for (l = sd->files; l; l = l->next)
{
icon = l->data;
- e_fm_icon_signal_emit(icon->icon_object, "default", "");
+ e_fm_icon_signal_emit(icon->icon_obj, "default", "");
}
edje_object_signal_emit(sd->edje_obj, "default", "");
}
}
}
-// TODO:
-// - send signals to edje for animations etc...
static void
_e_fm_icon_mouse_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
{
icon->sd->drag.start = 1;
icon->sd->drag.x = icon->sd->win->x + ev->canvas.x;
icon->sd->drag.y = icon->sd->win->y + ev->canvas.y;
- icon->sd->drag.icon_object = icon;
+ icon->sd->drag.icon_obj = icon;
}
if (!icon->state.selected)
for (l = icon->sd->files; l; l = l->next)
{
i = l->data;
- e_fm_icon_signal_emit(i->icon_object, "default", "");
+ e_fm_icon_signal_emit(i->icon_obj, "default", "");
}
edje_object_signal_emit(icon->sd->edje_obj, "default", "");
}
ev = event_info;
icon = data;
- e_fm_icon_signal_emit(icon->icon_object, "mousein", "");
+ e_fm_icon_signal_emit(icon->icon_obj, "mousein", "");
}
static void
ev = event_info;
icon = data;
- e_fm_icon_signal_emit(icon->icon_object, "mouseout", "");
+ e_fm_icon_signal_emit(icon->icon_obj, "mouseout", "");
}
static void
sd = data;
if(sd->win)
- icon = sd->drag.icon_object;
+ icon = sd->drag.icon_obj;
if (!icon) return;
snprintf(data, sizeof(data), "file://%s", icon->file->path);
ecore_evas_geometry_get(sd->win->ecore_evas, &cx, &cy, NULL, NULL);
- evas_object_geometry_get(icon->icon_object, &x, &y, &w, &h);
+ evas_object_geometry_get(icon->icon_obj, &x, &y, &w, &h);
drag = e_drag_new(sd->win->container, cx + x, cy + y,
drop_types, 1, strdup(data), strlen(data),
_e_fm_drop_done_cb);
t = ecore_time_get() - e_fm_grab_time;
if (t < 1.0) return 1;
- name = e_entry_text_get(icon->sd->entry_object);
- e_fm_icon_edit_entry_set(icon->icon_object, NULL);
- evas_object_focus_set(icon->sd->entry_object, 0);
- evas_object_del(icon->sd->entry_object);
- icon->sd->entry_object = NULL;
+ name = e_entry_text_get(icon->sd->entry_obj);
+ e_fm_icon_edit_entry_set(icon->icon_obj, NULL);
+ evas_object_focus_set(icon->sd->entry_obj, 0);
+ evas_object_del(icon->sd->entry_obj);
+ icon->sd->entry_obj = NULL;
_e_fm_file_rename(icon, name);
for (l = sd->files; l; l = l->next)
{
icon = l->data;
- e_fm_icon_signal_emit(icon->icon_object, "disable", "");
+ e_fm_icon_signal_emit(icon->icon_obj, "disable", "");
}
return;
}
if(!strcmp(icon->file->name, file))
{
_e_fm_selections_add(l->data, l);
- e_fm_icon_signal_emit(icon->icon_object, "default", "");
+ e_fm_icon_signal_emit(icon->icon_obj, "default", "");
if(!anchor)
{
- evas_object_geometry_get(icon->icon_object, &x, &y, &w, &h);
+ evas_object_geometry_get(icon->icon_obj, &x, &y, &w, &h);
if(!E_CONTAINS(sd->x, sd->y, sd->w, sd->h, x, y, w, h))
{
{
Evas_Coord x, y, w, h;
icon = l->data;
- evas_object_geometry_get(icon->icon_object, &x, &y, &w, &h);
+ evas_object_geometry_get(icon->icon_obj, &x, &y, &w, &h);
if(!E_CONTAINS(sd->x, sd->y, sd->w, sd->h, x, y, w, h))
{
E_Event_Fm_Reconfigure *ev;
l = sd->selection.current.ptr;
icon = l->data;
- evas_object_geometry_get(icon->icon_object, &x, &y, NULL, NULL);
+ evas_object_geometry_get(icon->icon_obj, &x, &y, NULL, NULL);
x2 = x + 1;
l = l->prev;
while(l && x != x2)
{
icon = l->data;
- evas_object_geometry_get(icon->icon_object, &x2, &y2, NULL, NULL);
+ evas_object_geometry_get(icon->icon_obj, &x2, &y2, NULL, NULL);
if (evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
{
if(icon->state.selected)
E_Fm_Icon *icon;
Evas_Coord x, y, w, h;
icon = l->data;
- evas_object_geometry_get(icon->icon_object, &x, &y, &w, &h);
+ evas_object_geometry_get(icon->icon_obj, &x, &y, &w, &h);
if(!E_CONTAINS(sd->x, sd->y, sd->w, sd->h, x, y, w, h))
{
E_Event_Fm_Reconfigure *ev;
l = sd->selection.current.ptr;
icon = l->data;
- evas_object_geometry_get(icon->icon_object, &x, &y, NULL, NULL);
+ evas_object_geometry_get(icon->icon_obj, &x, &y, NULL, NULL);
x2 = x + 1;
l = l->next;
while(l && x != x2)
{
icon = l->data;
- evas_object_geometry_get(icon->icon_object, &x2, &y2, NULL, NULL);
+ evas_object_geometry_get(icon->icon_obj, &x2, &y2, NULL, NULL);
if (evas_key_modifier_is_set(evas_key_modifier_get(sd->evas), "Control"))
{
if(icon->state.selected)
Evas_Coord x, y, w, h;
icon = l->data;
- evas_object_geometry_get(icon->icon_object, &x, &y, &w, &h);
+ evas_object_geometry_get(icon->icon_obj, &x, &y, &w, &h);
if(!E_CONTAINS(sd->x, sd->y, sd->w, sd->h, x, y, w, h))
{
E_Event_Fm_Reconfigure *ev;
E_Fm_Icon *icon;
Evas_Coord x, y, w, h;
icon = prev->data;
- evas_object_geometry_get(icon->icon_object, &x, &y, &w, &h);
+ evas_object_geometry_get(icon->icon_obj, &x, &y, &w, &h);
if(!E_CONTAINS(sd->x, sd->y, sd->w, sd->h, x, y, w, h))
{
E_Event_Fm_Reconfigure *ev;
E_Fm_Icon *icon;
Evas_Coord x, y, w, h;
icon = next->data;
- evas_object_geometry_get(icon->icon_object, &x, &y, &w, &h);
+ evas_object_geometry_get(icon->icon_obj, &x, &y, &w, &h);
if (!E_CONTAINS(sd->x, sd->y, sd->w, sd->h, x, y, w, h))
{
E_Event_Fm_Reconfigure *ev;
for (l = sd->files; l; l = l->next)
{
icon = l->data;
- e_fm_icon_signal_emit(icon->icon_object, "default", "");
+ e_fm_icon_signal_emit(icon->icon_obj, "default", "");
}
edje_object_signal_emit(sd->edje_obj, "default", "");
}
for (l = sd->files; l; l = l->next)
{
icon = l->data;
- e_fm_icon_signal_emit(icon->icon_object, "default", "");
+ e_fm_icon_signal_emit(icon->icon_obj, "default", "");
}
edje_object_signal_emit(sd->edje_obj, "default", "");
}
for (l = sd->files; l; l = l->next)
{
icon = l->data;
- e_fm_icon_signal_emit(icon->icon_object, "default", "");
+ e_fm_icon_signal_emit(icon->icon_obj, "default", "");
}
edje_object_signal_emit(sd->edje_obj, "default", "");
}
for (l = sd->files; l; l = l->next)
{
icon = l->data;
- e_fm_icon_signal_emit(icon->icon_object, "default", "");
+ e_fm_icon_signal_emit(icon->icon_obj, "default", "");
}
edje_object_signal_emit(sd->edje_obj, "default", "");
}
E_Fm_Icon *icon;
icon = l->data;
- im = e_fm_icon_meta_generate(icon->icon_object);
+ im = e_fm_icon_meta_generate(icon->icon_obj);
if (im)
{
m->files = evas_list_append(m->files, im);
int ret;
if (!sd->meta) return 0;
+
+
+ {
+ Evas_List *l;
+
+ for(l = sd->meta->files; l; l = l->next)
+ {
+ E_Fm_Icon_Metadata *m;
+
+ m = l->data;
+ //printf("Saving meta: %d %d\n", m->x, m->y);
+ }
+ }
+
hash = _e_fm_dir_meta_dir_id(sd->dir);
snprintf(buf, sizeof(buf), "%s/%s", meta_path, hash);
ef = eet_open(buf, EET_FILE_MODE_WRITE);
--- /dev/null
+/*
+ * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
+ */
+#include "e.h"
+
+/* PROTOTYPES - same all the time */
+typedef struct _CFData CFData;
+typedef struct _E_Cfg_Bg_Data E_Cfg_Bg_Data;
+
+static void *_create_data(E_Config_Dialog *cfd);
+static void _free_data(E_Config_Dialog *cfd, CFData *cfdata);
+static int _basic_apply_data(E_Config_Dialog *cfd, CFData *cfdata);
+static int _advanced_apply_data(E_Config_Dialog *cfd, CFData *cfdata);
+static Evas_Object *_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata);
+static Evas_Object *_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata);
+
+/* Actual config data we will be playing with whil the dialog is active */
+struct _CFData
+{
+ /*- BASIC -*/
+ char *file ;
+ /*- ADVANCED -*/
+
+};
+
+struct _E_Cfg_Bg_Data
+{
+ E_Config_Dialog *cfd;
+ char *file;
+};
+
+/* a nice easy setup function that does the dirty work */
+E_Config_Dialog *
+e_int_config_background(E_Container *con)
+{
+ E_Config_Dialog *cfd;
+ E_Config_Dialog_View v;
+
+ /* methods */
+ v.create_cfdata = _create_data;
+ v.free_cfdata = _free_data;
+ v.basic.apply_cfdata = _basic_apply_data;
+ v.basic.create_widgets = _basic_create_widgets;
+ v.advanced.apply_cfdata = _advanced_apply_data;
+ v.advanced.create_widgets = _advanced_create_widgets;
+ /* create config diaolg for NULL object/data */
+ cfd = e_config_dialog_new(con, _("Background Settings"), NULL, 0, &v, NULL);
+ //e_dialog_resizable_set(cfd->dia, 1);
+ return cfd;
+}
+
+/**--CREATE--**/
+static void
+_fill_data(CFData *cfdata)
+{
+ /* TODO: get debfault bg */
+
+}
+
+static void *
+_create_data(E_Config_Dialog *cfd)
+{
+ /* Create cfdata - cfdata is a temporary block of config data that this
+ * dialog will be dealing with while configuring. it will be applied to
+ * the running systems/config in the apply methods
+ */
+ CFData *cfdata;
+
+ cfdata = E_NEW(CFData, 1);
+ _fill_data(cfdata);
+ return cfdata;
+}
+
+static void
+_free_data(E_Config_Dialog *cfd, CFData *cfdata)
+{
+ /* Free the cfdata */
+ free(cfdata);
+}
+
+/**--APPLY--**/
+static int
+_basic_apply_data(E_Config_Dialog *cfd, CFData *cfdata)
+{
+ E_Zone *z;
+ E_Desk *d;
+
+ z = e_zone_current_get(cfd->con);
+ d = e_desk_current_get(z);
+ /* Actually take our cfdata settings and apply them in real life */
+ printf("file: %s\n", cfdata->file);
+ //e_bg_add(cfd->con, z, 0, 0, cfdata->file);
+ E_FREE(e_config->desktop_default_background);
+ e_config->desktop_default_background = strdup(cfdata->file);
+ e_bg_update();
+ return 1; /* Apply was OK */
+}
+
+static int
+_advanced_apply_data(E_Config_Dialog *cfd, CFData *cfdata)
+{
+ /* Actually take our cfdata settings and apply them in real life */
+
+ return 1; /* Apply was OK */
+}
+
+void
+_e_config_bg_cb_standard(void *data)
+{
+ E_Cfg_Bg_Data *d;
+ char *thumb;
+
+ d = data;
+ e_widget_image_object_set(d->cfd->data, e_thumb_evas_object_get(d->file, d->cfd->dia->win->evas, 160, 120, 1));
+ free(thumb);
+}
+
+
+/**--GUI--**/
+static Evas_Object *
+_basic_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata)
+{
+ /* generate the core widget layout for a basic dialog */
+ Evas_Object *o, *ob, *fr, *im = NULL;
+ Evas_Object *il;
+ char buf[4096];
+ char *homedir;
+ Evas_Object *bg;
+
+ _fill_data(cfdata);
+
+ o = e_widget_table_add(evas, 0);
+
+ cfdata->file = NULL;
+ il = e_widget_ilist_add(evas, 48, 48, &(cfdata->file));
+ //e_widget_ilist_selector_set(il, 1);
+ homedir = e_user_homedir_get();
+ if (homedir)
+ {
+ snprintf(buf, sizeof(buf), "%s/.e/e/backgrounds", homedir);
+ free(homedir);
+ }
+
+ if ((ecore_file_exists(buf)) && (ecore_file_is_dir(buf)))
+ {
+ Ecore_List *bgs;
+
+ bgs = ecore_file_ls(buf);
+ if (bgs)
+ {
+ char *bg;
+ char fullbg[PATH_MAX];
+ Evas_Object *o;
+ Ecore_Evas *eebuf;
+ Evas *evasbuf;
+ Evas_List *l;
+ int i = 0;
+
+ eebuf = ecore_evas_buffer_new(1, 1);
+ evasbuf = ecore_evas_get(eebuf);
+ o = edje_object_add(evasbuf);
+
+ while ((bg = ecore_list_next(bgs)))
+ {
+ snprintf(fullbg, sizeof(fullbg), "%s/%s", buf, bg);
+ if (ecore_file_is_dir(fullbg))
+ continue;
+
+ /* minimum theme requirements */
+ if(edje_object_file_set(o, fullbg, "desktop/background"))
+ {
+ Evas_Object *o = NULL;
+ char *noext, *ext;
+ E_Cfg_Bg_Data *cb_data;
+
+ o = e_thumb_generate_begin(fullbg, 48, 48, cfd->dia->win->evas, &o, NULL, NULL);
+
+ ext = strrchr(bg ,'.');
+
+ if (!ext)
+ {
+ noext = strdup(bg);
+ }
+ else
+ {
+ noext = malloc((ext - bg + 1));
+ if (bg)
+ {
+ memcpy(noext, bg, ext - bg);
+ noext[ext - bg] = 0;
+ }
+ }
+ cb_data = E_NEW(E_Cfg_Bg_Data, 1);
+ cb_data->cfd = cfd;
+ cb_data->file = strdup(fullbg);
+ e_widget_ilist_append(il, o, noext, _e_config_bg_cb_standard, cb_data, fullbg);
+ if(!strcmp(e_config->desktop_default_background, fullbg))
+ {
+ e_widget_ilist_select_set(il, i);
+ bg = edje_object_add(evas);
+ edje_object_file_set(bg, e_config->desktop_default_background, "desktop/background");
+ im = e_widget_image_add_from_object(evas, bg, 160, 120);
+ }
+
+ i++;
+ }
+ }
+
+ evas_object_del(o);
+ ecore_evas_free(eebuf);
+ ecore_list_destroy(bgs);
+ }
+ }
+ cfd->data = im;
+ e_widget_ilist_go(il);
+ e_widget_min_size_set(il, 240, 320);
+ e_widget_table_object_append(o, il, 0, 0, 1, 2, 1, 1, 1, 1);
+ fr = e_widget_framelist_add(evas, "Preview", 0);
+ if(im == NULL)
+ {
+ bg = edje_object_add(evas);
+ e_theme_edje_object_set(bg, "base/theme/background", "desktop/background");
+ im = e_widget_image_add_from_object(evas, bg, 160, 120);
+ }
+ e_widget_min_size_set(fr, 180, 150);
+ e_widget_table_object_append(o, fr, 1, 0, 1, 1, 1, 1, 1, 1);
+ e_widget_framelist_object_append(fr, im);
+
+ return o;
+}
+
+static Evas_Object *
+_advanced_create_widgets(E_Config_Dialog *cfd, Evas *evas, CFData *cfdata)
+{
+ /* generate the core widget layout for an advanced dialog */
+ Evas_Object *o, *ob, *of;
+
+ _fill_data(cfdata);
+
+ o = e_widget_list_add(evas, 0, 0);
+
+ return o;
+}