[gthumb/ext: 63/79] filter the folders in the monitor event callbacks
- From: Paolo Bacchilega <paobac src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gthumb/ext: 63/79] filter the folders in the monitor event callbacks
- Date: Sun, 2 Aug 2009 20:31:24 +0000 (UTC)
commit e09bd928927b29470fb508442df18e2b97476c57
Author: Paolo Bacchilega <paobac src gnome org>
Date: Sat Jul 25 00:23:30 2009 +0200
filter the folders in the monitor event callbacks
gthumb/gth-browser.c | 64 +++++++++++++++++++++++++++++++++++---------------
1 files changed, 45 insertions(+), 19 deletions(-)
---
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index eaa40ad..b9a1922 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -862,6 +862,7 @@ _gth_browser_update_statusbar_list_info (GthBrowser *browser)
typedef struct {
GthBrowser *browser;
GFile *requested_folder;
+ GFile *requested_folder_parent;
GthAction action;
GList *list;
GList *current;
@@ -883,6 +884,7 @@ load_data_new (GthBrowser *browser,
load_data = g_new0 (LoadData, 1);
load_data->browser = browser;
load_data->requested_folder = g_object_ref (location);
+ load_data->requested_folder_parent = g_file_get_parent (load_data->requested_folder);
load_data->action = action;
load_data->cancellable = g_cancellable_new ();
@@ -918,6 +920,7 @@ load_data_free (LoadData *data)
data->browser->priv->load_data_queue = g_list_remove (data->browser->priv->load_data_queue, data);
g_object_unref (data->requested_folder);
+ _g_object_unref (data->requested_folder_parent);
_g_object_unref (data->file_source);
_g_object_list_unref (data->list);
_g_object_unref (data->entry_point);
@@ -1021,11 +1024,14 @@ load_data_load_next_folder (LoadData *load_data)
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))
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;
@@ -1063,6 +1069,35 @@ load_data_load_next_folder (LoadData *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)
@@ -1081,20 +1116,7 @@ load_data_continue (LoadData *load_data,
return;
}
- if (! browser->priv->show_hidden_files) {
- GList *scan;
-
- files = NULL;
- for (scan = loaded_files; scan; scan = scan->next) {
- GthFileData *file_data = scan->data;
-
- if (! g_file_info_get_is_hidden (file_data->info))
- files = g_list_prepend (files, file_data);
- }
- files = g_list_reverse (files);
- }
- else
- files = g_list_copy (loaded_files);
+ files = _gth_browser_get_visible_folders (browser, loaded_files);
loaded_folder = (GFile *) load_data->current->data;
gth_folder_tree_set_children (GTH_FOLDER_TREE (browser->priv->folder_tree), loaded_folder, files);
@@ -1104,7 +1126,7 @@ load_data_continue (LoadData *load_data,
if (! g_file_equal (loaded_folder, load_data->requested_folder)) {
gtk_tree_path_free (path);
- g_list_free (files);
+ _g_object_list_unref (files);
load_data_load_next_folder (load_data);
return;
@@ -1168,7 +1190,7 @@ load_data_continue (LoadData *load_data,
if (path != NULL)
gtk_tree_path_free (path);
load_data_free (load_data);
- g_list_free (files);
+ _g_object_list_unref (files);
}
@@ -2058,6 +2080,7 @@ file_attributes_ready_cb (GthFileSource *file_source,
{
MonitorEventData *monitor_data = user_data;
GthBrowser *browser = monitor_data->browser;
+ GList *visible_folders;
if (error != NULL) {
monitor_event_data_unref (monitor_data);
@@ -2065,9 +2088,11 @@ file_attributes_ready_cb (GthFileSource *file_source,
return;
}
+ visible_folders = _gth_browser_get_visible_folders (browser, files);
+
if (monitor_data->event == GTH_MONITOR_EVENT_CREATED) {
if (monitor_data->update_folder_tree)
- gth_folder_tree_add_children (GTH_FOLDER_TREE (browser->priv->folder_tree), monitor_data->parent, files);
+ gth_folder_tree_add_children (GTH_FOLDER_TREE (browser->priv->folder_tree), monitor_data->parent, visible_folders);
if (monitor_data->update_file_list) {
gth_file_list_add_files (GTH_FILE_LIST (browser->priv->file_list), files);
gth_file_list_update_files (GTH_FILE_LIST (browser->priv->file_list), files);
@@ -2075,7 +2100,7 @@ file_attributes_ready_cb (GthFileSource *file_source,
}
else if (monitor_data->event == GTH_MONITOR_EVENT_CHANGED) {
if (monitor_data->update_folder_tree)
- gth_folder_tree_update_children (GTH_FOLDER_TREE (browser->priv->folder_tree), monitor_data->parent, files);
+ gth_folder_tree_update_children (GTH_FOLDER_TREE (browser->priv->folder_tree), monitor_data->parent, visible_folders);
if (monitor_data->update_file_list)
gth_file_list_update_files (GTH_FILE_LIST (browser->priv->file_list), files);
}
@@ -2093,6 +2118,7 @@ file_attributes_ready_cb (GthFileSource *file_source,
_gth_browser_update_statusbar_list_info (browser);
gth_browser_update_sensitivity (browser);
+ _g_object_list_unref (visible_folders);
monitor_event_data_unref (monitor_data);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]