okra pushed a commit to branch master.

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

commit d1b7b74464f100e197386d6aa18ed6a86a633735
Author: Stephen 'Okra' Houston <[email protected]>
Date:   Thu Mar 30 15:22:57 2017 -0500

    Ephoto: Fix memory leaks and make single browser monitoring work correctly.
---
 src/bin/ephoto_directory_browser.c | 12 ++++++++++--
 src/bin/ephoto_main.c              | 10 ++++++++--
 src/bin/ephoto_single_browser.c    | 33 ++++++++++++++++++++-------------
 src/bin/ephoto_thumb_browser.c     |  3 +++
 4 files changed, 41 insertions(+), 17 deletions(-)

diff --git a/src/bin/ephoto_directory_browser.c 
b/src/bin/ephoto_directory_browser.c
index a67d71e..634d25a 100644
--- a/src/bin/ephoto_directory_browser.c
+++ b/src/bin/ephoto_directory_browser.c
@@ -740,12 +740,16 @@ _monitor_cb(void *data, int type,
    char file[PATH_MAX], dir[PATH_MAX];
    const Elm_Genlist_Item_Class *ic;
    char buf[PATH_MAX];
+   char *freedir;
 
    if (!entry)
      return ECORE_CALLBACK_PASS_ON;
 
    snprintf(file, PATH_MAX, "%s", ev->filename);
-   snprintf(dir, PATH_MAX, "%s", ecore_file_dir_get(file));
+   freedir = ecore_file_dir_get(file);
+   snprintf(dir, PATH_MAX, "%s", freedir);
+   if (freedir) free(freedir);
+
    if (strcmp(entry->path, dir))
      return ECORE_CALLBACK_PASS_ON;
    if (type == EIO_MONITOR_DIRECTORY_CREATED || type == 
EIO_MONITOR_FILE_CREATED)
@@ -879,11 +883,14 @@ _top_monitor_cb(void *data, int type,
    Eio_Monitor_Event *ev = event;
    const Elm_Genlist_Item_Class *ic;
    char buf[PATH_MAX], file[PATH_MAX], dir[PATH_MAX];
+   char *freedir;
 
    if (!db)
      return ECORE_CALLBACK_PASS_ON;
    snprintf(file, PATH_MAX, "%s", ev->filename);
-   snprintf(dir, PATH_MAX, "%s", ecore_file_dir_get(file));
+   freedir = ecore_file_dir_get(file);
+   snprintf(dir, PATH_MAX, "%s", freedir);
+   if (freedir) free(freedir);
 
    if (strcmp(db->ephoto->top_directory, dir))
      return ECORE_CALLBACK_PASS_ON;
@@ -1095,6 +1102,7 @@ _ephoto_main_del(void *data, Evas *e EINA_UNUSED, 
Evas_Object *obj EINA_UNUSED,
    Ecore_Event_Handler *handler;
 
    _todo_items_free(db);
+   elm_drop_item_container_del(db->fsel);
    EINA_LIST_FREE(db->handlers, handler) ecore_event_handler_del(handler);
    if (db->animator.todo_items)
      {
diff --git a/src/bin/ephoto_main.c b/src/bin/ephoto_main.c
index ff29d98..add3ebb 100644
--- a/src/bin/ephoto_main.c
+++ b/src/bin/ephoto_main.c
@@ -237,7 +237,9 @@ _win_free(void *data, Evas *e EINA_UNUSED, Evas_Object *obj 
EINA_UNUSED,
         EINA_LIST_FREE(ephoto->monitor_handlers, handler)
           ecore_event_handler_del(handler);
      }
+   ephoto_entries_free(ephoto);
    ephoto_config_save(ephoto);
+   free(ephoto->config);
    free(ephoto);
 }
 
@@ -744,13 +746,14 @@ _ephoto_populate_filter(void *data, Eio_File *handler 
EINA_UNUSED,
      }
    else if (info->type == EINA_FILE_LNK && ecore_file_is_dir((const char 
*)realpath))
      {
+        Eina_Bool _is_dir = ecore_file_is_dir(realpath);
         if (ed->thumbs_only)
           {
              free(realpath);
              return EINA_FALSE;
           }
         free(realpath);
-        return ecore_file_is_dir(ecore_file_realpath(info->path));
+        return _is_dir;
      }
    else if (!ed->dirs_only)
      {
@@ -820,9 +823,12 @@ _monitor_cb(void *data, int type,
    Ephoto *ephoto = data;
    Eio_Monitor_Event *ev = event;
    char file[PATH_MAX], dir[PATH_MAX];
+   char *freedir;
 
    snprintf(file, PATH_MAX, "%s", ev->filename);
-   snprintf(dir, PATH_MAX, "%s", ecore_file_dir_get(file));
+   freedir = ecore_file_dir_get(file);
+   snprintf(dir, PATH_MAX, "%s", freedir);
+   if (freedir) free(freedir);
 
    if (!type)
      return ECORE_CALLBACK_PASS_ON;
diff --git a/src/bin/ephoto_single_browser.c b/src/bin/ephoto_single_browser.c
index 3d5f433..5d5f04f 100644
--- a/src/bin/ephoto_single_browser.c
+++ b/src/bin/ephoto_single_browser.c
@@ -74,6 +74,11 @@ static void _ephoto_main_del(void *data, Evas *e EINA_UNUSED,
 static void _next_entry(Ephoto_Single_Browser *sb);
 static void _orient_apply(Ephoto_Single_Browser *sb);
 
+/*Vewer Callbacks*/
+static double _viewer_zoom_get(Evas_Object *obj);
+static void _viewer_zoom_set(Evas_Object *obj, double zoom);
+static void _viewer_zoom_fit(Evas_Object *obj);
+
 /*Common*/
 static const char *
 _ephoto_get_edje_group(const char  *path)
@@ -303,19 +308,11 @@ _monitor_cb(void *data, int type,
    Ephoto_Single_Browser *sb = data;
    Ephoto_Viewer *v = evas_object_data_get(sb->viewer, "viewer");
 
-   if (eina_list_count(sb->history))
+   if (eina_list_count(sb->history) > 1)
      return ECORE_CALLBACK_PASS_ON;
    if (type == EIO_MONITOR_FILE_MODIFIED)
      {
-        if (!ecore_file_exists(sb->entry->path))
-          {
-             if (eina_list_count(sb->entries) > 1)
-               _next_entry(sb);
-             else
-               _ephoto_main_back(sb, NULL, NULL);
-             ephoto_entry_free(sb->ephoto, sb->entry);
-          }
-        else
+        if (ecore_file_exists(sb->entry->path))
           {
              Evas_Object *tmp;
              Evas_Coord w, h;
@@ -328,12 +325,21 @@ _monitor_cb(void *data, int type,
 
              if (w > 0 && h > 0)
                {
-                  evas_object_hide(v->image);
-                  evas_object_image_file_set(v->image, sb->entry->path, group);
-                  evas_object_show(v->image);
+                  Eina_Bool fit = v->fit;
+                  double zoom = _viewer_zoom_get(sb->viewer);
+
+                  _ephoto_single_browser_recalc(sb);
+                  if (fit)
+                    _viewer_zoom_fit(sb->viewer);
+                  else
+                    _viewer_zoom_set(sb->viewer, zoom);
                }
           }
      }
+   else if (type == EIO_MONITOR_FILE_DELETED)
+     {
+        _ephoto_main_back(sb, NULL, NULL);
+     }      
    return ECORE_CALLBACK_PASS_ON;
 }
 
@@ -2091,6 +2097,7 @@ _ephoto_main_del(void *data, Evas *e EINA_UNUSED, 
Evas_Object *obj EINA_UNUSED,
       if (!strncmp(bname, "tmp", 3))
         ecore_file_unlink(info->path);
    }
+   eina_iterator_free(tmps);
    if (sb->history)
      {
         EINA_LIST_FREE(sb->history, eh)
diff --git a/src/bin/ephoto_thumb_browser.c b/src/bin/ephoto_thumb_browser.c
index 6384627..93028db 100644
--- a/src/bin/ephoto_thumb_browser.c
+++ b/src/bin/ephoto_thumb_browser.c
@@ -1282,6 +1282,7 @@ _ephoto_thumb_search_cancel(void *data, Evas_Object *obj 
EINA_UNUSED,
    Evas_Object *hbox = evas_object_data_get(search, "parent");
    Ephoto_Thumb_Browser *tb = evas_object_data_get(search, "thumb_browser");
 
+   elm_drag_item_container_del(tb->grid);
    tb->entries = tb->ephoto->entries;
    if (eina_list_count(tb->ephoto->searchentries))
       eina_list_free(tb->ephoto->searchentries);
@@ -1841,6 +1842,8 @@ _ephoto_main_del(void *data, Evas *e EINA_UNUSED, 
Evas_Object *obj EINA_UNUSED,
    Ecore_Event_Handler *handler;
 
    _todo_items_free(tb);
+   elm_drop_item_container_del(tb->grid);
+   elm_drag_item_container_del(tb->grid);
    EINA_LIST_FREE(tb->handlers, handler) ecore_event_handler_del(handler);
    if (tb->animator.todo_items)
      {

-- 


Reply via email to