--- /dev/null
+/*
+ * 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;
+}