[gthumb] load the file metadata before creating the viewer.
- From: Paolo Bacchilega <paobac src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gthumb] load the file metadata before creating the viewer.
- Date: Thu, 4 Feb 2010 13:46:05 +0000 (UTC)
commit 125db5fc3dc90065724b942307c3d611cad632d2
Author: Paolo Bacchilega <paobac src gnome org>
Date: Thu Feb 4 13:30:05 2010 +0100
load the file metadata before creating the viewer.
gthumb/gth-browser.c | 231 ++++++++++++++++++++++++++------------------------
1 files changed, 122 insertions(+), 109 deletions(-)
---
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index cbba5e6..57bdee6 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -4263,6 +4263,53 @@ gth_browser_show_last_image (GthBrowser *browser,
}
+/* -- gth_browser_load_file -- */
+
+
+typedef struct {
+ int ref;
+ GthBrowser *browser;
+ GthFileData *file_data;
+ gboolean view;
+} LoadFileData;
+
+
+static LoadFileData *
+load_file_data_new (GthBrowser *browser,
+ GthFileData *file_data,
+ gboolean view)
+{
+ LoadFileData *data;
+
+ data = g_new0 (LoadFileData, 1);
+ data->ref = 1;
+ data->browser = g_object_ref (browser);
+ if (file_data != NULL)
+ data->file_data = g_object_ref (file_data);
+ data->view = view;
+
+ return data;
+}
+
+
+static void
+load_file_data_ref (LoadFileData *data)
+{
+ data->ref++;
+}
+
+
+static void
+load_file_data_unref (LoadFileData *data)
+{
+ if (--data->ref > 0)
+ return;
+ _g_object_unref (data->file_data);
+ _g_object_unref (data->browser);
+ g_free (data);
+}
+
+
static void
gth_viewer_page_file_loaded_cb (GthViewerPage *viewer_page,
gboolean success,
@@ -4324,41 +4371,6 @@ gth_viewer_page_file_loaded_cb (GthViewerPage *viewer_page,
static void
-file_metadata_ready_cb (GList *files,
- GError *error,
- gpointer user_data)
-{
- GthBrowser *browser = user_data;
- GthFileData *file_data;
-
- file_data = files->data;
- if ((browser->priv->current_file == NULL) || ! g_file_equal (file_data->file, browser->priv->current_file->file))
- file_data = NULL;
-
- if (file_data == NULL)
- return;
-
- g_file_info_copy_into (file_data->info, browser->priv->current_file->info);
-
- if (browser->priv->viewer_page != NULL)
- gth_viewer_page_view (browser->priv->viewer_page, file_data);
- else
- gth_viewer_page_file_loaded_cb (NULL, FALSE, browser);
-
- if (browser->priv->location == NULL) {
- GFile *parent;
-
- parent = g_file_get_parent (file_data->file);
- _gth_browser_load (browser, parent, file_data->file, GTH_ACTION_GO_TO, FALSE);
- g_object_unref (parent);
- }
-}
-
-
-/* -- gth_browser_load_file -- */
-
-
-static void
_gth_browser_make_file_visible (GthBrowser *browser,
GthFileData *file_data)
{
@@ -4403,40 +4415,26 @@ _gth_browser_make_file_visible (GthBrowser *browser,
static void
-_gth_browser_deactivate_viewer_page (GthBrowser *browser)
-{
- if (browser->priv->viewer_page != NULL) {
- gth_viewer_page_deactivate (browser->priv->viewer_page);
- gtk_ui_manager_ensure_update (browser->priv->ui);
- gth_browser_set_viewer_widget (browser, NULL);
- g_object_unref (browser->priv->viewer_page);
- browser->priv->viewer_page = NULL;
- }
-}
-
-
-static void
-_gth_browser_load_file (GthBrowser *browser,
- GthFileData *file_data,
- gboolean view)
+file_metadata_ready_cb (GList *files,
+ GError *error,
+ gpointer user_data)
{
- GList *scan;
- GList *files;
-
- if (file_data == NULL) {
- _gth_browser_deactivate_viewer_page (browser);
- _g_object_unref (browser->priv->current_file);
- browser->priv->current_file = NULL;
-
- gtk_widget_hide (browser->priv->file_properties);
+ LoadFileData *data = user_data;
+ GthBrowser *browser;
+ GthFileData *file_data;
+ GList *scan;
- _gth_browser_update_statusbar_file_info (browser);
- gth_browser_update_title (browser);
- gth_browser_update_sensitivity (browser);
+ browser = data->browser;
+ file_data = files->data;
+ if ((browser->priv->current_file == NULL) || ! g_file_equal (file_data->file, browser->priv->current_file->file)) {
+ load_file_data_unref (data);
return;
}
- else if (! GTK_WIDGET_VISIBLE (browser->priv->file_properties)) {
+
+ g_file_info_copy_into (file_data->info, browser->priv->current_file->info);
+
+ if (! GTK_WIDGET_VISIBLE (browser->priv->file_properties)) {
GtkTreePath *path;
gtk_paned_set_position (GTK_PANED (browser->priv->browser_sidebar), browser->priv->browser_sidebar->allocation.height / 2);
@@ -4451,13 +4449,6 @@ _gth_browser_load_file (GthBrowser *browser,
}
}
- g_object_ref (file_data);
- _g_object_unref (browser->priv->current_file);
- browser->priv->current_file = gth_file_data_dup (file_data);
- g_object_unref (file_data);
-
- _gth_browser_make_file_visible (browser, browser->priv->current_file);
-
if (browser->priv->viewer_pages == NULL)
browser->priv->viewer_pages = g_list_reverse (gth_main_get_registered_objects (GTH_TYPE_VIEWER_PAGE));
for (scan = browser->priv->viewer_pages; scan; scan = scan->next) {
@@ -4469,7 +4460,7 @@ _gth_browser_load_file (GthBrowser *browser,
}
}
- if (view) {
+ if (data->view) {
gth_viewer_page_show (browser->priv->viewer_page);
if (browser->priv->fullscreen) {
gth_viewer_page_fullscreen (browser->priv->viewer_page, TRUE);
@@ -4478,57 +4469,79 @@ _gth_browser_load_file (GthBrowser *browser,
gth_window_set_current_page (GTH_WINDOW (browser), GTH_BROWSER_PAGE_VIEWER);
}
- files = g_list_prepend (NULL, gth_file_data_dup (browser->priv->current_file));
- _g_query_metadata_async (files,
- "*",
- NULL,
- file_metadata_ready_cb,
- browser);
-
- _g_object_list_unref (files);
-}
-
-
-typedef struct {
- int ref;
- GthBrowser *browser;
- GthFileData *file_data;
- gboolean view;
-} LoadFileData;
-
+ if (browser->priv->viewer_page != NULL)
+ gth_viewer_page_view (browser->priv->viewer_page, file_data);
+ else
+ gth_viewer_page_file_loaded_cb (NULL, FALSE, browser);
-static LoadFileData *
-load_file_data_new (GthBrowser *browser,
- GthFileData *file_data,
- gboolean view)
-{
- LoadFileData *data;
+ if (browser->priv->location == NULL) {
+ GFile *parent;
- data = g_new0 (LoadFileData, 1);
- data->ref = 1;
- data->browser = browser;
- if (file_data != NULL)
- data->file_data = g_object_ref (file_data);
- data->view = view;
+ parent = g_file_get_parent (file_data->file);
+ _gth_browser_load (browser, parent, file_data->file, GTH_ACTION_GO_TO, FALSE);
+ g_object_unref (parent);
+ }
- return data;
+ load_file_data_unref (data);
}
static void
-load_file_data_ref (LoadFileData *data)
+_gth_browser_deactivate_viewer_page (GthBrowser *browser)
{
- data->ref++;
+ if (browser->priv->viewer_page != NULL) {
+ gth_viewer_page_deactivate (browser->priv->viewer_page);
+ gtk_ui_manager_ensure_update (browser->priv->ui);
+ gth_browser_set_viewer_widget (browser, NULL);
+ g_object_unref (browser->priv->viewer_page);
+ browser->priv->viewer_page = NULL;
+ }
}
static void
-load_file_data_unref (LoadFileData *data)
+_gth_browser_load_file (GthBrowser *browser,
+ GthFileData *file_data,
+ gboolean view)
{
- if (--data->ref > 0)
+ LoadFileData *data;
+ GList *files;
+
+ if (file_data == NULL) {
+ _gth_browser_deactivate_viewer_page (browser);
+ _g_object_unref (browser->priv->current_file);
+ browser->priv->current_file = NULL;
+
+ gtk_widget_hide (browser->priv->file_properties);
+
+ _gth_browser_update_statusbar_file_info (browser);
+ gth_browser_update_title (browser);
+ gth_browser_update_sensitivity (browser);
+
return;
- _g_object_unref (data->file_data);
- g_free (data);
+ }
+
+ if ((browser->priv->current_file != NULL) && g_file_equal (file_data->file, browser->priv->current_file->file)) {
+ gth_window_set_current_page (GTH_WINDOW (browser), GTH_BROWSER_PAGE_VIEWER);
+ return;
+ }
+
+ _g_object_unref (browser->priv->current_file);
+ browser->priv->current_file = gth_file_data_dup (file_data);
+
+ _gth_browser_make_file_visible (browser, browser->priv->current_file);
+
+ data = load_file_data_new (browser, file_data, view);
+ files = g_list_prepend (NULL, data->file_data->file);
+ _g_query_all_metadata_async (files,
+ FALSE,
+ TRUE,
+ "*",
+ NULL,
+ file_metadata_ready_cb,
+ data);
+
+ g_list_free (files);
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]