[Xfce4-commits] <tumbler:jannis/specialized> Squashme: Start cleaning up and documenting the TumblerManager changes.
Jannis Pohlmann
noreply at xfce.org
Wed Nov 11 01:52:06 CET 2009
Updating branch refs/heads/jannis/specialized
to 22aa5ff8777f161d8ec1c0e2efe75b41a2a3399e (commit)
from 5431fa7da0b51b33c4b82eaf02b59455ae318420 (commit)
commit 22aa5ff8777f161d8ec1c0e2efe75b41a2a3399e
Author: Jannis Pohlmann <jannis at xfce.org>
Date: Wed Nov 11 01:50:54 2009 +0100
Squashme: Start cleaning up and documenting the TumblerManager changes.
tumblerd/tumbler-manager.c | 570 ++++++++++++++++++++++++++++----------------
1 files changed, 366 insertions(+), 204 deletions(-)
diff --git a/tumblerd/tumbler-manager.c b/tumblerd/tumbler-manager.c
index 9b592c6..d86d7dd 100644
--- a/tumblerd/tumbler-manager.c
+++ b/tumblerd/tumbler-manager.c
@@ -62,22 +62,36 @@ typedef struct _ThumbnailerInfo ThumbnailerInfo;
-static void tumbler_manager_finalize (GObject *object);
-static void tumbler_manager_get_property (GObject *object,
- guint prop_id,
- GValue *value,
- GParamSpec *pspec);
-static void tumbler_manager_set_property (GObject *object,
- guint prop_id,
- const GValue *value,
- GParamSpec *pspec);
-static void tumbler_manager_load_thumbnailers (TumblerManager *manager,
- GFile *directory);
-static void tumbler_manager_directory_changed (TumblerManager *manager,
- GFile *file,
- GFile *other_file,
- GFileMonitorEvent event_type,
- GFileMonitor *monitor);
+static void tumbler_manager_finalize (GObject *object);
+static void tumbler_manager_get_property (GObject *object,
+ guint prop_id,
+ GValue *value,
+ GParamSpec *pspec);
+static void tumbler_manager_set_property (GObject *object,
+ guint prop_id,
+ const GValue *value,
+ GParamSpec *pspec);
+static void tumbler_manager_monitor_unref (GFileMonitor *monitor,
+ TumblerManager *manager);
+static void tumbler_manager_load_thumbnailers (TumblerManager *manager,
+ GFile *directory);
+static void tumbler_manager_directory_changed (TumblerManager *manager,
+ GFile *file,
+ GFile *other_file,
+ GFileMonitorEvent event_type,
+ GFileMonitor *monitor);
+
+static OverrideInfo *override_info_new (void);
+static void override_info_free (gpointer pointer);
+static void override_info_list_free (gpointer pointer);
+static ThumbnailerInfo *thumbnailer_info_new (void);
+static void thumbnailer_info_free (ThumbnailerInfo *info);
+static void thumbnailer_info_list_free (gpointer pointer);
+
+#ifdef DEBUG
+static void dump_overrides (TumblerManager *manager);
+static void dump_thumbnailers (TumblerManager *manager);
+#endif
@@ -96,7 +110,17 @@ struct _TumblerManager
GList *directories;
GList *monitors;
+ /* hash table for override information, mapping hash keys to lists
+ * of override infos. in each of these lists the infos are sorted by
+ * the directory index, with higher priority directories (smaller
+ * directory index) coming first */
GHashTable *overrides;
+
+ /* hash table for thumbnailer service information, mapping .service
+ * basenames to lists of thumbnailer infos installed into the
+ * system with these basenames. in each of these lists the infos are
+ * sorted by the directory index, with higher priority directories
+ * (smaller directory index) coming first */
GHashTable *thumbnailers;
GMutex *mutex;
@@ -113,132 +137,14 @@ struct _OverrideInfo
struct _ThumbnailerInfo
{
TumblerThumbnailer *thumbnailer;
+#ifdef DEBUG
GFile *file;
+#endif
gint dir_index;
};
-static OverrideInfo *
-override_info_new (void)
-{
- return g_slice_new0 (OverrideInfo);
-}
-
-
-
-static void
-override_info_free (gpointer pointer)
-{
- OverrideInfo *info = pointer;
-
- if (info == NULL)
- return;
-
- g_free (info->name);
- g_free (info->uri_scheme);
- g_free (info->mime_type);
-
- g_slice_free (OverrideInfo, info);
-}
-
-
-
-static void
-override_info_list_free (gpointer pointer)
-{
- GList **infos = pointer;
- GList *iter;
-
- for (iter = *infos; iter != NULL; iter = iter->next)
- override_info_free (iter->data);
-
- g_list_free (*infos);
-}
-
-
-
-static ThumbnailerInfo *
-thumbnailer_info_new (void)
-{
- return g_slice_new0 (ThumbnailerInfo);
-}
-
-
-
-static void
-thumbnailer_info_free (ThumbnailerInfo *info)
-{
- if (info == NULL)
- return;
-
- g_object_unref (info->file);
- g_object_unref (info->thumbnailer);
- g_slice_free (ThumbnailerInfo, info);
-}
-
-
-
-static void
-thumbnailer_info_list_free (gpointer pointer)
-{
- GList **infos = pointer;
- GList *iter;
-
- for (iter = *infos; iter != NULL; iter = iter->next)
- thumbnailer_info_free (iter->data);
-
- g_list_free (*infos);
-}
-
-
-
-static void
-dump_overrides (TumblerManager *manager)
-{
- GHashTableIter table_iter;
- const gchar *hash_key;
- GList **list;
- GList *iter;
-
- g_print ("\nOverrides:\n");
-
- g_hash_table_iter_init (&table_iter, manager->overrides);
- while (g_hash_table_iter_next (&table_iter, (gpointer) &hash_key, (gpointer) &list))
- {
- g_print (" %s:\n", hash_key);
- for (iter = *list; iter != NULL; iter = iter->next)
- g_print (" %s\n", ((OverrideInfo *)iter->data)->name);
- }
-
- g_print ("\n");
-}
-
-
-
-static void
-dump_thumbnailers (TumblerManager *manager)
-{
- GHashTableIter table_iter;
- const gchar *base_name;
- GList **list;
- GList *iter;
-
- g_print ("\nThumbnailers:\n");
-
- g_hash_table_iter_init (&table_iter, manager->thumbnailers);
- while (g_hash_table_iter_next (&table_iter, (gpointer) &base_name, (gpointer) &list))
- {
- g_print (" %s:\n", base_name);
- for (iter = *list; iter != NULL; iter = iter->next)
- g_print (" %s\n", g_file_get_path (((ThumbnailerInfo *)iter->data)->file));
- }
-
- g_print ("\n");
-}
-
-
-
G_DEFINE_TYPE (TumblerManager, tumbler_manager, G_TYPE_OBJECT);
@@ -277,8 +183,12 @@ tumbler_manager_init (TumblerManager *manager)
manager->directories = NULL;
manager->monitors = NULL;
manager->mutex = g_mutex_new ();
+
+ /* create the overrides info hash table */
manager->overrides = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, override_info_list_free);
+
+ /* create the thumbnailer info hash table */
manager->thumbnailers = g_hash_table_new_full (g_str_hash, g_str_equal,
g_free, thumbnailer_info_list_free);
}
@@ -286,40 +196,33 @@ tumbler_manager_init (TumblerManager *manager)
static void
-monitor_unref (GFileMonitor *monitor,
- TumblerManager *manager)
-{
- if (monitor != NULL)
- {
- g_signal_handlers_disconnect_matched (monitor, G_SIGNAL_MATCH_DATA,
- 0, 0, NULL, NULL, manager);
- g_object_unref (monitor);
- }
-}
-
-
-
-static void
tumbler_manager_finalize (GObject *object)
{
TumblerManager *manager = TUMBLER_MANAGER (object);
g_mutex_lock (manager->mutex);
+ /* release all thumbnailer directory monitors */
+ g_list_foreach (manager->monitors, (GFunc) tumbler_manager_monitor_unref, manager);
+ g_list_free (manager->monitors);
+
+ /* release all directory objects */
g_list_foreach (manager->directories, (GFunc) g_object_unref, NULL);
g_list_free (manager->directories);
- g_list_foreach (manager->monitors, (GFunc) monitor_unref, manager);
- g_list_free (manager->monitors);
-
+ /* destroy the hash tables */
g_hash_table_unref (manager->thumbnailers);
g_hash_table_unref (manager->overrides);
+ /* release the registry */
g_object_unref (manager->registry);
+ /* release the D-Bus connection object */
dbus_g_connection_unref (manager->connection);
g_mutex_unlock (manager->mutex);
+
+ /* destroy the mutex */
g_mutex_free (manager->mutex);
(*G_OBJECT_CLASS (tumbler_manager_parent_class)->finalize) (object);
@@ -372,6 +275,20 @@ tumbler_manager_set_property (GObject *object,
break;
}
}
+
+
+
+static void
+tumbler_manager_monitor_unref (GFileMonitor *monitor,
+ TumblerManager *manager)
+{
+ if (monitor != NULL)
+ {
+ g_signal_handlers_disconnect_matched (monitor, G_SIGNAL_MATCH_DATA,
+ 0, 0, NULL, NULL, manager);
+ g_object_unref (monitor);
+ }
+}
@@ -379,18 +296,20 @@ static gint
tumbler_manager_get_dir_index (TumblerManager *manager,
GFile *directory)
{
- GList *iter;
+ GList *lp;
gint dir_index = -1;
gint n;
- for (iter = manager->directories, n = 0;
- dir_index < 0 && iter != NULL;
- iter = iter->next, ++n)
+ /* iterate over all thumbnailer directories */
+ for (lp = manager->directories, n = 0; dir_index < 0 && lp != NULL; lp = lp->next, ++n)
{
- if (g_file_equal (iter->data, directory))
+ /* remember the directory index if the directories match */
+ if (g_file_equal (lp->data, directory))
dir_index = n;
}
+ /* return the index of the first thumbnailer directory that matches
+ * the input directory or -1 if there is no such directory */
return n;
}
@@ -411,42 +330,55 @@ tumbler_manager_update_preferred (TumblerManager *manager,
g_return_if_fail (TUMBLER_IS_MANAGER (manager));
g_return_if_fail (hash_key != NULL && *hash_key != '\0');
- g_debug ("update_preferred: %s", hash_key);
-
+ /* fetch all override infos for this hash key */
overrides = g_hash_table_lookup (manager->overrides, hash_key);
-
if (overrides != NULL)
{
- g_assert (*overrides != NULL);
+ /* if there is a value for the hash key it has to be a valid pointer
+ * to a non-empty override info list, otherwise there is a bug */
+ g_assert (overrides != NULL && *overrides != NULL);
+ /* determine the name of the active (= the first) override info
+ * for this hash key */
name = ((OverrideInfo *)(*overrides)->data)->name;
+ /* iterate over all thumbnailer info lists we have. stop as soon as we
+ * have one matching thumbnailer info that has the correct name and
+ * supports the hash key */
g_hash_table_iter_init (&iter, manager->thumbnailers);
- while (g_hash_table_iter_next (&iter, NULL, (gpointer) &thumbnailers))
+ while (thumbnailer == NULL
+ && g_hash_table_iter_next (&iter, NULL, (gpointer) &thumbnailers))
{
- g_assert (thumbnailers != NULL);
- g_assert (*thumbnailers != NULL);
+ /* each value in the thumbnailer info hash table has to be a
+ * valid pointer to a non-empty thumbnailer info list, otherwise
+ * there is a bug */
+ g_assert (thumbnailers != NULL && *thumbnailers != NULL);
+ /* get the active (= the first) thumbnailer info in the list */
info = (ThumbnailerInfo *)(*thumbnailers)->data;
+ /* each element in the thumbnailer info list has to be a valid
+ * thumbnailer info with a specialized thumbnailer object */
g_assert (info != NULL);
g_assert (TUMBLER_IS_SPECIALIZED_THUMBNAILER (info->thumbnailer));
+ /* determine the name of the thumbnailer */
current_name = tumbler_specialized_thumbnailer_get_name (
TUMBLER_SPECIALIZED_THUMBNAILER (info->thumbnailer));
+ /* check if the current thumbnailer matches the override info name */
if (g_strcmp0 (name, current_name) == 0)
- thumbnailer = info->thumbnailer;
+ {
+ /* check if the thumbnailer supports the hash key at all */
+ if (tumbler_thumbnailer_supports_hash_key (info->thumbnailer, hash_key))
+ thumbnailer = info->thumbnailer;
+ }
}
}
- if (thumbnailer != NULL)
- {
- g_debug ("preferring %s for %s",
- tumbler_specialized_thumbnailer_get_name (TUMBLER_SPECIALIZED_THUMBNAILER (thumbnailer)),
- hash_key);
- }
-
+ /* update the preferred information of the registry. if no
+ * thumbnailer was found, this will reset the preferred information
+ * for this hash key */
tumbler_registry_set_preferred (manager->registry, hash_key, thumbnailer);
}
@@ -476,8 +408,6 @@ tumbler_manager_parse_overrides (TumblerManager *manager,
return NULL;
}
- g_debug ("parse_overrides: %s", filename);
-
/* allocate the key file */
key_file = g_key_file_new ();
@@ -560,6 +490,8 @@ tumbler_manager_parse_overrides (TumblerManager *manager,
g_object_unref (directory);
overrides = g_list_prepend (overrides, info);
+
+ g_free (sections[n]);
}
g_free (sections);
@@ -590,8 +522,6 @@ tumbler_manager_load_overrides_file (TumblerManager *manager,
g_return_if_fail (TUMBLER_MANAGER (manager));
g_return_if_fail (G_IS_FILE (file));
- g_debug ("load_overrides_file %s", g_file_get_path (file));
-
directory = g_file_get_parent (file);
dir_index = tumbler_manager_get_dir_index (manager, directory);
g_object_unref (directory);
@@ -612,12 +542,8 @@ tumbler_manager_load_overrides_file (TumblerManager *manager,
if (list == NULL)
{
- g_debug (" creating %s for %s", info->name, hash_key);
-
- list = g_slice_alloc0 (sizeof (GList *));
-
+ list = g_slice_alloc0 (sizeof (GList **));
*list = g_list_prepend (*list, info);
-
g_hash_table_insert (manager->overrides, g_strdup (hash_key), list);
first = TRUE;
@@ -639,8 +565,6 @@ tumbler_manager_load_overrides_file (TumblerManager *manager,
*list = g_list_insert_before (*list, lp, info);
- g_debug (" inserting %s in %s", info->name, hash_key);
-
inserted = TRUE;
}
}
@@ -651,7 +575,6 @@ tumbler_manager_load_overrides_file (TumblerManager *manager,
if (first)
{
- g_debug (" first");
tumbler_manager_update_preferred (manager, hash_key);
}
@@ -683,7 +606,9 @@ tumbler_manager_load_overrides (TumblerManager *manager)
g_object_unref (file);
}
+#ifdef DEBUG
dump_overrides (manager);
+#endif
}
@@ -705,8 +630,6 @@ tumbler_manager_unload_overrides_file (TumblerManager *manager,
g_return_if_fail (TUMBLER_IS_MANAGER (manager));
g_return_if_fail (G_IS_FILE (file));
- g_debug ("unload_overrides_file: %s", g_file_get_path (file));
-
directory = g_file_get_parent (file);
dir_index = tumbler_manager_get_dir_index (manager, directory);
g_object_unref (directory);
@@ -733,7 +656,6 @@ tumbler_manager_unload_overrides_file (TumblerManager *manager,
if (lp == *overrides)
first = TRUE;
- g_debug (" deleting info %s", info->name);
override_info_free (info);
*overrides = g_list_delete_link (*overrides, lp);
@@ -750,7 +672,6 @@ tumbler_manager_unload_overrides_file (TumblerManager *manager,
for (lp = delete_keys; lp != NULL; lp = lp->next)
{
- g_debug (" deleting key %s", (const gchar *)lp->data);
g_hash_table_remove (manager->overrides, (const gchar *)lp->data);
}
@@ -785,8 +706,6 @@ tumbler_manager_load_thumbnailer (TumblerManager *manager,
g_return_if_fail (TUMBLER_IS_MANAGER (manager));
g_return_if_fail (G_IS_FILE (file));
- g_debug ("load_thumbnailer: %s", g_file_get_path (file));
-
filename = g_file_get_path (file);
key_file = g_key_file_new ();
@@ -866,7 +785,9 @@ tumbler_manager_load_thumbnailer (TumblerManager *manager,
}
info = thumbnailer_info_new ();
+#ifdef DEBUG
info->file = g_object_ref (file);
+#endif
directory = g_file_get_parent (file);
info->dir_index = tumbler_manager_get_dir_index (manager, directory);
@@ -897,7 +818,7 @@ tumbler_manager_load_thumbnailer (TumblerManager *manager,
if (list == NULL)
{
- list = g_slice_alloc0 (sizeof (GList *));
+ list = g_slice_alloc0 (sizeof (GList **));
*list = g_list_prepend (*list, info);
g_hash_table_insert (manager->thumbnailers, g_strdup (base_name), list);
@@ -969,8 +890,6 @@ tumbler_manager_load_thumbnailers (TumblerManager *manager,
dirname = g_file_get_path (directory);
- g_debug ("load_thumbnailers %s", dirname);
-
dir = g_dir_open (dirname, 0, NULL);
if (dir == NULL)
@@ -1057,7 +976,9 @@ tumbler_manager_load (TumblerManager *manager)
for (iter = manager->directories; iter != NULL; iter = iter->next)
tumbler_manager_load_thumbnailers (manager, iter->data);
+#ifdef DEBUG
dump_thumbnailers (manager);
+#endif
/* update the overrides cache */
tumbler_manager_load_overrides (manager);
@@ -1097,8 +1018,6 @@ tumbler_manager_thumbnailer_file_deleted (TumblerManager *manager,
g_return_if_fail (TUMBLER_IS_MANAGER (manager));
g_return_if_fail (G_IS_FILE (file));
- g_debug ("file_deleted: %s", g_file_get_path (file));
-
directory = g_file_get_parent (file);
dir_index = tumbler_manager_get_dir_index (manager, directory);
g_object_unref (directory);
@@ -1154,6 +1073,97 @@ tumbler_manager_thumbnailer_file_deleted (TumblerManager *manager,
static void
+tumbler_manager_directory_created (TumblerManager *manager,
+ GFile *directory,
+ gint dir_index)
+{
+ GFile *file;
+
+ g_return_if_fail (TUMBLER_IS_MANAGER (manager));
+ g_return_if_fail (G_IS_FILE (directory));
+ g_return_if_fail (dir_index >= 0);
+
+ tumbler_manager_load_thumbnailers (manager, directory);
+
+ file = g_file_get_child (directory, "overrides");
+ tumbler_manager_load_overrides_file (manager, file);
+ g_object_unref (file);
+}
+
+
+
+static void
+tumbler_manager_directory_deleted (TumblerManager *manager,
+ GFile *directory,
+ gint dir_index)
+{
+ ThumbnailerInfo *info;
+ ThumbnailerInfo *info2;
+ GHashTableIter iter;
+ GFile *file;
+ GList **list;
+ GList *lp;
+ GStrv hash_keys;
+ guint n;
+
+ g_return_if_fail (TUMBLER_IS_MANAGER (manager));
+ g_return_if_fail (G_IS_FILE (directory));
+ g_return_if_fail (dir_index >= 0);
+
+ file = g_file_get_child (directory, "overrides");
+ tumbler_manager_unload_overrides_file (manager, file);
+ g_object_unref (file);
+
+ g_hash_table_iter_init (&iter, manager->thumbnailers);
+ while (g_hash_table_iter_next (&iter, NULL, (gpointer) &list))
+ {
+ g_assert (list != NULL);
+
+ for (lp = *list; lp != NULL; lp = lp->next)
+ {
+ info = lp->data;
+
+ if (info->dir_index == dir_index)
+ {
+ if (lp == *list)
+ {
+ *list = g_list_delete_link (*list, lp);
+
+ tumbler_registry_remove (manager->registry, info->thumbnailer);
+
+ if (*list != NULL)
+ {
+ info2 = (*list)->data;
+
+ g_assert (info2 != NULL);
+
+ tumbler_registry_add (manager->registry, info2->thumbnailer);
+ }
+
+ hash_keys = tumbler_thumbnailer_get_hash_keys (info->thumbnailer);
+
+ for (n = 0; hash_keys != NULL && hash_keys[n] != NULL; ++n)
+ {
+ /* TODO we could check if an update is needed here */
+ tumbler_manager_update_preferred (manager, hash_keys[n]);
+ }
+
+ g_strfreev (hash_keys);
+ }
+ else
+ {
+ *list = g_list_delete_link (*list, lp);
+ }
+
+ thumbnailer_info_free (info);
+ }
+ }
+ }
+}
+
+
+
+static void
tumbler_manager_directory_changed (TumblerManager *manager,
GFile *file,
GFile *other_file,
@@ -1168,6 +1178,10 @@ tumbler_manager_directory_changed (TumblerManager *manager,
g_return_if_fail (G_IS_FILE (file));
g_return_if_fail (G_IS_FILE_MONITOR (monitor));
+#ifdef DEBUG
+ g_print ("Directory (contents) changed\n\n");
+#endif
+
if (event_type == G_FILE_MONITOR_EVENT_DELETED)
{
base_name = g_file_get_basename (file);
@@ -1176,16 +1190,18 @@ tumbler_manager_directory_changed (TumblerManager *manager,
{
g_mutex_lock (manager->mutex);
tumbler_manager_unload_overrides_file (manager, file);
+#ifdef DEBUG
dump_overrides (manager);
+#endif
g_mutex_unlock (manager->mutex);
}
else if (g_str_has_suffix (base_name, ".service"))
{
- g_debug ("service file %s deleted", g_file_get_path (file));
-
g_mutex_lock (manager->mutex);
tumbler_manager_thumbnailer_file_deleted (manager, file);
+#ifdef DEBUG
dump_thumbnailers (manager);
+#endif
g_mutex_unlock (manager->mutex);
}
else
@@ -1196,11 +1212,13 @@ tumbler_manager_directory_changed (TumblerManager *manager,
if (dir_index >= 0)
{
-#if 0
g_mutex_lock (manager->mutex);
- tumbler_manager_thumbnailer_dir_deleted (manager, dir_index);
- g_mutex_unlock (manager->mutex);
+ tumbler_manager_directory_deleted (manager, file, dir_index);
+#ifdef DEBUG
+ dump_overrides (manager);
+ dump_thumbnailers (manager);
#endif
+ g_mutex_unlock (manager->mutex);
}
}
}
@@ -1216,10 +1234,11 @@ tumbler_manager_directory_changed (TumblerManager *manager,
{
if (event_type == G_FILE_MONITOR_EVENT_CREATED)
{
- g_debug ("override file %s created", g_file_get_path (file));
g_mutex_lock (manager->mutex);
tumbler_manager_load_overrides_file (manager, file);
+#ifdef DEBUG
dump_overrides (manager);
+#endif
g_mutex_unlock (manager->mutex);
}
}
@@ -1227,19 +1246,163 @@ tumbler_manager_directory_changed (TumblerManager *manager,
{
if (event_type == G_FILE_MONITOR_EVENT_CREATED)
{
- g_debug ("service file %s created", g_file_get_path (file));
g_mutex_lock (manager->mutex);
tumbler_manager_load_thumbnailer (manager, file);
+#ifdef DEBUG
dump_thumbnailers (manager);
+#endif
g_mutex_unlock (manager->mutex);
}
}
}
+ else
+ {
+ g_mutex_lock (manager->mutex);
+ dir_index = tumbler_manager_get_dir_index (manager, file);
+ g_mutex_unlock (manager->mutex);
+
+ if (dir_index >= 0)
+ {
+ g_mutex_lock (manager->mutex);
+ tumbler_manager_directory_created (manager, file, dir_index);
+#ifdef DEBUG
+ dump_overrides (manager);
+ dump_thumbnailers (manager);
+#endif
+ g_mutex_unlock (manager->mutex);
+ }
+ }
}
}
+static OverrideInfo *
+override_info_new (void)
+{
+ return g_slice_new0 (OverrideInfo);
+}
+
+
+
+static void
+override_info_free (gpointer pointer)
+{
+ OverrideInfo *info = pointer;
+
+ if (info == NULL)
+ return;
+
+ g_free (info->name);
+ g_free (info->uri_scheme);
+ g_free (info->mime_type);
+
+ g_slice_free (OverrideInfo, info);
+}
+
+
+
+static void
+override_info_list_free (gpointer pointer)
+{
+ GList **infos = pointer;
+ GList *iter;
+
+ for (iter = *infos; iter != NULL; iter = iter->next)
+ override_info_free (iter->data);
+
+ g_list_free (*infos);
+ g_slice_free1 (sizeof (GList **), infos);
+}
+
+
+
+static ThumbnailerInfo *
+thumbnailer_info_new (void)
+{
+ return g_slice_new0 (ThumbnailerInfo);
+}
+
+
+
+static void
+thumbnailer_info_free (ThumbnailerInfo *info)
+{
+ if (info == NULL)
+ return;
+
+#ifdef DEBUG
+ g_object_unref (info->file);
+#endif
+ g_object_unref (info->thumbnailer);
+ g_slice_free (ThumbnailerInfo, info);
+}
+
+
+
+static void
+thumbnailer_info_list_free (gpointer pointer)
+{
+ GList **infos = pointer;
+ GList *iter;
+
+ for (iter = *infos; iter != NULL; iter = iter->next)
+ thumbnailer_info_free (iter->data);
+
+ g_list_free (*infos);
+ g_slice_free1 (sizeof (GList **), infos);
+}
+
+
+
+#ifdef DEBUG
+static void
+dump_overrides (TumblerManager *manager)
+{
+ GHashTableIter table_iter;
+ const gchar *hash_key;
+ GList **list;
+ GList *iter;
+
+ g_print ("Overrides:\n");
+
+ g_hash_table_iter_init (&table_iter, manager->overrides);
+ while (g_hash_table_iter_next (&table_iter, (gpointer) &hash_key, (gpointer) &list))
+ {
+ g_print (" %s:\n", hash_key);
+ for (iter = *list; iter != NULL; iter = iter->next)
+ g_print (" %s\n", ((OverrideInfo *)iter->data)->name);
+ }
+
+ g_print ("\n");
+}
+
+
+
+static void
+dump_thumbnailers (TumblerManager *manager)
+{
+ GHashTableIter table_iter;
+ const gchar *base_name;
+ GList **list;
+ GList *iter;
+
+ g_print ("Thumbnailers:\n");
+
+ g_hash_table_iter_init (&table_iter, manager->thumbnailers);
+ while (g_hash_table_iter_next (&table_iter, (gpointer) &base_name, (gpointer) &list))
+ {
+ g_print (" %s:\n", base_name);
+ for (iter = *list; iter != NULL; iter = iter->next)
+ g_print (" %s\n", g_file_get_path (((ThumbnailerInfo *)iter->data)->file));
+ }
+
+ g_print ("\n");
+}
+#endif /* DEBUG */
+
+
+
TumblerManager *
tumbler_manager_new (DBusGConnection *connection,
TumblerRegistry *registry)
@@ -1347,4 +1510,3 @@ tumbler_manager_register (TumblerManager *manager,
dbus_g_method_return (context);
}
-
More information about the Xfce4-commits
mailing list