[gthumb] use the basic viewer if the default viewer fails to load the file
- From: Paolo Bacchilega <paobac src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gthumb] use the basic viewer if the default viewer fails to load the file
- Date: Thu, 4 Feb 2010 13:45:55 +0000 (UTC)
commit f56f130590f8507837c89a760fbf19add78c6cd5
Author: Paolo Bacchilega <paobac src gnome org>
Date: Thu Feb 4 12:38:09 2010 +0100
use the basic viewer if the default viewer fails to load the file
extensions/file_viewer/gth-file-viewer-page.c | 3 +-
extensions/gstreamer/gth-media-viewer-page.c | 2 +-
extensions/image_viewer/gth-image-viewer-page.c | 8 ++-
gthumb/gth-browser.c | 64 ++++++++++++++++------
gthumb/gth-thumb-loader.c | 4 +-
gthumb/gth-viewer-page.c | 10 ++--
gthumb/gth-viewer-page.h | 6 ++-
7 files changed, 66 insertions(+), 31 deletions(-)
---
diff --git a/extensions/file_viewer/gth-file-viewer-page.c b/extensions/file_viewer/gth-file-viewer-page.c
index 344b264..2ab79e2 100644
--- a/extensions/file_viewer/gth-file-viewer-page.c
+++ b/extensions/file_viewer/gth-file-viewer-page.c
@@ -81,9 +81,9 @@ thumb_loader_ready_cb (GthThumbLoader *il,
GError *error,
GthFileViewerPage *self)
{
- gth_viewer_page_file_loaded (GTH_VIEWER_PAGE (self));
if (error == NULL)
gtk_image_set_from_pixbuf (GTK_IMAGE (self->priv->icon), gth_thumb_loader_get_pixbuf (self->priv->thumb_loader));
+ gth_viewer_page_file_loaded (GTH_VIEWER_PAGE (self), TRUE);
}
@@ -298,6 +298,7 @@ static void
gth_file_viewer_page_instance_init (GthFileViewerPage *self)
{
self->priv = GTH_FILE_VIEWER_PAGE_GET_PRIVATE (self);
+ self->priv->thumb_loader = NULL;
}
diff --git a/extensions/gstreamer/gth-media-viewer-page.c b/extensions/gstreamer/gth-media-viewer-page.c
index 442c59a..cbd00f4 100644
--- a/extensions/gstreamer/gth-media-viewer-page.c
+++ b/extensions/gstreamer/gth-media-viewer-page.c
@@ -930,7 +930,7 @@ gth_media_viewer_page_real_view (GthViewerPage *base,
/**/
- gth_viewer_page_file_loaded (GTH_VIEWER_PAGE (self));
+ gth_viewer_page_file_loaded (GTH_VIEWER_PAGE (self), TRUE);
g_signal_handlers_block_by_func(GET_WIDGET ("adjustment_position"), position_value_changed_cb, self);
gtk_adjustment_set_value (GTK_ADJUSTMENT (GET_WIDGET ("adjustment_position")), 0.0);
g_signal_handlers_unblock_by_func(GET_WIDGET ("adjustment_position"), position_value_changed_cb, self);
diff --git a/extensions/image_viewer/gth-image-viewer-page.c b/extensions/image_viewer/gth-image-viewer-page.c
index 5f2da34..50bd35e 100644
--- a/extensions/image_viewer/gth-image-viewer-page.c
+++ b/extensions/image_viewer/gth-image-viewer-page.c
@@ -206,7 +206,7 @@ viewer_image_ready_cb (GtkWidget *widget,
gth_image_history_add_image (self->priv->history,
gth_image_viewer_get_current_pixbuf (GTH_IMAGE_VIEWER (self->priv->viewer)),
FALSE);
- gth_viewer_page_file_loaded (GTH_VIEWER_PAGE (self));
+ gth_viewer_page_file_loaded (GTH_VIEWER_PAGE (self), TRUE);
}
@@ -264,13 +264,15 @@ image_preloader_requested_ready_cb (GthImagePreloader *preloader,
GthImageLoader *image_loader;
if (error != NULL) {
- gth_image_viewer_set_void (GTH_IMAGE_VIEWER (self->priv->viewer));
+ gth_viewer_page_file_loaded (GTH_VIEWER_PAGE (self), FALSE);
return;
}
image_loader = gth_image_preloader_get_loader (self->priv->preloader, gth_image_preloader_get_requested (self->priv->preloader));
- if (image_loader == NULL)
+ if (image_loader == NULL) {
+ gth_viewer_page_file_loaded (GTH_VIEWER_PAGE (self), FALSE);
return;
+ }
if (GTK_WIDGET_VISIBLE (self->priv->viewer))
gth_viewer_page_focus (GTH_VIEWER_PAGE (self));
diff --git a/gthumb/gth-browser.c b/gthumb/gth-browser.c
index 8a6b617..cbba5e6 100644
--- a/gthumb/gth-browser.c
+++ b/gthumb/gth-browser.c
@@ -4265,10 +4265,54 @@ gth_browser_show_last_image (GthBrowser *browser,
static void
gth_viewer_page_file_loaded_cb (GthViewerPage *viewer_page,
+ gboolean success,
+ gpointer user_data);
+
+
+static void
+_gth_browser_set_current_viewer_page (GthBrowser *browser,
+ GthViewerPage *registered_viewer_page)
+{
+ if ((browser->priv->viewer_page != NULL) && (G_OBJECT_TYPE (registered_viewer_page) != G_OBJECT_TYPE (browser->priv->viewer_page))) {
+ 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;
+ }
+ if (browser->priv->viewer_page == NULL) {
+ browser->priv->viewer_page = g_object_new (G_OBJECT_TYPE (registered_viewer_page), NULL);
+ gth_viewer_page_activate (browser->priv->viewer_page, browser);
+ gtk_ui_manager_ensure_update (browser->priv->ui);
+
+ g_signal_connect (browser->priv->viewer_page,
+ "file-loaded",
+ G_CALLBACK (gth_viewer_page_file_loaded_cb),
+ browser);
+ }
+}
+
+
+static void
+gth_viewer_page_file_loaded_cb (GthViewerPage *viewer_page,
+ gboolean success,
gpointer user_data)
{
GthBrowser *browser = user_data;
+ if (! success) {
+ GthViewerPage *basic_viewer_page;
+
+ /* Use the basic viewer if the default viewer failed. The
+ * basic viewer is registered before any other viewer, so it's
+ * the last one in the viewer_pages list. */
+
+ basic_viewer_page = g_list_last (browser->priv->viewer_pages)->data;
+ _gth_browser_set_current_viewer_page (browser, basic_viewer_page);
+ gth_viewer_page_view (browser->priv->viewer_page, browser->priv->current_file);
+ return;
+ }
+
g_file_info_set_attribute_boolean (browser->priv->current_file->info, "gth::file::is-modified", FALSE);
gth_browser_update_title (browser);
@@ -4299,7 +4343,7 @@ file_metadata_ready_cb (GList *files,
if (browser->priv->viewer_page != NULL)
gth_viewer_page_view (browser->priv->viewer_page, file_data);
else
- gth_viewer_page_file_loaded_cb (NULL, browser);
+ gth_viewer_page_file_loaded_cb (NULL, FALSE, browser);
if (browser->priv->location == NULL) {
GFile *parent;
@@ -4420,23 +4464,7 @@ _gth_browser_load_file (GthBrowser *browser,
GthViewerPage *registered_viewer_page = scan->data;
if (gth_viewer_page_can_view (registered_viewer_page, browser->priv->current_file)) {
- if ((browser->priv->viewer_page != NULL) && (G_OBJECT_TYPE (registered_viewer_page) != G_OBJECT_TYPE (browser->priv->viewer_page))) {
- 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;
- }
- if (browser->priv->viewer_page == NULL) {
- browser->priv->viewer_page = g_object_new (G_OBJECT_TYPE (registered_viewer_page), NULL);
- gth_viewer_page_activate (browser->priv->viewer_page, browser);
- gtk_ui_manager_ensure_update (browser->priv->ui);
-
- g_signal_connect (browser->priv->viewer_page,
- "file-loaded",
- G_CALLBACK (gth_viewer_page_file_loaded_cb),
- browser);
- }
+ _gth_browser_set_current_viewer_page (browser, registered_viewer_page);
break;
}
}
diff --git a/gthumb/gth-thumb-loader.c b/gthumb/gth-thumb-loader.c
index de2bf20..8f587b0 100644
--- a/gthumb/gth-thumb-loader.c
+++ b/gthumb/gth-thumb-loader.c
@@ -97,8 +97,8 @@ gth_thumb_loader_finalize (GObject *object)
if (self->priv != NULL) {
g_free (self->priv->thumbnailer_tmpfile);
_g_object_unref (self->priv->pixbuf);
- g_object_unref (self->priv->iloader);
- g_object_unref (self->priv->file_data);
+ _g_object_unref (self->priv->iloader);
+ _g_object_unref (self->priv->file_data);
g_free (self->priv);
self->priv = NULL;
}
diff --git a/gthumb/gth-viewer-page.c b/gthumb/gth-viewer-page.c
index 023d254..b8a5bf6 100644
--- a/gthumb/gth-viewer-page.c
+++ b/gthumb/gth-viewer-page.c
@@ -45,9 +45,10 @@ gth_viewer_page_base_init (gpointer g_iface)
G_SIGNAL_RUN_LAST,
G_STRUCT_OFFSET (GthViewerPageIface, file_loaded),
NULL, NULL,
- g_cclosure_marshal_VOID__VOID,
+ g_cclosure_marshal_VOID__BOOLEAN,
G_TYPE_NONE,
- 0);
+ 1,
+ G_TYPE_BOOLEAN);
initialized = TRUE;
}
@@ -190,7 +191,8 @@ gth_viewer_page_revert (GthViewerPage *self)
void
-gth_viewer_page_file_loaded (GthViewerPage *self)
+gth_viewer_page_file_loaded (GthViewerPage *self,
+ gboolean success)
{
- g_signal_emit (self, gth_viewer_page_signals[FILE_LOADED], 0, NULL);
+ g_signal_emit (self, gth_viewer_page_signals[FILE_LOADED], 0, success);
}
diff --git a/gthumb/gth-viewer-page.h b/gthumb/gth-viewer-page.h
index 7913aec..fb8f92a 100644
--- a/gthumb/gth-viewer-page.h
+++ b/gthumb/gth-viewer-page.h
@@ -74,7 +74,8 @@ struct _GthViewerPageIface {
/*< signals >*/
- void (*file_loaded) (GthViewerPage *self);
+ void (*file_loaded) (GthViewerPage *self,
+ gboolean success);
};
GType gth_viewer_page_get_type (void);
@@ -102,7 +103,8 @@ void gth_viewer_page_save_as (GthViewerPage *self,
FileSavedFunc func,
gpointer data);
void gth_viewer_page_revert (GthViewerPage *self);
-void gth_viewer_page_file_loaded (GthViewerPage *self);
+void gth_viewer_page_file_loaded (GthViewerPage *self,
+ gboolean success);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]