[gthumb/ext] Fixed catalog reordering
- From: Paolo Bacchilega <paobac src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gthumb/ext] Fixed catalog reordering
- Date: Sun, 18 Oct 2009 17:06:30 +0000 (UTC)
commit 50de7c175769491c32a978e1bb7869550996259a
Author: Paolo Bacchilega <paobac src gnome org>
Date: Sun Oct 18 19:04:39 2009 +0200
Fixed catalog reordering
update the sort order after loading the folder metadata
extensions/catalogs/gth-file-source-catalogs.c | 3 +-
gthumb/gth-browser.c | 239 ++++++++++++------------
2 files changed, 121 insertions(+), 121 deletions(-)
---
diff --git a/extensions/catalogs/gth-file-source-catalogs.c b/extensions/catalogs/gth-file-source-catalogs.c
index c5483b9..f8a4d47 100644
--- a/extensions/catalogs/gth-file-source-catalogs.c
+++ b/extensions/catalogs/gth-file-source-catalogs.c
@@ -202,6 +202,7 @@ metadata_op_free (MetadataOpData *metadata_op)
g_object_unref (metadata_op->file_data);
g_free (metadata_op->attributes);
g_object_unref (metadata_op->catalog);
+ g_object_unref (metadata_op->catalogs);
g_free (metadata_op);
}
@@ -288,7 +289,7 @@ gth_file_source_catalogs_write_metadata (GthFileSource *file_source,
}
metadata_op = g_new0 (MetadataOpData, 1);
- metadata_op->catalogs = catalogs;
+ metadata_op->catalogs = g_object_ref (catalogs);
metadata_op->file_data = g_object_ref (file_data);
metadata_op->attributes = g_strdup (attributes);
metadata_op->ready_callback = callback;
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index 5b0094b..82312c1 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -1099,121 +1099,6 @@ _gth_browser_get_list_attributes (GthBrowser *browser,
static void _gth_browser_load_ready_cb (GthFileSource *file_source, GList *files, GError *error, gpointer user_data);
-static void
-requested_folder_attributes_ready_cb (GObject *file_source,
- GError *error,
- gpointer user_data)
-{
- LoadData *load_data = user_data;
- GthBrowser *browser = load_data->browser;
-
- if (error != NULL) {
- load_data_done (load_data, error);
- load_data_free (load_data);
- return;
- }
-
- gth_file_data_set_info (browser->priv->location, load_data->requested_folder->info);
-
- browser->priv->current_sort_type = gth_main_get_sort_type (g_file_info_get_attribute_string (browser->priv->location->info, "sort::type"));
- browser->priv->current_sort_inverse = g_file_info_get_attribute_boolean (browser->priv->location->info, "sort::inverse");
- if (browser->priv->current_sort_type == NULL) {
- browser->priv->current_sort_type = browser->priv->default_sort_type;
- browser->priv->current_sort_inverse = browser->priv->default_sort_inverse;
- g_file_info_set_attribute_string (browser->priv->location->info, "sort::type", browser->priv->current_sort_type->name);
- g_file_info_set_attribute_boolean (browser->priv->location->info, "sort::inverse", browser->priv->current_sort_inverse);
- }
-
- gth_file_source_list (load_data->file_source,
- load_data->requested_folder->file,
- eel_gconf_get_boolean (PREF_FAST_FILE_TYPE, TRUE) ? GFILE_STANDARD_ATTRIBUTES_WITH_FAST_CONTENT_TYPE : GFILE_STANDARD_ATTRIBUTES_WITH_CONTENT_TYPE,
- _gth_browser_load_ready_cb,
- load_data);
-}
-
-
-static void
-load_data_load_next_folder (LoadData *load_data)
-{
- GthFolderTree *folder_tree;
- GFile *folder_to_load;
-
- folder_tree = GTH_FOLDER_TREE (load_data->browser->priv->folder_tree);
- do {
- GtkTreePath *path;
-
- if (load_data->current == NULL)
- load_data->current = load_data->list;
- else
- load_data->current = load_data->current->next;
- folder_to_load = (GFile *) load_data->current->data;
-
- if (g_file_equal (folder_to_load, load_data->requested_folder->file))
- break;
-
- if ((load_data->requested_folder_parent != NULL) && g_file_equal (folder_to_load, load_data->requested_folder_parent))
- break;
-
- path = gth_folder_tree_get_path (folder_tree, folder_to_load);
- if (path == NULL)
- break;
-
- if (! gth_folder_tree_is_loaded (folder_tree, path)) {
- gtk_tree_path_free (path);
- break;
- }
-
- if (! g_file_equal (folder_to_load, load_data->requested_folder->file))
- gth_folder_tree_expand_row (folder_tree, path, FALSE);
-
- gtk_tree_path_free (path);
- }
- while (TRUE);
-
- if (g_file_equal (folder_to_load, load_data->requested_folder->file))
- gth_file_source_read_metadata (load_data->file_source,
- load_data->requested_folder,
- GFILE_BASIC_ATTRIBUTES ",access::*,sort::*",
- requested_folder_attributes_ready_cb,
- load_data);
- else
- gth_file_source_list (load_data->file_source,
- folder_to_load,
- eel_gconf_get_boolean (PREF_FAST_FILE_TYPE, TRUE) ? GFILE_STANDARD_ATTRIBUTES_WITH_FAST_CONTENT_TYPE : GFILE_STANDARD_ATTRIBUTES_WITH_CONTENT_TYPE,
- _gth_browser_load_ready_cb,
- load_data);
-}
-
-
-static gboolean
-_gth_browser_folder_is_visible (GthBrowser *browser,
- GthFileData *file_data)
-{
- if (browser->priv->show_hidden_files)
- return TRUE;
- else
- return ! g_file_info_get_is_hidden (file_data->info);
-}
-
-
-static GList *
-_gth_browser_get_visible_folders (GthBrowser *browser,
- GList *list)
-{
- GList *visible_list = NULL;
- GList *scan;
-
- for (scan = list; scan; scan = scan->next) {
- GthFileData *file_data = scan->data;
-
- if (_gth_browser_folder_is_visible (browser, file_data))
- visible_list = g_list_prepend (visible_list, g_object_ref (file_data));
- }
-
- return g_list_reverse (visible_list);
-}
-
-
/* -- _gth_browser_set_sort_order -- */
@@ -1319,13 +1204,11 @@ _gth_browser_set_sort_order (GthBrowser *browser,
if (! browser->priv->constructed)
return;
- g_file_info_set_attribute_string (browser->priv->location->info, "sort::type", sort_type != NULL ? sort_type->name : "general::unsorted");
- g_file_info_set_attribute_boolean (browser->priv->location->info, "sort::inverse", sort_type != NULL ? inverse : FALSE);
+ g_file_info_set_attribute_string (browser->priv->location->info, "sort::type", (sort_type != NULL) ? sort_type->name : "general::unsorted");
+ g_file_info_set_attribute_boolean (browser->priv->location->info, "sort::inverse", (sort_type != NULL) ? inverse : FALSE);
- if (! save) {
- /*write_sort_order_ready_cb (G_OBJECT (browser->priv->location_source), NULL, browser);*/
+ if (! save)
return;
- }
gth_file_source_write_metadata (browser->priv->location_source,
browser->priv->location,
@@ -1336,6 +1219,122 @@ _gth_browser_set_sort_order (GthBrowser *browser,
static void
+requested_folder_attributes_ready_cb (GObject *file_source,
+ GError *error,
+ gpointer user_data)
+{
+ LoadData *load_data = user_data;
+ GthBrowser *browser = load_data->browser;
+
+ if (error != NULL) {
+ load_data_done (load_data, error);
+ load_data_free (load_data);
+ return;
+ }
+
+ gth_file_data_set_info (browser->priv->location, load_data->requested_folder->info);
+
+ browser->priv->current_sort_type = gth_main_get_sort_type (g_file_info_get_attribute_string (browser->priv->location->info, "sort::type"));
+ browser->priv->current_sort_inverse = g_file_info_get_attribute_boolean (browser->priv->location->info, "sort::inverse");
+ if (browser->priv->current_sort_type == NULL) {
+ browser->priv->current_sort_type = browser->priv->default_sort_type;
+ browser->priv->current_sort_inverse = browser->priv->default_sort_inverse;
+ g_file_info_set_attribute_string (browser->priv->location->info, "sort::type", browser->priv->current_sort_type->name);
+ g_file_info_set_attribute_boolean (browser->priv->location->info, "sort::inverse", browser->priv->current_sort_inverse);
+ }
+ _gth_browser_set_sort_order (browser, browser->priv->current_sort_type, browser->priv->current_sort_inverse, FALSE);
+
+ gth_file_source_list (load_data->file_source,
+ load_data->requested_folder->file,
+ eel_gconf_get_boolean (PREF_FAST_FILE_TYPE, TRUE) ? GFILE_STANDARD_ATTRIBUTES_WITH_FAST_CONTENT_TYPE : GFILE_STANDARD_ATTRIBUTES_WITH_CONTENT_TYPE,
+ _gth_browser_load_ready_cb,
+ load_data);
+}
+
+
+static void
+load_data_load_next_folder (LoadData *load_data)
+{
+ GthFolderTree *folder_tree;
+ GFile *folder_to_load;
+
+ folder_tree = GTH_FOLDER_TREE (load_data->browser->priv->folder_tree);
+ do {
+ GtkTreePath *path;
+
+ if (load_data->current == NULL)
+ load_data->current = load_data->list;
+ else
+ load_data->current = load_data->current->next;
+ folder_to_load = (GFile *) load_data->current->data;
+
+ if (g_file_equal (folder_to_load, load_data->requested_folder->file))
+ break;
+
+ if ((load_data->requested_folder_parent != NULL) && g_file_equal (folder_to_load, load_data->requested_folder_parent))
+ break;
+
+ path = gth_folder_tree_get_path (folder_tree, folder_to_load);
+ if (path == NULL)
+ break;
+
+ if (! gth_folder_tree_is_loaded (folder_tree, path)) {
+ gtk_tree_path_free (path);
+ break;
+ }
+
+ if (! g_file_equal (folder_to_load, load_data->requested_folder->file))
+ gth_folder_tree_expand_row (folder_tree, path, FALSE);
+
+ gtk_tree_path_free (path);
+ }
+ while (TRUE);
+
+ if (g_file_equal (folder_to_load, load_data->requested_folder->file))
+ gth_file_source_read_metadata (load_data->file_source,
+ load_data->requested_folder,
+ GFILE_BASIC_ATTRIBUTES ",access::*,sort::*",
+ requested_folder_attributes_ready_cb,
+ load_data);
+ else
+ gth_file_source_list (load_data->file_source,
+ folder_to_load,
+ eel_gconf_get_boolean (PREF_FAST_FILE_TYPE, TRUE) ? GFILE_STANDARD_ATTRIBUTES_WITH_FAST_CONTENT_TYPE : GFILE_STANDARD_ATTRIBUTES_WITH_CONTENT_TYPE,
+ _gth_browser_load_ready_cb,
+ load_data);
+}
+
+
+static gboolean
+_gth_browser_folder_is_visible (GthBrowser *browser,
+ GthFileData *file_data)
+{
+ if (browser->priv->show_hidden_files)
+ return TRUE;
+ else
+ return ! g_file_info_get_is_hidden (file_data->info);
+}
+
+
+static GList *
+_gth_browser_get_visible_folders (GthBrowser *browser,
+ GList *list)
+{
+ GList *visible_list = NULL;
+ GList *scan;
+
+ for (scan = list; scan; scan = scan->next) {
+ GthFileData *file_data = scan->data;
+
+ if (_gth_browser_folder_is_visible (browser, file_data))
+ visible_list = g_list_prepend (visible_list, g_object_ref (file_data));
+ }
+
+ return g_list_reverse (visible_list);
+}
+
+
+static void
load_data_continue (LoadData *load_data,
GList *loaded_files)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]