[gthumb] browser: load the metadata after a timeout
- From: Paolo Bacchilega <paobac src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gthumb] browser: load the metadata after a timeout
- Date: Sat, 9 Nov 2013 19:56:05 +0000 (UTC)
commit 461e2fb2cb13f3579ffba507c1debfcd1526b225
Author: Paolo Bacchilega <paobac src gnome org>
Date: Sat Sep 14 18:21:19 2013 +0200
browser: load the metadata after a timeout
gthumb/gth-browser.c | 79 +++++++++++++++++++++++++++++++++++++------------
1 files changed, 59 insertions(+), 20 deletions(-)
---
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index a46cd5d..2dc1190 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -66,6 +66,7 @@
#define GTH_BROWSER_CALLBACK(f) ((GthBrowserCallback) (f))
#define MAX_HISTORY_LENGTH 15
#define LOAD_FILE_DELAY 150
+#define LOAD_METADATA_DELAY 150
#define HIDE_MOUSE_DELAY 1000
#define MOTION_THRESHOLD 0
#define UPDATE_SELECTION_DELAY 200
@@ -170,6 +171,7 @@ struct _GthBrowserPrivate {
GList *load_data_queue;
GList *load_file_data_queue;
guint load_file_timeout;
+ guint load_metadata_timeout;
char *list_attributes;
gboolean constructed;
guint construct_step2_event;
@@ -4306,7 +4308,7 @@ gth_browser_init (GthBrowser *browser)
browser->priv = G_TYPE_INSTANCE_GET_PRIVATE (browser, GTH_TYPE_BROWSER, GthBrowserPrivate);
browser->priv->viewer_pages = NULL;
browser->priv->viewer_page = NULL;
- browser->priv->image_preloader = gth_image_preloader_new (GTH_LOAD_POLICY_TWO_STEPS, 10);
+ browser->priv->image_preloader = gth_image_preloader_new ();
browser->priv->progress_dialog = NULL;
browser->priv->named_dialogs = g_hash_table_new (g_str_hash, g_str_equal);
for (i = 0; i < GTH_BROWSER_N_PAGES; i++)
@@ -4336,6 +4338,7 @@ gth_browser_init (GthBrowser *browser)
browser->priv->load_data_queue = NULL;
browser->priv->load_file_data_queue = NULL;
browser->priv->load_file_timeout = 0;
+ browser->priv->load_metadata_timeout = 0;
browser->priv->list_attributes = NULL;
browser->priv->constructed = FALSE;
browser->priv->selection_changed_event = 0;
@@ -5697,6 +5700,16 @@ load_file_data_new (GthBrowser *browser,
data->view = view;
data->cancellable = g_cancellable_new ();
+ /* cancel all other file data operations */
+ {
+ GList *scan;
+
+ for (scan = browser->priv->load_file_data_queue; scan; scan = scan->next) {
+ LoadFileData *data = scan->data;
+ g_cancellable_cancel (data->cancellable);
+ }
+ }
+
browser->priv->load_file_data_queue = g_list_prepend (browser->priv->load_file_data_queue, data);
return data;
@@ -5822,6 +5835,27 @@ file_metadata_ready_cb (GList *files,
}
+static gboolean
+load_metadata_cb (gpointer user_data)
+{
+ LoadFileData *data = user_data;
+ GList *files;
+
+ load_file_data_ref (data);
+ files = g_list_prepend (NULL, data->browser->priv->current_file->file);
+ _g_query_all_metadata_async (files,
+ GTH_LIST_DEFAULT,
+ "*",
+ data->cancellable,
+ file_metadata_ready_cb,
+ data);
+
+ g_list_free (files);
+
+ return FALSE;
+}
+
+
static void
gth_viewer_page_file_loaded_cb (GthViewerPage *viewer_page,
GthFileData *file_data,
@@ -5830,7 +5864,6 @@ gth_viewer_page_file_loaded_cb (GthViewerPage *viewer_page,
{
GthBrowser *browser = user_data;
LoadFileData *data;
- GList *files;
if ((browser->priv->current_file == NULL) || ! g_file_equal (file_data->file,
browser->priv->current_file->file))
return;
@@ -5864,16 +5897,15 @@ gth_viewer_page_file_loaded_cb (GthViewerPage *viewer_page,
gth_browser_set_shrink_wrap_viewer (browser, TRUE);
}
- data = load_file_data_new (browser, browser->priv->current_file, FALSE);
- files = g_list_prepend (NULL, browser->priv->current_file->file);
- _g_query_all_metadata_async (files,
- GTH_LIST_DEFAULT,
- "*",
- data->cancellable,
- file_metadata_ready_cb,
- data);
+ if (browser->priv->load_metadata_timeout != 0)
+ g_source_remove (browser->priv->load_metadata_timeout);
- g_list_free (files);
+ data = load_file_data_new (browser, browser->priv->current_file, FALSE);
+ browser->priv->load_metadata_timeout = g_timeout_add_full (G_PRIORITY_DEFAULT,
+ LOAD_METADATA_DELAY,
+ load_metadata_cb,
+ data,
+ (GDestroyNotify) load_file_data_unref);
}
@@ -6007,26 +6039,28 @@ gth_browser_load_file (GthBrowser *browser,
_gth_browser_hide_infobar (browser);
- data = load_file_data_new (browser, file_data, view);
+ if (browser->priv->load_file_timeout != 0) {
+ g_source_remove (browser->priv->load_file_timeout);
+ browser->priv->load_file_timeout = 0;
+ }
+ if (browser->priv->load_metadata_timeout != 0) {
+ g_source_remove (browser->priv->load_metadata_timeout);
+ browser->priv->load_metadata_timeout = 0;
+ }
+
+ data = load_file_data_new (browser, file_data, view);
if (view) {
- if (browser->priv->load_file_timeout != 0) {
- g_source_remove (browser->priv->load_file_timeout);
- browser->priv->load_file_timeout = 0;
- }
load_file_delayed_cb (data);
load_file_data_unref (data);
}
- else {
- if (browser->priv->load_file_timeout != 0)
- g_source_remove (browser->priv->load_file_timeout);
+ else
browser->priv->load_file_timeout =
g_timeout_add_full (G_PRIORITY_DEFAULT,
LOAD_FILE_DELAY,
load_file_delayed_cb,
data,
(GDestroyNotify) load_file_data_unref);
- }
}
@@ -6355,6 +6389,11 @@ _gth_browser_cancel (GthBrowser *browser,
browser->priv->load_file_timeout = 0;
}
+ if (browser->priv->load_metadata_timeout != 0) {
+ g_source_remove (browser->priv->load_metadata_timeout);
+ browser->priv->load_metadata_timeout = 0;
+ }
+
for (scan = browser->priv->load_data_queue; scan; scan = scan->next) {
LoadData *data = scan->data;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]