okra pushed a commit to branch master.

http://git.enlightenment.org/apps/ephoto.git/commit/?id=73bfdc961e71b76e535f8536e59182515a041fda

commit 73bfdc961e71b76e535f8536e59182515a041fda
Author: Stephen Houston <smhousto...@gmail.com>
Date:   Mon Nov 2 23:37:35 2015 -0600

    Ephoto: Make file selecter work like a file tree.  Add more config options.
---
 src/bin/ephoto.h                |   9 +-
 src/bin/ephoto_config.c         | 131 ++++++++++++++++++++++++-
 src/bin/ephoto_main.c           |   5 +-
 src/bin/ephoto_single_browser.c |  68 +++++++++++++
 src/bin/ephoto_thumb_browser.c  | 212 ++++++++++++++++++++++------------------
 5 files changed, 324 insertions(+), 101 deletions(-)

diff --git a/src/bin/ephoto.h b/src/bin/ephoto.h
index 451c4f9..a4ed9d6 100644
--- a/src/bin/ephoto.h
+++ b/src/bin/ephoto.h
@@ -49,6 +49,7 @@ void         ephoto_directory_set(Ephoto *ephoto, const char 
*path);
 Eina_Bool    ephoto_config_init(Ephoto *em);
 void         ephoto_config_save(Ephoto *em);
 void         ephoto_config_free(Ephoto *em);
+void         ephoto_config_general(Ephoto *em);
 void         ephoto_config_slideshow(Ephoto *em);
 void         ephoto_config_about(Ephoto *em);
 
@@ -116,12 +117,16 @@ struct _Ephoto_Config
    const char *directory;
    double slideshow_timeout;
    const char *slideshow_transition;
-   const char *editor;
    int window_width;
    int window_height;
+   int fsel_hide;
+   int tool_hide;
+   const char *open;
    Evas_Object *slide_time;
    Evas_Object *slide_trans;
-   int fsel_hide;
+   Evas_Object *hide_toolbar;
+   Evas_Object *open_dir;
+   Evas_Object *open_dir_custom;
 };
 
 struct _Ephoto
diff --git a/src/bin/ephoto_config.c b/src/bin/ephoto_config.c
index 7b215e6..6b48d37 100644
--- a/src/bin/ephoto_config.c
+++ b/src/bin/ephoto_config.c
@@ -1,6 +1,6 @@
 #include "ephoto.h"
 
-#define CONFIG_VERSION 10
+#define CONFIG_VERSION 11
 
 static int _ephoto_config_load(Ephoto *ephoto);
 static Eina_Bool _ephoto_on_config_save(void *data);
@@ -35,10 +35,11 @@ ephoto_config_init(Ephoto *ephoto)
    C_VAL(D, T, directory, EET_T_STRING);
    C_VAL(D, T, slideshow_timeout, EET_T_DOUBLE);
    C_VAL(D, T, slideshow_transition, EET_T_STRING);
-   C_VAL(D, T, editor, EET_T_STRING);
    C_VAL(D, T, window_width, EET_T_INT);
    C_VAL(D, T, window_height, EET_T_INT);
    C_VAL(D, T, fsel_hide, EET_T_INT);
+   C_VAL(D, T, tool_hide, EET_T_INT);
+   C_VAL(D, T, open, EET_T_STRING);
    switch (_ephoto_config_load(ephoto))
      {
       case 0:
@@ -46,10 +47,10 @@ ephoto_config_init(Ephoto *ephoto)
          ephoto->config->config_version = CONFIG_VERSION;
          ephoto->config->slideshow_timeout = 4.0;
          ephoto->config->slideshow_transition = eina_stringshare_add("fade");
-         ephoto->config->editor = eina_stringshare_add("gimp %s");
          ephoto->config->window_width = 900;
          ephoto->config->window_height = 600;
          ephoto->config->fsel_hide = 0;
+         ephoto->config->tool_hide = 0;
          break;
       default:
          return EINA_TRUE;
@@ -81,6 +82,130 @@ _close(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UNUSED)
 }
 
 static void
