Revision: 1857
http://geeqie.svn.sourceforge.net/geeqie/?rev=1857&view=rev
Author: nadvornik
Date: 2009-09-24 21:52:44 +0000 (Thu, 24 Sep 2009)
Log Message:
-----------
fixed and simplified sidecar grouping code
Modified Paths:
--------------
trunk/src/filedata.c
Modified: trunk/src/filedata.c
===================================================================
--- trunk/src/filedata.c 2009-09-24 18:02:29 UTC (rev 1856)
+++ trunk/src/filedata.c 2009-09-24 21:52:44 UTC (rev 1857)
@@ -184,6 +184,7 @@
}
}
+#if 0
static void file_data_basename_hash_remove(GHashTable *basename_hash, FileData
*fd)
{
GList *list;
@@ -207,6 +208,7 @@
g_free(basename);
}
}
+#endif
static void file_data_basename_hash_remove_list(gpointer key, gpointer value,
gpointer data)
{
@@ -238,13 +240,11 @@
g_free(caseless_name);
}
-static void file_data_set_path(FileData *fd, const gchar *path, GHashTable
*basename_hash)
+static void file_data_set_path(FileData *fd, const gchar *path)
{
g_assert(path /* && *path*/); /* view_dir_tree uses FileData with zero
length path */
g_assert(file_data_pool);
- if (basename_hash && fd->path)
file_data_basename_hash_remove(basename_hash, fd);
-
g_free(fd->path);
if (fd->original_path)
@@ -297,8 +297,6 @@
fd->extension = fd->name + strlen(fd->name);
}
- if (basename_hash) file_data_basename_hash_insert(basename_hash, fd);
/* we can ignore the special cases above - they don't have extensions */
-
file_data_set_collate_keys(fd);
}
@@ -351,6 +349,7 @@
if (!stat_utf8(fd->path, &st))
{
+ GList *sidecars;
GList *work;
FileData *sfd = NULL;
@@ -359,7 +358,10 @@
fd->size = 0;
fd->date = 0;
- work = fd->sidecar_files;
+ /* file_data_disconnect_sidecar_file might delete the file,
+ we have to keep the reference to prevent this */
+ sidecars = filelist_copy(fd->sidecar_files);
+ work = sidecars;
while (work)
{
sfd = work->data;
@@ -368,6 +370,8 @@
file_data_disconnect_sidecar_file(fd, sfd);
}
if (sfd) file_data_check_sidecars(sfd, NULL); /* this will
group the sidecars back together */
+ /* now we can release the sidecars */
+ filelist_free(sidecars);
file_data_send_notification(fd, NOTIFY_REREAD);
}
else
@@ -407,7 +411,12 @@
if (fd)
{
gboolean changed;
- if (basename_hash)
file_data_basename_hash_insert(basename_hash, fd);
+ if (basename_hash)
+ {
+ file_data_basename_hash_insert(basename_hash, fd);
+ if (check_sidecars)
+ file_data_check_sidecars(fd, basename_hash);
+ }
if (fd->parent)
changed = file_data_check_changed_files(fd);
@@ -428,7 +437,8 @@
fd->ref = 1;
fd->magick = 0x12345678;
- file_data_set_path(fd, path_utf8, basename_hash); /* set path, name,
collate_key_*, original_path */
+ file_data_set_path(fd, path_utf8); /* set path, name, collate_key_*,
original_path */
+ if (basename_hash) file_data_basename_hash_insert(basename_hash, fd);
if (check_sidecars)
file_data_check_sidecars(fd, basename_hash);
@@ -2411,7 +2421,7 @@
}
else
{
- file_data_set_path(fd, fd->change->dest, NULL);
+ file_data_set_path(fd, fd->change->dest);
}
}
file_data_increment_version(fd);
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Come build with us! The BlackBerry® Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay
ahead of the curve. Join us from November 9-12, 2009. Register now!
http://p.sf.net/sfu/devconf
_______________________________________________
Geeqie-svn mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geeqie-svn