From 61bf1c59c6ac5dbda7ea613b05de6bdcabfefb9c Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Fri, 29 Sep 2006 06:49:35 +0000 Subject: [PATCH] breking out fm2 into a window and scrollframe in fwin - start of a generic filemanager window. this is more for me to test dnd code and get that all going right etc. etc. so BEWARE. yes it doesnt do a lot of things right - i know. am working on it. :) SVN revision: 26210 --- src/bin/Makefile.am | 4 +- src/bin/e_dialog.c | 4 +- src/bin/e_fm.c | 2 +- src/bin/e_fwin.c | 170 ++++++++++++++++++++++++ src/bin/e_fwin.h | 29 ++++ src/bin/e_includes.h | 1 + src/bin/e_int_config_theme_import.c | 4 +- src/bin/e_int_config_wallpaper_import.c | 4 +- src/bin/e_int_menus.c | 14 ++ 9 files changed, 224 insertions(+), 8 deletions(-) create mode 100644 src/bin/e_fwin.c create mode 100644 src/bin/e_fwin.h diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index c0ff8c8b5..d4e4a7da2 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -171,7 +171,8 @@ e_color_dialog.h \ e_fdo_menu_to_order.h \ e_sys.h \ e_obj_dialog.h \ -e_int_config_transitions.h +e_int_config_transitions.h \ +e_fwin.h enlightenment_src = \ e_user.c \ @@ -318,6 +319,7 @@ e_fdo_menu_to_order.c \ e_sys.c \ e_int_config_transitions.c \ e_obj_dialog.c \ +e_fwin.c \ $(ENLIGHTENMENTHEADERS) enlightenment_SOURCES = \ diff --git a/src/bin/e_dialog.c b/src/bin/e_dialog.c index 2e3273161..4de3808e7 100644 --- a/src/bin/e_dialog.c +++ b/src/bin/e_dialog.c @@ -66,8 +66,8 @@ e_dialog_new(E_Container *con, const char *name, const char *class) evas_object_key_grab(o, "Return", mask, ~mask, 0); mask = 0; evas_object_key_grab(o, "KP_Enter", mask, ~mask, 0); - mask = 0; - evas_object_key_grab(o, "space", mask, ~mask, 0); +// mask = 0; +// evas_object_key_grab(o, "space", mask, ~mask, 0); evas_object_event_callback_add(o, EVAS_CALLBACK_KEY_DOWN, _e_dialog_cb_key_down, dia); diff --git a/src/bin/e_fm.c b/src/bin/e_fm.c index 778df4e4e..97a23a3e1 100644 --- a/src/bin/e_fm.c +++ b/src/bin/e_fm.c @@ -2564,7 +2564,7 @@ _e_fm2_cb_dnd_move(void *data, const char *type, void *event) for (l = sd->icons; l; l = l->next) { ic = l->data; - if (E_INSIDE(ev->x, ev->y, ic->x, ic->y, ic->w, ic->h)) + if (E_INSIDE(ev->x, ev->y, ic->x - ic->sd->pos.x, ic->y - ic->sd->pos.y, ic->w, ic->h)) { printf("OVER %s\n", ic->info.file); if (ic->drag.dnd) return; diff --git a/src/bin/e_fwin.c b/src/bin/e_fwin.c new file mode 100644 index 000000000..bd8289dcf --- /dev/null +++ b/src/bin/e_fwin.c @@ -0,0 +1,170 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ +#include "e.h" + +/* FIXME: fwin - he fm2 filemanager wrapped with a window and scrollframe. + * primitive BUT enough to test generic dnd and fm stuff more easily. don't + * play with this unless u want to help with it. NOT COMPLETE! BEWARE! + */ + +/* local subsystem functions */ +static void _e_fwin_free(E_Fwin *fwin); +static void _e_fwin_cb_delete(E_Win *win); +static void _e_fwin_cb_resize(E_Win *win); +static void _e_fwin_changed(void *data, Evas_Object *obj, void *event_info); +static void _e_fwin_selected(void *data, Evas_Object *obj, void *event_info); + +/* local subsystem globals */ +static Evas_List *fwins = NULL; + +/* externally accessible functions */ +EAPI int +e_fwin_init(void) +{ + return 1; +} + +EAPI int +e_fwin_shutdown(void) +{ + return 1; +} + +EAPI E_Fwin * +e_fwin_new(E_Container *con, const char *dev, const char *path) +{ + E_Fwin *fwin; + char buf[4096]; + Evas_Object *o; + E_Fm2_Config fmc; + + fwin = E_OBJECT_ALLOC(E_Fwin, E_FWIN_TYPE, _e_fwin_free); + if (!fwin) return NULL; + fwin->win = e_win_new(con); + if (!fwin->win) + { + free(fwin); + return NULL; + } + fwins = evas_list_append(fwins, fwin); + e_win_delete_callback_set(fwin->win, _e_fwin_cb_delete); + e_win_resize_callback_set(fwin->win, _e_fwin_cb_resize); + fwin->win->data = fwin; + + /* fm issues: */ + /* FIXME: need a way of going to parent dir */ + /* FIXME: need to handle change-in-place and new window per dir */ + /* FIXME: drop on file on another dir doesnt do drop all */ + /* FIXME: on shift-click then drag - don't deselect */ + /* FIXME: drag multiple files doesnt work */ + + /* FIXME: temporary - a white bg until we have a proper fm specific + * scrollframe etc. + */ + o = evas_object_rectangle_add(e_win_evas_get(fwin->win)); + evas_object_color_set(o, 255, 255, 255, 255); + evas_object_show(o); + fwin->bg_obj = o; + + o = e_fm2_add(e_win_evas_get(fwin->win)); + fwin->fm_obj = o; + memset(&fmc, 0, sizeof(E_Fm2_Config)); + fmc.view.mode = E_FM2_VIEW_MODE_LIST; + fmc.view.open_dirs_in_place = 1; + fmc.view.selector = 0; + fmc.view.single_click = 0; + fmc.view.no_subdir_jump = 0; + fmc.icon.list.w = 24; + fmc.icon.list.h = 24; + fmc.icon.fixed.w = 1; + fmc.icon.fixed.h = 1; + fmc.icon.extension.show = 1; + fmc.list.sort.no_case = 1; + fmc.list.sort.dirs.first = 1; + fmc.list.sort.dirs.last = 0; + fmc.selection.single = 0; + fmc.selection.windows_modifiers = 0; + e_fm2_config_set(o, &fmc); + evas_object_smart_callback_add(o, "dir_changed", + _e_fwin_changed, fwin); + evas_object_smart_callback_add(o, "selected", + _e_fwin_selected, fwin); + e_fm2_path_set(o, dev, path); + evas_object_move(o, 0, 0); + evas_object_show(o); + + o = e_widget_scrollframe_pan_add(e_win_evas_get(fwin->win), fwin->fm_obj, + e_fm2_pan_set, + e_fm2_pan_get, + e_fm2_pan_max_get, + e_fm2_pan_child_size_get); + evas_object_propagate_events_set(fwin->fm_obj, 0); + e_widget_scrollframe_focus_object_set(o, fwin->fm_obj); + fwin->scrollframe_obj = o; + evas_object_move(o, 0, 0); + evas_object_show(o); + + e_fm2_window_object_set(fwin->fm_obj, E_OBJECT(fwin->win)); + + e_widget_focus_set(fwin->scrollframe_obj, 1); + + if (dev) + snprintf(buf, sizeof(buf), "_fwin::/%s/::/%s", dev, path); + else + snprintf(buf, sizeof(buf), "_fwin:/%s", path); + e_win_name_class_set(fwin->win, "E", buf); + /* FIXME: better title */ + e_win_title_set(fwin->win, path); + e_win_size_min_set(fwin->win, 24, 24); + e_win_resize(fwin->win, 280, 200); + e_win_show(fwin->win); + + return fwin; +} + +/* local subsystem functions */ +static void +_e_fwin_free(E_Fwin *fwin) +{ + e_object_del(E_OBJECT(fwin->win)); + fwins = evas_list_remove(fwins, fwin); + free(fwin); +} + +static void +_e_fwin_cb_delete(E_Win *win) +{ + E_Fwin *fwin; + + fwin = win->data; + e_object_del(E_OBJECT(fwin)); +} + +static void +_e_fwin_cb_resize(E_Win *win) +{ + E_Fwin *fwin; + + fwin = win->data; + evas_object_resize(fwin->bg_obj, fwin->win->w, fwin->win->h); + evas_object_resize(fwin->scrollframe_obj, fwin->win->w, fwin->win->h); +} + +static void +_e_fwin_changed(void *data, Evas_Object *obj, void *event_info) +{ + E_Fwin *fwin; + + fwin = data; + if (fwin->scrollframe_obj) + e_widget_scrollframe_child_pos_set(fwin->scrollframe_obj, 0, 0); +} + +static void +_e_fwin_selected(void *data, Evas_Object *obj, void *event_info) +{ + E_Fwin *fwin; + + fwin = data; +} diff --git a/src/bin/e_fwin.h b/src/bin/e_fwin.h new file mode 100644 index 000000000..604dfade4 --- /dev/null +++ b/src/bin/e_fwin.h @@ -0,0 +1,29 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ +#ifdef E_TYPEDEFS + +typedef struct _E_Fwin E_Fwin; + +#else +#ifndef E_FWIN_H +#define E_FWIN_H + +#define E_FWIN_TYPE 0xE0b0101f + +struct _E_Fwin +{ + E_Object e_obj_inherit; + + E_Win *win; + Evas_Object *scrollframe_obj; + Evas_Object *fm_obj; + Evas_Object *bg_obj; +}; + +EAPI int e_fwin_init (void); +EAPI int e_fwin_shutdown (void); +EAPI E_Fwin *e_fwin_new (E_Container *con, const char *dev, const char *path); + +#endif +#endif diff --git a/src/bin/e_includes.h b/src/bin/e_includes.h index 9591349c1..d1df6237d 100644 --- a/src/bin/e_includes.h +++ b/src/bin/e_includes.h @@ -147,3 +147,4 @@ #include "e_sys.h" #include "e_int_config_transitions.h" #include "e_obj_dialog.h" +#include "e_fwin.h" diff --git a/src/bin/e_int_config_theme_import.c b/src/bin/e_int_config_theme_import.c index 33de20918..f51d615a7 100644 --- a/src/bin/e_int_config_theme_import.c +++ b/src/bin/e_int_config_theme_import.c @@ -90,8 +90,8 @@ e_int_config_theme_import(E_Config_Dialog *parent) mask = 0; evas_object_key_grab(o, "KP_Enter", mask, ~mask, 0); mask = 0; - evas_object_key_grab(o, "Space", mask, ~mask, 0); - mask = 0; +// evas_object_key_grab(o, "space", mask, ~mask, 0); +// mask = 0; evas_object_event_callback_add(o, EVAS_CALLBACK_KEY_DOWN, _theme_import_cb_key_down, import); diff --git a/src/bin/e_int_config_wallpaper_import.c b/src/bin/e_int_config_wallpaper_import.c index f6f2f9e2d..32ddf63bc 100644 --- a/src/bin/e_int_config_wallpaper_import.c +++ b/src/bin/e_int_config_wallpaper_import.c @@ -120,8 +120,8 @@ e_int_config_wallpaper_import(E_Config_Dialog *parent) mask = 0; evas_object_key_grab(o, "KP_Enter", mask, ~mask, 0); mask = 0; - evas_object_key_grab(o, "Space", mask, ~mask, 0); - mask = 0; +// evas_object_key_grab(o, "space", mask, ~mask, 0); +// mask = 0; evas_object_event_callback_add(o, EVAS_CALLBACK_KEY_DOWN, _import_cb_key_down, import); o = e_widget_list_add(evas, 0, 0); diff --git a/src/bin/e_int_menus.c b/src/bin/e_int_menus.c index 955ad0593..151830296 100644 --- a/src/bin/e_int_menus.c +++ b/src/bin/e_int_menus.c @@ -654,6 +654,12 @@ _e_int_menus_applications_item_cb(void *data, E_Menu *m, E_Menu_Item *mi) e_int_config_apps(m->zone->container); } +static void +_e_int_menus_fileman_item_cb(void *data, E_Menu *m, E_Menu_Item *mi) +{ + e_fwin_new(m->zone->container, "~/", "/"); +} + static void _e_int_menus_config_pre_cb(void *data, E_Menu *m) { @@ -690,6 +696,14 @@ _e_int_menus_config_pre_cb(void *data, E_Menu *m) e_util_menu_item_edje_icon_set(mi, "enlightenment/applications"); e_menu_item_callback_set(mi, _e_int_menus_applications_item_cb, NULL); + mi = e_menu_item_new(m); + e_menu_item_separator_set(mi, 1); + + mi = e_menu_item_new(m); + e_menu_item_label_set(mi, _("Filemanager")); + e_util_menu_item_edje_icon_set(mi, "enlightenment/fileman"); + e_menu_item_callback_set(mi, _e_int_menus_fileman_item_cb, NULL); + l = evas_hash_find(_e_int_menus_augmentation, "config"); if (l) {