+_save_general(void *data, Evas_Object *obj EINA_UNUSED, void *event_info 
EINA_UNUSED)
+{
+   Evas_Object *popup = data;
+   Ephoto *ephoto = evas_object_data_get(popup, "ephoto");
+   const char *path;
+   const char *text = elm_object_text_get(ephoto->config->open_dir);
+
+   if (!strcmp(text, _("Root Directory")))
+     path = "/";
+   else if (!strcmp(text, _("Home Directory")))
+     path = getenv("HOME");
+   else if (!strcmp(text, _("Last Open Directory")))
+     path = "Last";
+   else
+     path = elm_object_text_get(ephoto->config->open_dir_custom);
+
+   if (ecore_file_is_dir(path) || !strcmp(path, "Last"))
+     eina_stringshare_replace(&ephoto->config->open, path);
+   ephoto->config->tool_hide = 
elm_check_state_get(ephoto->config->hide_toolbar);
+
+   evas_object_del(popup);
+}
+
+
+static void
+_open_hv_select(void *data, Evas_Object *obj, void *event_info)
+{
+   Ephoto *ephoto = data;
+
+   elm_object_text_set(obj, elm_object_item_text_get(event_info));
+
+   if (!strcmp(elm_object_item_text_get(event_info), _("Custom Directory"))) 
+     elm_object_disabled_set(ephoto->config->open_dir_custom, EINA_FALSE);
+   else
+     elm_object_disabled_set(ephoto->config->open_dir_custom, EINA_TRUE);
+}
+
+void
+ephoto_config_general(Ephoto *ephoto)
+{
+   Evas_Object *popup, *box, *table, *check, *label, *hoversel, *entry, *ic, 
*button;
+
+   popup = elm_popup_add(ephoto->win);
+   elm_popup_scrollable_set(popup, EINA_TRUE);
+   elm_object_part_text_set(popup, "title,text", _("General Settings"));
+   elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER);
+
+   box = elm_box_add(popup);
+   elm_box_horizontal_set(box, EINA_FALSE);
+   evas_object_size_hint_weight_set(box, 0.0, 0.0);
+   evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(box);
+
+   table = elm_table_add(box);
+   evas_object_size_hint_weight_set(table, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(table, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   evas_object_show(table);
+
+   check = elm_check_add(table);
+   elm_object_text_set(check, _("Hide Toolbar On Fullscreen"));
+   evas_object_size_hint_align_set(check, 0.0, EVAS_HINT_FILL);
+   elm_check_state_set(check, ephoto->config->tool_hide);
+   elm_table_pack(table, check, 0, 1, 1, 1);
+   evas_object_show(check);  
+   ephoto->config->hide_toolbar = check;
+
+   hoversel = elm_hoversel_add(table);
+   elm_hoversel_hover_parent_set(hoversel, ephoto->win);
+   elm_hoversel_item_add(hoversel, _("Root Directory"), NULL, 0, 
_open_hv_select, ephoto);
+   elm_hoversel_item_add(hoversel, _("Home Directory"), NULL, 0, 
_open_hv_select, ephoto);
+   elm_hoversel_item_add(hoversel, _("Last Open Directory"), NULL, 0, 
_open_hv_select, ephoto);
+   elm_hoversel_item_add(hoversel, _("Custom Directory"), NULL, 0, 
_open_hv_select, ephoto);
+   elm_object_text_set(hoversel, _("Directory To Open Ephoto In"));
+   evas_object_data_set(hoversel, "ephoto", ephoto);
+   evas_object_size_hint_weight_set(hoversel, EVAS_HINT_EXPAND, 
EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(hoversel, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_table_pack(table, hoversel, 0, 2, 1, 1);
+   evas_object_show(hoversel);
+   ephoto->config->open_dir = hoversel;
+
+   entry = elm_entry_add(table);
+   elm_entry_single_line_set(entry, EINA_TRUE);
+   elm_entry_scrollable_set(entry, EINA_TRUE);
+   elm_object_text_set(entry, _("Custom Directory"));
+   elm_object_disabled_set(entry, EINA_TRUE);
+   elm_scroller_policy_set(entry, ELM_SCROLLER_POLICY_OFF, 
ELM_SCROLLER_POLICY_OFF);
+   evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+   evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, EVAS_HINT_FILL);
+   elm_table_pack(table, entry, 0, 3, 1, 1);
+   evas_object_show(entry);
+   ephoto->config->open_dir_custom = entry;
+
+   elm_box_pack_end(box, table);
+
+   ic = elm_icon_add(popup);
+   elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME);
+   evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+   elm_icon_standard_set(ic, "document-save");
+
+   button = elm_button_add(popup);
+   elm_object_text_set(button, _("Save"));
+   elm_object_part_content_set(button, "icon", ic);
+   evas_object_smart_callback_add(button, "clicked", _save_general, popup);
+   elm_object_part_content_set(popup, "button1", button);
+   evas_object_show(button);
+
+   ic = elm_icon_add(popup);
+   elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME);
+   evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+   elm_icon_standard_set(ic, "window-close");
+
+   button = elm_button_add(popup);
+   elm_object_text_set(button, _("Cancel"));
+   elm_object_part_content_set(button, "icon", ic);
+   evas_object_smart_callback_add(button, "clicked", _close, popup);
+   elm_object_part_content_set(popup, "button2", button);
+   evas_object_show(button);
+
+   evas_object_data_set(popup, "ephoto", ephoto);
+   elm_object_part_content_set(popup, "default", box);
+   evas_object_show(popup);
+}
+
+static void
 _save(void *data, Evas_Object *obj EINA_UNUSED, void *event_info EINA_UNUSED)
 {
    Evas_Object *popup = data;
diff --git a/src/bin/ephoto_main.c b/src/bin/ephoto_main.c
index f0c29cc..878e78b 100644
--- a/src/bin/ephoto_main.c
+++ b/src/bin/ephoto_main.c
@@ -231,7 +231,10 @@ ephoto_window_add(const char *path)
 
    if ((!path) || (!ecore_file_exists(path)))
      {
-        path = ephoto->config->directory;
+        if (!strcmp(ephoto->config->open, "Last"))
+          path = ephoto->config->directory;
+        else
+          path = ephoto->config->open;
         if ((path) && (!ecore_file_exists(path))) path = NULL;
         if (!path)
           {
diff --git a/src/bin/ephoto_single_browser.c b/src/bin/ephoto_single_browser.c
index 249f265..b6506ea 100644
--- a/src/bin/ephoto_single_browser.c
+++ b/src/bin/ephoto_single_browser.c
@@ -1638,6 +1638,15 @@ _back(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UNUSED)
 }
 
 static void
+_general_settings(void *data, Evas_Object *obj EINA_UNUSED, void *event_info 
EINA_UNUSED)
+{
+   Evas_Object *popup = data;
+   Ephoto_Single_Browser *sb = evas_object_data_get(popup, "single_browser");
+
+   ephoto_config_general(sb->ephoto);
+}
+
+static void
 _slideshow_settings(void *data, Evas_Object *obj EINA_UNUSED, void *event_info 
EINA_UNUSED)
 {
    Evas_Object *popup = data;
@@ -1682,6 +1691,14 @@ _settings(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UNUSED
    ic = elm_icon_add(list);
    elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME);
    evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+   elm_icon_standard_set(ic, "preferences-system");
+   evas_object_show(ic);
+   elm_list_item_append(list, _("General Settings"), ic, NULL,
+                        _general_settings, popup);
+
+   ic = elm_icon_add(list);
+   elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME);
+   evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
    elm_icon_standard_set(ic, "media-playback-start");
    evas_object_show(ic);
    elm_list_item_append(list, _("Slideshow Settings"), ic, NULL,
@@ -1768,7 +1785,33 @@ _key_down(void *data, Evas *e EINA_UNUSED, Evas_Object 
*obj EINA_UNUSED, void *e
    else if (!strcmp(k, "F11"))
      {
         Evas_Object *win = sb->ephoto->win;
+        
+        if (!elm_win_fullscreen_get(sb->ephoto->win))
+          {
+             if (sb->ephoto->config->tool_hide)
+               {
+                  evas_object_hide(sb->bar);
+                  elm_box_unpack(sb->main, sb->bar);
+                  evas_object_hide(sb->botbox);
+                  elm_table_unpack(sb->table, sb->botbox);
+                  evas_object_hide(sb->infolabel);
+                  elm_table_unpack(sb->table, sb->infolabel);
+               }
+          }
+        else
+          {
+             if (!evas_object_visible_get(sb->bar))
+               {
+                  elm_box_pack_start(sb->main, sb->bar);
+                  evas_object_show(sb->bar);
+                  elm_table_pack(sb->table, sb->botbox, 0, 2, 4, 1);
+                  evas_object_show(sb->botbox);
+                  elm_table_pack(sb->table, sb->infolabel, 0, 2, 4, 1);
+                  evas_object_show(sb->infolabel);
+               }
+          }
         elm_win_fullscreen_set(win, !elm_win_fullscreen_get(win));
+        elm_object_focus_set(sb->main, EINA_TRUE);
      }
 }
 
@@ -1988,6 +2031,31 @@ ephoto_single_browser_entry_set(Evas_Object *obj, 
Ephoto_Entry *entry)
      }
    if (sb->viewer)
      _zoom_fit(sb);
+   if (elm_win_fullscreen_get(sb->ephoto->win))
+     {
+        if (sb->ephoto->config->tool_hide)
+          {
+             evas_object_hide(sb->bar);
+             elm_box_unpack(sb->main, sb->bar);
+             evas_object_hide(sb->botbox);
+             elm_table_unpack(sb->table, sb->botbox);
+             evas_object_hide(sb->infolabel);
+             elm_table_unpack(sb->table, sb->infolabel);
+          }
+     }
+   else
+     {
+        if (!evas_object_visible_get(sb->bar))
+          {
+             elm_box_pack_start(sb->main, sb->bar);
+             evas_object_show(sb->bar);
+             elm_table_pack(sb->table, sb->botbox, 0, 2, 4, 1);
+             evas_object_show(sb->botbox);
+             elm_table_pack(sb->table, sb->infolabel, 0, 2, 4, 1);
+             evas_object_show(sb->infolabel);
+          }
+     }
+   elm_object_focus_set(sb->main, EINA_TRUE);
 }
 
 void
diff --git a/src/bin/ephoto_thumb_browser.c b/src/bin/ephoto_thumb_browser.c
index 0c13084..ab3c286 100644
--- a/src/bin/ephoto_thumb_browser.c
+++ b/src/bin/ephoto_thumb_browser.c
@@ -30,13 +30,13 @@ struct _Ephoto_Thumb_Browser
    Evas_Object *bar;
    Evas_Object *vbar;
    Evas_Object *fsel;
+   Elm_Widget_Item *fsel_parent;
    Evas_Object *leftbox;
    Evas_Object *bleftbox;
    Evas_Object *direntry;
    Eio_File *ls;
    Eina_List *todo_items;
    Eina_List *grid_items;
-   Eina_List *dir_items;
    Eina_List *handlers;
    int totimages;
    double totsize;
@@ -57,10 +57,43 @@ _todo_items_free(Ephoto_Thumb_Browser *tb)
 }
 
 static void
