diff --git a/src/e_dir.c b/src/e_dir.c new file mode 100644 index 000000000..f64b80f6e --- /dev/null +++ b/src/e_dir.c @@ -0,0 +1,722 @@ +#include "file.h" +#include "e_dir.h" +#include "e_view_machine.h" +#include "view.h" +#include "icons.h" +#include "util.h" +#include "libefsd.h" +#include "e_file.h" +#include "globals.h" + +static void e_dir_handle_fs_restart(void *data); +static void e_dir_handle_fs(EfsdEvent * ev); +static void e_dir_handle_efsd_event_reply(EfsdEvent * ev); +static void e_dir_handle_efsd_event_reply_stat(EfsdEvent * ev); +static void e_dir_handle_efsd_event_reply_readlink(EfsdEvent * ev); +static void e_dir_handle_efsd_event_reply_getfiletype(EfsdEvent * ev); +static void e_dir_handle_efsd_event_reply_getmeta(EfsdEvent * ev); + +static void e_dir_cleanup(E_Dir * d); +static void e_dir_bg_reload_timeout(int val, void *data); +static void e_dir_set_default_background(E_Dir * d); + +void +e_dir_init(void) +{ + D_ENTER; + e_fs_add_event_handler(e_dir_handle_fs); + D_RETURN; +} + +static void +e_dir_cleanup(E_Dir * d) +{ + D_ENTER; + + if (!d) + D_RETURN; + + efsd_stop_monitor(e_fs_get_connection(), d->dir, TRUE); + if (d->restarter) + e_fs_del_restart_handler(d->restarter); + + d->restarter = NULL; + e_view_machine_unregister_dir(d); + + e_object_cleanup(E_OBJECT(d)); + + D_RETURN; +} + +E_Dir * +e_dir_new(void) +{ + E_Dir *d; + + D_ENTER; + + d = NEW(E_Dir, 1); + ZERO(d, E_Dir, 1); + d->dir = NULL; + d->views = NULL; + + e_object_init(E_OBJECT(d), (E_Cleanup_Func) e_dir_cleanup); + + e_view_machine_register_dir(d); + D_RETURN_(d); +} + +void +e_dir_register_view(E_Dir * d, E_View * v) +{ + D_ENTER; + v->dir = d; + d->views = evas_list_append(d->views, v); +/* dont ref the first time */ + if (d->views->next) + e_object_ref(E_OBJECT(v->dir)); + D_RETURN; +} + +void +e_dir_unregister_view(E_View * v) +{ + D_ENTER; + v->dir->views = evas_list_remove(v->dir->views, v); + e_object_unref(E_OBJECT(v->dir)); + D_RETURN; +} + +static void +e_dir_set_default_background(E_Dir * d) +{ + char buf[PATH_MAX]; + + D_ENTER; + + if (!d) + D_RETURN; + + IF_FREE(d->bg_file); + + if (d->is_desktop) + snprintf(buf, PATH_MAX, "%s/default.bg.db", e_config_get("backgrounds")); + else + snprintf(buf, PATH_MAX, "%s/view.bg.db", e_config_get("backgrounds")); + + e_strdup(d->bg_file, buf); + snprintf(buf, PATH_MAX, "background_reload:%s", d->dir); + + ecore_add_event_timer(buf, 0.5, e_dir_bg_reload_timeout, 0, d); + + D_RETURN; +} + +static void +e_dir_handle_fs_restart(void *data) +{ + E_Dir *d; + + D_ENTER; + d = data; + D("e_dir_handle_fs_restart\n"); + if (e_fs_get_connection()) + { + EfsdOptions *ops; + + /* FIXME restart with metadata pending for views */ + + ops = efsd_ops(3, + efsd_op_get_stat(), + efsd_op_get_filetype(), efsd_op_list_all()); + d->monitor_id = efsd_start_monitor(e_fs_get_connection(), d->dir, + ops, TRUE); + + } + D("restarted monitor id (connection = %p), %i for %s\n", + e_fs_get_connection(), d->monitor_id, d->dir); + + D_RETURN; +} + +void +e_dir_set_dir(E_Dir * d, char *dir) +{ + D_ENTER; + + if (!d) + D_RETURN; + +/* stop monitoring old dir */ + if ((d->dir) && (d->monitor_id)) + { + efsd_stop_monitor(e_fs_get_connection(), d->dir, TRUE); + d->monitor_id = 0; + } + + IF_FREE(d->dir); + d->dir = e_file_realpath(dir); + +/* start monitoring new dir */ + d->restarter = e_fs_add_restart_handler(e_dir_handle_fs_restart, d); + if (e_fs_get_connection()) + { + EfsdOptions *ops; + + ops = efsd_ops(3, + efsd_op_get_stat(), + efsd_op_get_filetype(), efsd_op_list_all()); + d->monitor_id = efsd_start_monitor(e_fs_get_connection(), d->dir, + ops, TRUE); + D("monitor id for %s = %i\n", d->dir, d->monitor_id); + } + D_RETURN; +} + +static void +e_dir_handle_fs(EfsdEvent * ev) +{ + D_ENTER; + + if (!ev) + D_RETURN; + + switch (ev->type) + { + case EFSD_EVENT_FILECHANGE: + switch (ev->efsd_filechange_event.changetype) + { + case EFSD_FILE_CREATED: + e_dir_file_added(ev->efsd_filechange_event.id, + ev->efsd_filechange_event.file); + break; + case EFSD_FILE_EXISTS: + e_dir_file_added(ev->efsd_filechange_event.id, + ev->efsd_filechange_event.file); + break; + case EFSD_FILE_DELETED: + e_dir_file_deleted(ev->efsd_filechange_event.id, + ev->efsd_filechange_event.file); + break; + case EFSD_FILE_CHANGED: + e_dir_file_changed(ev->efsd_filechange_event.id, + ev->efsd_filechange_event.file); + break; + case EFSD_FILE_MOVED: + e_dir_file_moved(ev->efsd_filechange_event.id, + ev->efsd_filechange_event.file); + break; + case EFSD_FILE_END_EXISTS: + break; + default: + break; + } + break; + case EFSD_EVENT_REPLY: + e_dir_handle_efsd_event_reply(ev); + break; + default: + break; + } + D_RETURN; +} + +static void +e_dir_handle_efsd_event_reply_getfiletype(EfsdEvent * ev) +{ + E_File *f; + char *file = NULL; + Evas_List l; + E_Dir *dir; + + char *m, *p; + char mime[PATH_MAX], base[PATH_MAX]; + + D_ENTER; + + if (!ev) + D_RETURN; + + if (!ev->efsd_reply_event.errorcode == 0) + D_RETURN; + + if ((file = efsd_event_filename(ev))) + { + file = e_file_get_file(file); + } + dir = e_dir_find_by_monitor_id(efsd_event_id(ev)); + + f = e_file_get_by_name(dir->files, file); +/* if its not in the list we care about, its filetype is meaningless */ + if (!f) + D_RETURN; + + m = ev->efsd_reply_event.data; + p = strchr(m, '/'); + if (p) + { + strcpy(base, m); + strcpy(mime, p + 1); + p = strchr(base, '/'); + *p = 0; + } + else + { + strcpy(base, m); + strcpy(mime, "unknown"); + } + e_file_set_mime(f, base, mime); + + for (l = dir->views; l; l = l->next) + { + E_View *v = (E_View *) l->data; + E_Icon *ic = e_icon_find_by_file(v, f->file); + + /* Try to update the GUI. + * It's just a try because we need to have the file's stat + * info as well. --cK. + */ + e_icon_update_state(ic); + e_icon_initial_show(ic); + } + D_RETURN; +} + +static void +e_dir_handle_efsd_event_reply_stat(EfsdEvent * ev) +{ + E_Dir *d; + E_File *f; + Evas_List l; + + D_ENTER; + + if (!ev) + D_RETURN; + + if (!ev->efsd_reply_event.errorcode == 0) + D_RETURN; + + d = e_dir_find_by_monitor_id(efsd_event_id(ev)); + f = e_file_get_by_name(d->files, e_file_get_file(efsd_event_filename(ev))); + /* if its not in the list we care about, return */ + if (!f) + D_RETURN; + + /* When everything went okay and we can find a dir, + * set the file stat data for the file and try to update the gui. + * It's just a try because we need to have received the filetype + * info too. --cK. */ + f->stat = *((struct stat *)efsd_event_data(ev)); + for (l = d->views; l; l = l->next) + { + E_View *v = (E_View *) l->data; + E_Icon *ic = e_icon_find_by_file(v, f->file); + + e_icon_update_state(ic); + e_icon_initial_show(ic); + } + + D_RETURN; +} + +static void +e_dir_handle_efsd_event_reply_readlink(EfsdEvent * ev) +{ + E_Dir *d; + E_File *f; + Evas_List l; + + D_ENTER; + + if (!ev) + D_RETURN; + + if (!ev->efsd_reply_event.errorcode == 0) + D_RETURN; + + d = e_dir_find_by_monitor_id(efsd_event_id(ev)); + f = e_file_get_by_name(d->files, e_file_get_file(efsd_event_filename(ev))); + if (f) + { + e_file_set_link(f, (char *)efsd_event_data(ev)); + } + for (l = d->views; l; l = l->next) + { + E_View *v = (E_View *) l->data; + E_Icon *ic = e_icon_find_by_file(v, f->file); + + e_icon_update_state(ic); + e_icon_initial_show(ic); + } + + D_RETURN; +} + +static void +e_dir_handle_efsd_event_reply_getmeta(EfsdEvent * ev) +{ + Evas_List l; + EfsdCmdId cmd; + + D_ENTER; + + if (!ev) + D_RETURN; + + cmd = efsd_event_id(ev); + for (l = VM->views; l; l = l->next) + { + E_View *v; + + v = l->data; + /* ignore metadata for desktops */ + if (v->dir->is_desktop) + continue; + if (v->geom_get.x == cmd) + { + v->geom_get.x = 0; + if (efsd_metadata_get_type(ev) == EFSD_INT) + { + if (ev->efsd_reply_event.errorcode == 0) + efsd_metadata_get_int(ev, &(v->location.x)); + else + v->location.x = 0; + } + } + else if (v->geom_get.y == cmd) + { + v->geom_get.y = 0; + if (efsd_metadata_get_type(ev) == EFSD_INT) + { + if (ev->efsd_reply_event.errorcode == 0) + efsd_metadata_get_int(ev, &(v->location.y)); + else + v->location.y = 0; + + } + } + else if (v->geom_get.w == cmd) + { + v->geom_get.w = 0; + if (efsd_metadata_get_type(ev) == EFSD_INT) + { + if (ev->efsd_reply_event.errorcode == 0) + efsd_metadata_get_int(ev, &(v->size.w)); + else + v->size.w = 400; + } + } + else if (v->geom_get.h == cmd) + { + v->geom_get.h = 0; + if (ev->efsd_reply_event.errorcode == 0) + { + if (ev->efsd_reply_event.errorcode == 0) + efsd_metadata_get_int(ev, &(v->size.h)); + else + v->size.h = 401; + } + } + /* FIXME currently, the bg info is not set via metadata */ +/* + * else if (v->getbg == cmd) + * { + * v->getbg = 0; + * if (efsd_metadata_get_type(ev) == EFSD_STRING) + * { + * if (ev->efsd_reply_event.errorcode == 0) + * { + * char buf[PATH_MAX]; + * + * IF_FREE(v->dir->bg_file); + * e_strdup(v->dir->bg_file, efsd_metadata_get_str(ev)); + * snprintf(buf, PATH_MAX, "background_reload:%s", v->dir->dir); + * ecore_add_event_timer(buf, 0.5, e_dir_bg_reload_timeout, 0, v->dir); + * } + * else + * e_dir_set_default_background(v->dir); + * } + * } + */ + /* We have received all metadata we need, display the view */ + if ((!v->geom_get.x) && + (!v->geom_get.y) && + (!v->geom_get.w) && (!v->geom_get.h) && (v->geom_get.busy)) + { + E_Border *b; + + ecore_window_move_resize(v->win.base, v->location.x, v->location.y, + v->size.w, v->size.h); + ecore_window_set_xy_hints(v->win.base, v->location.x, + v->location.y); + v->size.force = 1; + v->geom_get.busy = 0; + if (v->bg) + e_bg_resize(v->bg, v->size.w, v->size.h); + if (v->options.back_pixmap) + e_view_update(v); + b = e_border_adopt(v->win.base, 1); + b->client.internal = 1; + e_border_remove_click_grab(b); + } + } + D_RETURN; +} + +static void +e_dir_handle_efsd_event_reply(EfsdEvent * ev) +{ + D_ENTER; + + if (!ev) + D_RETURN; + + switch (ev->efsd_reply_event.command.type) + { + case EFSD_CMD_REMOVE: + break; + case EFSD_CMD_MOVE: + break; + case EFSD_CMD_SYMLINK: + break; + case EFSD_CMD_LISTDIR: + break; + case EFSD_CMD_MAKEDIR: + break; + case EFSD_CMD_CHMOD: + break; + case EFSD_CMD_GETFILETYPE: + e_dir_handle_efsd_event_reply_getfiletype(ev); + break; + case EFSD_CMD_STAT: + e_dir_handle_efsd_event_reply_stat(ev); + break; + case EFSD_CMD_READLINK: + e_dir_handle_efsd_event_reply_readlink(ev); + break; + case EFSD_CMD_CLOSE: + break; + case EFSD_CMD_SETMETA: + break; + case EFSD_CMD_GETMETA: + e_dir_handle_efsd_event_reply_getmeta(ev); + break; + case EFSD_CMD_STARTMON_DIR: + break; + case EFSD_CMD_STARTMON_FILE: + break; + case EFSD_CMD_STOPMON_DIR: + break; + case EFSD_CMD_STOPMON_FILE: + break; + default: + break; + } + D_RETURN; +} +static void +e_dir_ib_reload_timeout(int val, void *data) +{ + Evas_List l; + E_View *v; + E_Dir *d; + + D_ENTER; + d = data; + + for (l = d->views; l; l = l->next) + { + v = (E_View *) l->data; + e_view_ib_reload(v); + } + D_RETURN; + UN(val); +} + +static void +e_dir_bg_reload_timeout(int val, void *data) +{ + Evas_List l; + E_View *v; + E_Dir *d; + + D_ENTER; + d = data; + + for (l = d->views; l; l = l->next) + { + v = (E_View *) l->data; + e_view_bg_reload(v); + } + D_RETURN; + UN(val); +} + +void +e_dir_file_added(int id, char *file) +{ + Evas_List l; + E_Dir *d; + E_View *v; + E_File *f; + char buf[PATH_MAX]; + + D_ENTER; + + /* if we get a path - ignore it - its not a file in the dir */ + if (!file || file[0] == '/') + D_RETURN; + d = e_dir_find_by_monitor_id(id); + + if (!strcmp(file, ".e_background.bg.db")) + { + IF_FREE(d->bg_file); + snprintf(buf, PATH_MAX, "%s/%s", d->dir, file); + e_strdup(d->bg_file, buf); + snprintf(buf, PATH_MAX, "background_reload:%s", d->dir); + ecore_add_event_timer(buf, 0.5, e_dir_bg_reload_timeout, 0, d); + } + /*else if ((!strcmp(".e_iconbar.db", file)) || + * (!strcmp(".e_iconbar.bits.db", file))) + * { + * snprintf(buf, PATH_MAX, "iconbar_reload:%s", m->dir); + * ecore_add_event_timer(buf, 0.5, e_dir_ib_reload_timeout, 0, m); + * } */ + else if (file[0] != '.') + { + f = e_file_new(file); + d->files = evas_list_append(d->files, f); + /* tell all views for this dir about the new file */ + for (l = d->views; l; l = l->next) + { + v = l->data; + e_view_file_add(v, f); + } + } + D_RETURN; +} + +void +e_dir_file_deleted(int id, char *file) +{ + Evas_List l; + E_File *f; + E_Dir *d; + + D_ENTER; + + if (!file || file[0] == '/') + D_RETURN; + + d = e_dir_find_by_monitor_id(id); + f = e_file_get_by_name(d->files, file); + d->files = evas_list_remove(d->files, f); + + if (!strcmp(file, ".e_background.bg.db")) + { + e_dir_set_default_background(d); + } + /*else if ((!strcmp(".e_iconbar.db", file)) || + * (!strcmp(".e_iconbar.bits.db", file))) + * { + * for (l = m->views; l; l = l->next) + * { + * E_View *v = (E_View *) l->data; + * + * e_object_unref(E_OBJECT(v->iconbar)); + * v->iconbar = NULL; + * } + * } */ + else if (file[0] != '.') + { + for (l = d->views; l; l = l->next) + { + E_View *v = (E_View *) l->data; + + e_view_file_delete(v, f); + } + } + D_RETURN; +} + +void +e_dir_file_changed(int id, char *file) +{ + Evas_List l; + E_Dir *d; + E_File *f; + E_View *v; + char buf[PATH_MAX]; + + D_ENTER; + + if (!file || file[0] == '/') + D_RETURN; + d = e_dir_find_by_monitor_id(id); + f = e_file_get_by_name(d->files, file); + if (!strcmp(file, ".e_background.bg.db")) + { + IF_FREE(d->bg_file); + snprintf(buf, PATH_MAX, "%s/%s", d->dir, file); + e_strdup(d->bg_file, buf); + snprintf(buf, PATH_MAX, "background_reload:%s", d->dir); + ecore_add_event_timer(buf, 0.5, e_dir_bg_reload_timeout, 0, d); + } + else if ((!strcmp(".e_iconbar.db", file)) || + (!strcmp(".e_iconbar.bits.db", file))) + { + snprintf(buf, PATH_MAX, "iconbar_reload:%s", d->dir); + ecore_add_event_timer(buf, 0.5, e_dir_ib_reload_timeout, 0, d); + } + else if (file[0] != '.') + { + for (l = d->views; l; l = l->next) + { + v = l->data; + e_view_file_changed(v, f); + } + } + D_RETURN; +} + +void +e_dir_file_moved(int id, char *file) +{ + Evas_List l; + E_Dir *d; + + D_ENTER; + + if (!file || file[0] == '/') + D_RETURN; + d = e_dir_find_by_monitor_id(id); + for (l = d->views; l; l = l->next) + { + E_View *v = (E_View *) l->data; + E_Icon *ic; + + ic = e_icon_find_by_file(v, file); + if (ic) + { + } + } + D_RETURN; +} + +E_Dir * +e_dir_find_by_monitor_id(int id) +{ + E_Dir *d; + Evas_List l; + + D_ENTER; + + for (l = VM->dirs; l; l = l->next) + { + d = l->data; + if (d->monitor_id == id) + D_RETURN_(d); + } + D_RETURN_(NULL); +} diff --git a/src/e_dir.h b/src/e_dir.h new file mode 100644 index 000000000..a37adc494 --- /dev/null +++ b/src/e_dir.h @@ -0,0 +1,67 @@ +#ifndef E_VIEW_MODEL_H +#define E_VIEW_MODEL_H + +#include "fs.h" +#include "iconbar.h" +#include + +#ifndef E_VIEW_TYPEDEF +#define E_VIEW_TYPEDEF +typedef struct _E_View E_View; +#endif + +#ifndef E_ICON_TYPEDEF +#define E_ICON_TYPEDEF +typedef struct _E_Icon E_Icon; +#endif + +#ifndef E_VIEW_MODEL_TYPEDEF +#define E_VIEW_MODEL_TYPEDEF +typedef struct _E_Dir E_Dir; +#endif + +struct _E_Dir +{ + E_Object o; + + /* The realpath of the view's directory */ + char *dir; + + Evas_List files; + + Evas_Object obj_bg; + + char *bg_file; + + E_FS_Restarter *restarter; + + int monitor_id; + + /* A list of all the views for which an E_Dir is sharing data */ + Evas_List views; + + int is_desktop; +}; + +/** + * e_dir_set_dir - Assigns a directory to a view E_Dir + * @ed: The view E_Dir to set the dir for + * @dir: The directory + * + * Set the directory for a dir and starts monitoring it via efsd. + */ +void e_dir_set_dir(E_Dir * ed, char *dir); + +E_Dir *e_dir_new(void); +void e_dir_init(void); +void e_dir_register_view(E_Dir * d, E_View * v); +void e_dir_unregister_view(E_View * v); + +E_Dir *e_dir_find_by_monitor_id(int id); + +/* Deal with incoming file events */ +void e_dir_file_added(int id, char *file); +void e_dir_file_deleted(int id, char *file); +void e_dir_file_changed(int id, char *file); +void e_dir_file_moved(int id, char *file); +#endif diff --git a/src/view.c b/src/view.c index e509d7400..e106355b0 100644 --- a/src/view.c +++ b/src/view.c @@ -554,19 +554,19 @@ e_bg_move_cb(void *_data, Evas _e, Evas_Object _o, int _b, int _x, int _y) } void -e_view_deselect_all(E_View *v) +e_view_deselect_all(E_View * v) { Evas_List l; D_ENTER; - for (l = v->icons; l; l = l->next) - { - E_Icon *ic; + for (l = v->icons; l; l = l->next) + { + E_Icon *ic; - ic = l->data; - e_icon_deselect(ic); - } + ic = l->data; + e_icon_deselect(ic); + } D_RETURN; } @@ -584,7 +584,7 @@ e_view_deselect_all_except(E_Icon * not_ic) ic = l->data; if (ic != not_ic) - e_icon_deselect(ic); + e_icon_deselect(ic); } D_RETURN; @@ -908,7 +908,7 @@ static void e_configure(Ecore_Event * ev) { Ecore_Event_Window_Configure *e; - E_View *v; + E_View *v; D_ENTER; @@ -972,17 +972,17 @@ e_configure(Ecore_Event * ev) if (e_view_layout_get_element_geometry(v->layout, "Scrollbar_H", &x, &y, &w, &h)) - { - e_scrollbar_move(v->scrollbar.h, x, y); - e_scrollbar_resize(v->scrollbar.h, w, h); - } + { + e_scrollbar_move(v->scrollbar.h, x, y); + e_scrollbar_resize(v->scrollbar.h, w, h); + } if (e_view_layout_get_element_geometry(v->layout, "Scrollbar_V", &x, &y, &w, &h)) - { - e_scrollbar_move(v->scrollbar.v, x, y); - e_scrollbar_resize(v->scrollbar.v, w, h); - } + { + e_scrollbar_move(v->scrollbar.v, x, y); + e_scrollbar_resize(v->scrollbar.v, w, h); + } } e_scrollbar_move(v->scrollbar.v, @@ -1005,16 +1005,16 @@ static void e_property(Ecore_Event * ev) { Ecore_Event_Window_Configure *e; - E_View *v; + E_View *v; D_ENTER; e = ev->event; if (e && e->win) { - if ((v = e_view_machine_get_view_by_base_window(e->win))) - { - } + if ((v = e_view_machine_get_view_by_base_window(e->win))) + { + } } D_RETURN; @@ -1024,15 +1024,15 @@ static void e_unmap(Ecore_Event * ev) { Ecore_Event_Window_Unmap *e; - E_View *v; + E_View *v; D_ENTER; e = ev->event; if (e && e->win) { - if ((v = e_view_machine_get_view_by_base_window(e->win))) - { + if ((v = e_view_machine_get_view_by_base_window(e->win))) + { } } @@ -1043,14 +1043,14 @@ static void e_visibility(Ecore_Event * ev) { Ecore_Event_Window_Unmap *e; - E_View *v; + E_View *v; D_ENTER; e = ev->event; if (e && e->win) { - if ((v = e_view_machine_get_view_by_base_window(e->win))) + if ((v = e_view_machine_get_view_by_base_window(e->win))) { } } @@ -1062,14 +1062,14 @@ static void e_focus_in(Ecore_Event * ev) { Ecore_Event_Window_Focus_In *e; - E_View *v; + E_View *v; D_ENTER; e = ev->event; if (e && e->win) { - if ((v = e_view_machine_get_view_by_base_window(e->win))) + if ((v = e_view_machine_get_view_by_base_window(e->win))) { } } @@ -1081,14 +1081,14 @@ static void e_focus_out(Ecore_Event * ev) { Ecore_Event_Window_Focus_Out *e; - E_View *v; + E_View *v; D_ENTER; e = ev->event; if (e && e->win) { - if ((v = e_view_machine_get_view_by_base_window(e->win))) + if ((v = e_view_machine_get_view_by_base_window(e->win))) { } } @@ -1100,14 +1100,14 @@ static void e_delete(Ecore_Event * ev) { Ecore_Event_Window_Delete *e; - E_View *v; + E_View *v; D_ENTER; e = ev->event; if (e && e->win) { - if ((v = e_view_machine_get_view_by_base_window(e->win))) + if ((v = e_view_machine_get_view_by_base_window(e->win))) { e_object_unref(E_OBJECT(v)); D_RETURN; @@ -1136,14 +1136,14 @@ e_dnd_status(Ecore_Event * ev) * int ok; * } Ecore_Event_Dnd_Drop_Status; */ - E_View *v; + E_View *v; D_ENTER; e = ev->event; if (e && e->win) { - if ((v = e_view_machine_get_view_by_base_window(e->win))) + if ((v = e_view_machine_get_view_by_base_window(e->win))) { if (dnd_pending_mode != E_DND_DELETED && dnd_pending_mode != E_DND_COPIED) @@ -1172,14 +1172,14 @@ static void e_wheel(Ecore_Event * ev) { Ecore_Event_Wheel *e; - E_View *v; + E_View *v; D_ENTER; e = ev->event; if (e && e->win) { - if ((v = e_view_machine_get_view_by_main_window(e->win))) + if ((v = e_view_machine_get_view_by_main_window(e->win))) { } } @@ -1191,15 +1191,15 @@ static void e_key_down(Ecore_Event * ev) { Ecore_Event_Key_Down *e; - E_View *v; + E_View *v; D_ENTER; e = ev->event; if (e && e->win) { - if ((v = e_view_machine_get_view_by_main_window(e->win)) - || (v = e_view_machine_get_view_by_base_window(e->win))) + if ((v = e_view_machine_get_view_by_main_window(e->win)) + || (v = e_view_machine_get_view_by_base_window(e->win))) { if (!strcmp(e->key, "Up")) { @@ -1244,14 +1244,14 @@ static void e_key_up(Ecore_Event * ev) { Ecore_Event_Key_Up *e; - E_View *v; + E_View *v; D_ENTER; e = ev->event; if (e && e->win) { - if ((v = e_view_machine_get_view_by_base_window(e->win))) + if ((v = e_view_machine_get_view_by_base_window(e->win))) { } } @@ -1263,7 +1263,7 @@ static void e_mouse_down(Ecore_Event * ev) { Ecore_Event_Mouse_Down *e; - E_View *v; + E_View *v; D_ENTER; @@ -1271,7 +1271,7 @@ e_mouse_down(Ecore_Event * ev) current_ev = ev; if (e && e->win) { - if ((v = e_view_machine_get_view_by_main_window(e->win))) + if ((v = e_view_machine_get_view_by_main_window(e->win))) { int focus_mode; @@ -1294,7 +1294,7 @@ static void e_mouse_up(Ecore_Event * ev) { Ecore_Event_Mouse_Up *e; - E_View *v; + E_View *v; D_ENTER; @@ -1302,7 +1302,7 @@ e_mouse_up(Ecore_Event * ev) current_ev = ev; if (e && e->win) { - if ((v = e_view_machine_get_view_by_main_window(e->win))) + if ((v = e_view_machine_get_view_by_main_window(e->win))) { evas_event_button_up(v->evas, e->x, e->y, e->button); current_ev = NULL; @@ -1318,7 +1318,7 @@ static void e_mouse_move(Ecore_Event * ev) { Ecore_Event_Mouse_Move *e; - E_View *v; + E_View *v; D_ENTER; @@ -1326,7 +1326,7 @@ e_mouse_move(Ecore_Event * ev) current_ev = ev; if (e && e->win) { - if ((v = e_view_machine_get_view_by_main_window(e->win))) + if ((v = e_view_machine_get_view_by_main_window(e->win))) { evas_event_move(v->evas, e->x, e->y); current_ev = NULL; @@ -1342,7 +1342,7 @@ static void e_mouse_in(Ecore_Event * ev) { Ecore_Event_Window_Enter *e; - E_View *v; + E_View *v; D_ENTER; @@ -1350,9 +1350,9 @@ e_mouse_in(Ecore_Event * ev) current_ev = ev; if (e && e->win) { - if ((v = e_view_machine_get_view_by_main_window(e->win))) + if ((v = e_view_machine_get_view_by_main_window(e->win))) { - if (v->dir->is_desktop) + if (v->is_desktop) { evas_event_enter(v->evas); } @@ -1369,7 +1369,7 @@ static void e_mouse_out(Ecore_Event * ev) { Ecore_Event_Window_Leave *e; - E_View *v; + E_View *v; D_ENTER; @@ -1377,7 +1377,7 @@ e_mouse_out(Ecore_Event * ev) current_ev = ev; if (e && e->win) { - if ((v = e_view_machine_get_view_by_main_window(e->win))) + if ((v = e_view_machine_get_view_by_main_window(e->win))) { evas_event_leave(v->evas); current_ev = NULL; @@ -1393,7 +1393,7 @@ static void e_window_expose(Ecore_Event * ev) { Ecore_Event_Window_Expose *e; - E_View *v; + E_View *v; D_ENTER; @@ -1401,7 +1401,7 @@ e_window_expose(Ecore_Event * ev) current_ev = ev; if (e && e->win) { - if ((v = e_view_machine_get_view_by_main_window(e->win))) + if ((v = e_view_machine_get_view_by_main_window(e->win))) { if (!(v->pmap)) evas_update_rect(v->evas, e->x, e->y, e->w, e->h); @@ -1590,14 +1590,13 @@ e_view_cleanup(E_View * v) * not via a timeout, because we will destroy the object after this.*/ e_view_geometry_record(v); - if (v->iconbar) { /*e_iconbar_save_out_final(v->iconbar); */ e_object_unref(E_OBJECT(v->iconbar)); } if (v->bg) - e_bg_free(v->bg); + e_bg_free(v->bg); if (v->scrollbar.h) e_object_unref(E_OBJECT(v->scrollbar.h)); if (v->scrollbar.v) @@ -1605,7 +1604,6 @@ e_view_cleanup(E_View * v) if (v->layout) e_object_unref(E_OBJECT(v->layout)); - ecore_window_destroy(v->win.base); snprintf(name, PATH_MAX, "resort_timer.%s", v->name); @@ -1717,7 +1715,7 @@ e_view_set_dir(E_View * v, char *path, int is_desktop) if (d) { - e_dir_register_view(d, v); + e_dir_register_view(d, v); /* FIXME do a real naming scheme here */ snprintf(buf, PATH_MAX, "%s:%d", v->dir->dir, e_object_get_usecount(E_OBJECT(v->dir))); @@ -1810,12 +1808,12 @@ e_view_realize(E_View * v) if (e_view_layout_get_element_geometry(v->layout, "Icons", &x, &y, &w, &h)) - { - v->spacing.window.l = x; - v->spacing.window.r = v->size.w - (x + w); - v->spacing.window.t = y; - v->spacing.window.b = v->size.h - (y + h); - } + { + v->spacing.window.l = x; + v->spacing.window.r = v->size.w - (x + w); + v->spacing.window.t = y; + v->spacing.window.b = v->size.h - (y + h); + } } v->scrollbar.v = e_scrollbar_new(v); @@ -1841,17 +1839,17 @@ e_view_realize(E_View * v) if (e_view_layout_get_element_geometry(v->layout, "Scrollbar_H", &x, &y, &w, &h)) - { - e_scrollbar_move(v->scrollbar.h, x, y); - e_scrollbar_resize(v->scrollbar.h, w, h); - } + { + e_scrollbar_move(v->scrollbar.h, x, y); + e_scrollbar_resize(v->scrollbar.h, w, h); + } if (e_view_layout_get_element_geometry(v->layout, "Scrollbar_V", &x, &y, &w, &h)) - { - e_scrollbar_move(v->scrollbar.v, x, y); - e_scrollbar_resize(v->scrollbar.v, w, h); - } + { + e_scrollbar_move(v->scrollbar.v, x, y); + e_scrollbar_resize(v->scrollbar.v, w, h); + } } /* I support dnd */ @@ -2195,7 +2193,7 @@ e_dnd_data_request(Ecore_Event * ev) */ e = ev->event; if (!(v = e_view_machine_get_view_by_base_window(e->win))) - D_RETURN; + D_RETURN; if (e->uri_list) { @@ -2306,14 +2304,14 @@ e_dnd_drop_end(Ecore_Event * ev) * * Window win, root, source_win; * * } Ecore_Event_Dnd_Drop_End; */ - E_View *v; + E_View *v; D_ENTER; e = ev->event; if (e && e->win) { - if ((v = e_view_machine_get_view_by_base_window(e->win))) + if ((v = e_view_machine_get_view_by_base_window(e->win))) { if (v_dnd_source) { @@ -2350,14 +2348,14 @@ e_dnd_drop_position(Ecore_Event * ev) * int x, y; * } Ecore_Event_Dnd_Drop_Position; */ - E_View *v; + E_View *v; D_ENTER; e = ev->event; if (e && e->win) { - if ((v = e_view_machine_get_view_by_base_window(e->win))) + if ((v = e_view_machine_get_view_by_base_window(e->win))) { if (v->iconbar) { @@ -2400,14 +2398,14 @@ e_dnd_drop(Ecore_Event * ev) * Window win, root, source_win; * } Ecore_Event_Dnd_Drop; */ - E_View *v; + E_View *v; D_ENTER; e = ev->event; if (e && e->win) { - if ((v = e_view_machine_get_view_by_base_window(e->win))) + if ((v = e_view_machine_get_view_by_base_window(e->win))) { /* Dropped! Handle data */ /* Same view or same underlying dir? Mark to skip action */ @@ -2438,14 +2436,14 @@ e_dnd_drop_request(Ecore_Event * ev) * int copy, link, move; * } Ecore_Event_Dnd_Drop_Request; */ - E_View *v; + E_View *v; D_ENTER; e = ev->event; if (e && e->win) { - if ((v = e_view_machine_get_view_by_base_window(e->win))) + if ((v = e_view_machine_get_view_by_base_window(e->win))) { /* if it exists, we already have the data... */ if ((!dnd_files) && (e->num_files > 0)) @@ -2462,7 +2460,7 @@ e_dnd_drop_request(Ecore_Event * ev) /* if the dnd source is e itself then dont use the event mode */ if ((v == - e_view_machine_get_view_by_base_window(e->source_win))) + e_view_machine_get_view_by_base_window(e->source_win))) { dnd_pending_mode = v->drag.drop_mode; } diff --git a/src/view.h b/src/view.h index 6ea8017d0..2d4bb5d9b 100644 --- a/src/view.h +++ b/src/view.h @@ -212,6 +212,8 @@ struct _E_View scrollbar; int is_listing; + + int is_desktop; E_Iconbar *iconbar;