-_dir_items_free(Ephoto_Thumb_Browser *tb)
+_on_list_expand_req(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, void 
*event_info)
 {
-   eina_list_free(tb->dir_items);
-   tb->dir_items = NULL;
+   Elm_Widget_Item *it = event_info;
+
+   elm_genlist_item_expanded_set(it, EINA_TRUE);
+}
+
+static void
+_on_list_contract_req(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED, 
void *event_info)
+{
+   Elm_Widget_Item *it = event_info;
+
+   elm_genlist_item_expanded_set(it, EINA_FALSE);
+}
+
+static void
+_on_list_expanded(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
+{
+   Ephoto_Thumb_Browser *tb = data;
+   Elm_Widget_Item *it = event_info;
+   const char *path = elm_object_item_data_get(it);
+
+   tb->fsel_parent = it;
+   ephoto_directory_set(tb->ephoto, path);
+   ephoto_title_set(tb->ephoto, path);
+}
+
+static void
+_on_list_contracted(void *data, Evas_Object *obj EINA_UNUSED, void *event_info)
+{
+   Ephoto_Thumb_Browser *tb = data;
+   Elm_Widget_Item *it = event_info;
+   const char *path = elm_object_item_data_get(it);
+
+   elm_genlist_item_subitems_clear(it);
+   ephoto_directory_set(tb->ephoto, path);
+   ephoto_title_set(tb->ephoto, path);
 }
 
 static void
@@ -73,8 +106,7 @@ _grid_items_free(Ephoto_Thumb_Browser *tb)
 static char *
 _ephoto_dir_item_text_get(void *data, Evas_Object *obj EINA_UNUSED, const char 
*part EINA_UNUSED)
 {
-   Ephoto_Entry *e = data;
-   return strdup(e->label);
+   return strdup(basename(data));
 }
 
 static char *
@@ -103,8 +135,9 @@ _ephoto_thumb_file_icon_get(void *data, Evas_Object *obj, 
const char *part EINA_
 }
 
 static void
-_ephoto_dir_item_del(void *data EINA_UNUSED, Evas_Object *obj EINA_UNUSED)
+_ephoto_dir_item_del(void *data, Evas_Object *obj EINA_UNUSED)
 {
+   eina_stringshare_del(data);
 }
 
 static void
@@ -121,54 +154,39 @@ _ephoto_thumb_item_del(void *data EINA_UNUSED, 
Evas_Object *obj EINA_UNUSED)
 static int
 _entry_cmp(const void *pa, const void *pb)
 {
-   const Elm_Object_Item *ia = pa;
-   const Ephoto_Entry *a, *b = pb;
+   const Elm_Widget_Item *ia = pa;
+   const Elm_Widget_Item *ib = pb;
+   const char *a, *b;
 
    a = elm_object_item_data_get(ia);
+   b = elm_object_item_data_get(ib);
+
+   return strcasecmp(a, b);
+}
+
+static int
+_entry_cmp_grid(const void *pa, const void *pb)
+{
+   const Ephoto_Entry *a, *b;
+   a = elm_object_item_data_get(pa);
+   b = elm_object_item_data_get(pb);
 
    return strcoll(a->basename, b->basename);
 }
 
 static void
-_entry_dir_item_add(Ephoto_Thumb_Browser *tb, Ephoto_Entry *e)
+_entry_dir_item_add(Ephoto_Thumb_Browser *tb, Ephoto_Entry *e, Elm_Widget_Item 
*parent)
 {
    const Elm_Genlist_Item_Class *ic;
-   int near_cmp;
-   Elm_Object_Item *near_item = NULL;
-   Eina_List *near_node = NULL;
-
-   near_node = eina_list_search_sorted_near_list
-     (tb->dir_items, _entry_cmp, e, &near_cmp);
-   if (near_node)
-     near_item = near_node->data;
+   const char *path;
 
    ic = &_ephoto_dir_class;
 
-   if (!near_item)
-     {
-        e->item = elm_genlist_item_append(tb->fsel, ic, e, NULL, 
ELM_GENLIST_ITEM_NONE, NULL, NULL);
-        tb->dir_items = eina_list_append(tb->dir_items, e->item);
-     }
-   else
-     {
-        if (near_cmp < 0)
-          {
-             e->item = elm_genlist_item_insert_after
-               (tb->fsel, ic, e, NULL, near_item, ELM_GENLIST_ITEM_NONE, NULL, 
NULL);
-             tb->dir_items = eina_list_append_relative
-               (tb->dir_items, e->item, near_item);
-          }
-        else
-          {
-             e->item = elm_genlist_item_insert_before
-               (tb->fsel, ic, e, NULL, near_item, ELM_GENLIST_ITEM_NONE, NULL, 
NULL);
-             tb->dir_items = eina_list_prepend_relative
-               (tb->dir_items, e->item, near_item);
-          }
-     }
-   if (e->item)
-     elm_object_item_data_set(e->item, e);
-   else
+   path = eina_stringshare_add(e->path);
+
+   e->item = elm_genlist_item_sorted_insert(tb->fsel, ic, path, parent, 
ELM_GENLIST_ITEM_TREE, _entry_cmp, NULL, NULL);
+
+   if (!e->item)
      {
         ERR("could not add item to fsel: path '%s'", e->path);
         ephoto_entry_free(e);
@@ -180,40 +198,12 @@ static void
 _entry_thumb_item_add(Ephoto_Thumb_Browser *tb, Ephoto_Entry *e)
 {
    const Elm_Gengrid_Item_Class *ic;
-   int near_cmp;
-   Elm_Object_Item *near_item = NULL;
-   Eina_List *near_node = NULL;
-
-   near_node = eina_list_search_sorted_near_list
-     (tb->grid_items, _entry_cmp, e, &near_cmp);
-   if (near_node)
-     near_item = near_node->data;
 
    ic = &_ephoto_thumb_file_class;
 
-   if (!near_item)
-     {
-        e->item = elm_gengrid_item_append(tb->grid, ic, e, NULL, NULL);
-        tb->grid_items = eina_list_append(tb->grid_items, e->item);
-     }
-   else
-     {
-        if (near_cmp < 0)
-          {
-             e->item = elm_gengrid_item_insert_after
-               (tb->grid, ic, e, near_item, NULL, NULL);
-             tb->grid_items = eina_list_append_relative
-               (tb->grid_items, e->item, near_item);
-          }
-        else
-          {
-             e->item = elm_gengrid_item_insert_before
-               (tb->grid, ic, e, near_item, NULL, NULL);
-             tb->grid_items = eina_list_prepend_relative
-               (tb->grid_items, e->item, near_item);
-          }
-     }
-   if (e->item)
+   e->item = elm_gengrid_item_sorted_insert
+               (tb->grid, ic, e, _entry_cmp_grid, NULL, NULL);
+    if (e->item)
      elm_object_item_data_set(e->item, e);
    else
      {
@@ -237,11 +227,19 @@ _todo_items_process(void *data)
    EINA_LIST_FREE(tb->todo_items, entry)
      {
         if (entry->is_dir)
-          _entry_dir_item_add(tb, entry);
+          {
+             if (tb->fsel_parent)
+               _entry_dir_item_add(tb, entry, tb->fsel_parent);
+             else
+               _entry_dir_item_add(tb, entry, NULL);
+          }
         else
           _entry_thumb_item_add(tb, entry);
      }
 
+   if (!tb->animator.todo_items)
+     tb->fsel_parent = NULL;
+
    return EINA_FALSE;
 }
 
@@ -249,11 +247,12 @@ static void
 _ephoto_dir_selected(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info)
 {
    Ephoto_Thumb_Browser *tb = data;
-   Elm_Object_Item *it = event_info;
-   Ephoto_Entry *e = elm_object_item_data_get(it);
+   Elm_Widget_Item *it = event_info;
+   const char *path = elm_object_item_data_get(it);
 
-   ephoto_directory_set(tb->ephoto, e->path);
-   ephoto_title_set(tb->ephoto, e->path);
+   elm_genlist_item_expanded_set(it, !elm_genlist_item_expanded_get(it));
+//   ephoto_directory_set(tb->ephoto, path);
+//   ephoto_title_set(tb->ephoto, path);
 }
 
 static void
@@ -261,6 +260,7 @@ _ephoto_dir_go_home(void *data, Evas_Object *obj 
EINA_UNUSED, void *event_info E
 {
    Ephoto_Thumb_Browser *tb = data;
 
+   elm_genlist_clear(tb->fsel);
    ephoto_directory_set(tb->ephoto, getenv("HOME"));
    ephoto_title_set(tb->ephoto, tb->ephoto->config->directory);
 }
@@ -274,6 +274,7 @@ _ephoto_dir_go_up(void *data, Evas_Object *obj EINA_UNUSED, 
void *event_info EIN
      {
         char path[PATH_MAX];
         snprintf(path, PATH_MAX, "%s", tb->ephoto->config->directory);
+        elm_genlist_clear(tb->fsel);
         ephoto_directory_set(tb->ephoto, dirname(path));
         ephoto_title_set(tb->ephoto, tb->ephoto->config->directory);
      }
@@ -288,6 +289,7 @@ _ephoto_direntry_go(void *data, Evas_Object *obj, void 
*event_info EINA_UNUSED)
    dir = elm_object_text_get(tb->direntry);
    if (ecore_file_is_dir(dir))
      {
+        elm_genlist_clear(tb->fsel);
         ephoto_directory_set(tb->ephoto, dir);
         ephoto_title_set(tb->ephoto, tb->ephoto->config->directory);
      }
@@ -297,7 +299,7 @@ static void
 _ephoto_thumb_selected(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info)
 {
    Ephoto_Thumb_Browser *tb = data;
-   Elm_Object_Item *it = event_info;
+   Elm_Widget_Item *it = event_info;
    Ephoto_Entry *e = elm_object_item_data_get(it);
 
    elm_gengrid_item_selected_set(it, EINA_FALSE);
@@ -343,7 +345,7 @@ static void
 _slideshow(void *data, Evas_Object *obj EINA_UNUSED, void *event_info 
EINA_UNUSED)
 {
    Ephoto_Thumb_Browser *tb = data;
-   Elm_Object_Item *it = elm_gengrid_selected_item_get(tb->grid);
+   Elm_Widget_Item *it = elm_gengrid_selected_item_get(tb->grid);
    Ephoto_Entry *entry;
 
    if (it) entry = elm_object_item_data_get(it);
@@ -354,6 +356,15 @@ _slideshow(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UNUSE
 }
 
 static void
+_general_settings(void *data, Evas_Object *obj EINA_UNUSED, void *event_info 
EINA_UNUSED)
+{
+   Evas_Object *popup = data;
+   Ephoto_Thumb_Browser *tb = evas_object_data_get(popup, "thumb_browser");
+
+   ephoto_config_general(tb->ephoto);
+}
+
+static void
 _slideshow_settings(void *data, Evas_Object *obj EINA_UNUSED, void *event_info 
EINA_UNUSED)
 {
    Evas_Object *popup = data;
@@ -398,6 +409,14 @@ _settings(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UNUSED
    ic = elm_icon_add(list);
    elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME);
    evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+   elm_icon_standard_set(ic, "preferences-system");
+   evas_object_show(ic);
+   elm_list_item_append(list, _("General Settings"), ic, NULL,
+                        _general_settings, popup);
+
+   ic = elm_icon_add(list);
+   elm_icon_order_lookup_set(ic, ELM_ICON_LOOKUP_FDO_THEME);
+   evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
    elm_icon_standard_set(ic, "media-playback-start");
    evas_object_show(ic);
    elm_list_item_append(list, _("Slideshow Settings"), ic, NULL,
@@ -451,7 +470,7 @@ static void
 _ephoto_dir_hide_folders(void *data, Evas_Object *obj EINA_UNUSED, void 
*event_info EINA_UNUSED)
 {
    Ephoto_Thumb_Browser *tb = data;
-   Elm_Object_Item *icon;
+   Elm_Widget_Item *icon;
    Evas_Object *max, *min, *but, *ic;
 
    evas_object_hide(tb->leftbox);
@@ -510,7 +529,7 @@ _key_down(void *data, Evas *e EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *e
 
    if (!strcmp(k, "F5"))
      {
-        Elm_Object_Item *it = elm_gengrid_selected_item_get(tb->grid);
+        Elm_Widget_Item *it = elm_gengrid_selected_item_get(tb->grid);
         Ephoto_Entry *entry;
         if (it) entry = elm_object_item_data_get(it);
         else entry = eina_list_nth(tb->ephoto->entries, 0);
@@ -560,7 +579,7 @@ _dnd_drag_data_build(Eina_List **items)
    if (*items)
      {
         Eina_List *l;
-        Elm_Object_Item *it;
+        Elm_Widget_Item *it;
         Ephoto_Entry *e;
         unsigned int len = 0;
 
@@ -623,10 +642,10 @@ _dnd_icons_get(void *data)
 
    evas_pointer_canvas_xy_get(evas_object_evas_get(data), &xm, &ym);
    Eina_List *items = eina_list_clone(elm_gengrid_selected_items_get(data));
-   Elm_Object_Item *gli = elm_gengrid_at_xy_item_get(data, xm, ym, NULL, NULL);
+   Elm_Widget_Item *gli = elm_gengrid_at_xy_item_get(data, xm, ym, NULL, NULL);
    if (gli)
      {
-        void *p = eina_list_search_sorted(items, _entry_cmp, gli);
+        void *p = eina_list_search_sorted(items, _entry_cmp_grid, gli);
         if (!p)
           items = eina_list_append(items, gli);
      }
@@ -657,14 +676,14 @@ _dnd_icons_get(void *data)
 }
 
 static const char *
-_dnd_get_drag_data(Evas_Object *obj, Elm_Object_Item *it, Eina_List **items)
+_dnd_get_drag_data(Evas_Object *obj, Elm_Widget_Item *it, Eina_List **items)
 {
    const char *drag_data = NULL;
 
    *items = eina_list_clone(elm_gengrid_selected_items_get(obj));
    if (it)
      {
-        void *p = eina_list_search_sorted(*items, _entry_cmp, it);
+        void *p = eina_list_search_sorted(*items, _entry_cmp_grid, it);
         if (!p)
           *items = eina_list_append(*items, it);
      }
@@ -673,16 +692,16 @@ _dnd_get_drag_data(Evas_Object *obj, Elm_Object_Item *it, 
Eina_List **items)
    return drag_data;
 }
 
-static Elm_Object_Item *
+static Elm_Widget_Item *
 _dnd_item_get(Evas_Object *obj, Evas_Coord x, Evas_Coord y, int *xposret, int 
*yposret)
 {
-   Elm_Object_Item *item;
+   Elm_Widget_Item *item;
    item = elm_gengrid_at_xy_item_get(obj, x, y, xposret, yposret);
    return item;
 }
 
 static Eina_Bool
-_dnd_item_data_get(Evas_Object *obj, Elm_Object_Item *it, Elm_Drag_User_Info 
*info)
+_dnd_item_data_get(Evas_Object *obj, Elm_Widget_Item *it, Elm_Drag_User_Info 
*info)
 {
    info->format = ELM_SEL_FORMAT_TARGETS;
    info->createicon = _dnd_create_icon;
@@ -705,7 +724,6 @@ _main_del(void *data, Evas *e EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED, void *e
    Ecore_Event_Handler *handler;
 
    _todo_items_free(tb);
-   _dir_items_free(tb);
    _grid_items_free(tb);
    EINA_LIST_FREE(tb->handlers, handler)
       ecore_event_handler_del(handler);
@@ -732,10 +750,8 @@ _ephoto_thumb_populate_start(void *data, int type 
EINA_UNUSED, void *event EINA_
    evas_object_smart_callback_call(tb->main, "changed,directory", NULL);
 
    _todo_items_free(tb);
-   _dir_items_free(tb);
    _grid_items_free(tb);
    elm_gengrid_clear(tb->grid);
-   elm_genlist_clear(tb->fsel);
    tb->totimages = 0;
    tb->totsize = 0;
    elm_object_text_set(tb->direntry, tb->ephoto->config->directory);
@@ -862,7 +878,7 @@ ephoto_thumb_browser_add(Ephoto *ephoto, Evas_Object 
*parent)
    _ephoto_dir_class.item_style = "default";
    _ephoto_dir_class.func.text_get = _ephoto_dir_item_text_get;
    _ephoto_dir_class.func.content_get = _ephoto_dir_item_icon_get;
-   _ephoto_dir_class.func.state_get = NULL;
+   //_ephoto_dir_class.func.state_get = NULL;
    _ephoto_dir_class.func.del = _ephoto_dir_item_del;
 
    tb->ephoto = ephoto;
@@ -955,11 +971,17 @@ ephoto_thumb_browser_add(Ephoto *ephoto, Evas_Object 
*parent)
    evas_object_show(but);
 
    tb->fsel = elm_genlist_add(tb->leftbox);
+   elm_genlist_homogeneous_set(tb->fsel, EINA_TRUE);
+   elm_genlist_select_mode_set(tb->fsel, ELM_OBJECT_SELECT_MODE_ALWAYS);
    evas_object_size_hint_weight_set(tb->fsel, EVAS_HINT_EXPAND, 
EVAS_HINT_EXPAND);
    evas_object_size_hint_align_set(tb->fsel, EVAS_HINT_FILL, EVAS_HINT_FILL);
    elm_box_pack_end(tb->leftbox, tb->fsel);
    evas_object_smart_callback_add
      (tb->fsel, "clicked,double", _ephoto_dir_selected, tb);
+   evas_object_smart_callback_add(tb->fsel, "expand,request", 
_on_list_expand_req, tb);
+   evas_object_smart_callback_add(tb->fsel, "contract,request", 
_on_list_contract_req, tb);
+   evas_object_smart_callback_add(tb->fsel, "expanded", _on_list_expanded, tb);
+   evas_object_smart_callback_add(tb->fsel, "contracted", _on_list_contracted, 
tb);
    evas_object_show(tb->fsel);
 
    ic = elm_icon_add(hbox);

-- 


Reply via email to