diff options
Diffstat (limited to 'modules/composer-autosave/e-composer-registry.c')
-rw-r--r-- | modules/composer-autosave/e-composer-registry.c | 104 |
1 files changed, 48 insertions, 56 deletions
diff --git a/modules/composer-autosave/e-composer-registry.c b/modules/composer-autosave/e-composer-registry.c index bd4bb933dd..b8bb3c5293 100644 --- a/modules/composer-autosave/e-composer-registry.c +++ b/modules/composer-autosave/e-composer-registry.c @@ -16,10 +16,9 @@ * */ -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif +#include "e-composer-registry.h" +#include <config.h> #include <glib/gstdio.h> #include <libebackend/libebackend.h> @@ -29,52 +28,41 @@ #include "e-autosave-utils.h" -/* Standard GObject macros */ -#define E_TYPE_COMPOSER_REGISTRY \ - (e_composer_registry_get_type ()) -#define E_COMPOSER_REGISTRY(obj) \ - (G_TYPE_CHECK_INSTANCE_CAST \ - ((obj), E_TYPE_COMPOSER_REGISTRY, EComposerRegistry)) - -typedef struct _EComposerRegistry EComposerRegistry; -typedef struct _EComposerRegistryClass EComposerRegistryClass; +#define E_COMPOSER_REGISTRY_GET_PRIVATE(obj) \ + (G_TYPE_INSTANCE_GET_PRIVATE \ + ((obj), E_TYPE_COMPOSER_REGISTRY, EComposerRegistryPrivate)) -struct _EComposerRegistry { - EExtension parent; +struct _EComposerRegistryPrivate { GQueue composers; gboolean orphans_restored; }; -struct _EComposerRegistryClass { - EExtensionClass parent_class; -}; - -/* Forward Declarations */ -GType e_composer_registry_get_type (void); -void e_composer_registry_type_register (GTypeModule *type_module); - G_DEFINE_DYNAMIC_TYPE ( EComposerRegistry, e_composer_registry, E_TYPE_EXTENSION) static void -composer_registry_recovered_cb (EShell *shell, +composer_registry_recovered_cb (GObject *source_object, GAsyncResult *result, - EComposerRegistry *registry) + gpointer user_data) { EMsgComposer *composer; - GError *error = NULL; + EComposerRegistry *registry; + GError *local_error = NULL; + + registry = E_COMPOSER_REGISTRY (user_data); - composer = e_composer_load_snapshot_finish (shell, result, &error); + composer = e_composer_load_snapshot_finish ( + E_SHELL (source_object), result, &local_error); - if (error != NULL) { + if (local_error != NULL) { /* FIXME Show an alert dialog here explaining * why we could not recover the message. * Will need a new error XML entry. */ g_warn_if_fail (composer == NULL); - g_warning ("%s", error->message); - g_error_free (error); + g_warning ("%s", local_error->message); + g_error_free (local_error); goto exit; } @@ -86,27 +74,26 @@ exit: g_object_unref (registry); } -static gboolean -composer_registry_map_event_cb (GtkWindow *parent, - GdkEvent *event, - EComposerRegistry *registry) +static void +composer_registry_restore_orphans (EComposerRegistry *registry, + GtkWindow *parent) { EExtensible *extensible; GList *orphans; gint response; - GError *error = NULL; + GError *local_error = NULL; extensible = e_extension_get_extensible (E_EXTENSION (registry)); /* Look for orphaned auto-save files. */ orphans = e_composer_find_orphans ( - ®istry->composers, &error); + ®istry->priv->composers, &local_error); if (orphans == NULL) { - if (error != NULL) { - g_warning ("%s", error->message); - g_error_free (error); + if (local_error != NULL) { + g_warning ("%s", local_error->message); + g_error_free (local_error); } - goto exit; + return; } /* Ask if the user wants to recover the orphaned files. */ @@ -120,7 +107,7 @@ composer_registry_map_event_cb (GtkWindow *parent, if (response == GTK_RESPONSE_YES) e_composer_load_snapshot ( E_SHELL (extensible), - file, NULL, (GAsyncReadyCallback) + file, NULL, composer_registry_recovered_cb, g_object_ref (registry)); else @@ -130,9 +117,15 @@ composer_registry_map_event_cb (GtkWindow *parent, orphans = g_list_delete_link (orphans, orphans); } +} -exit: - registry->orphans_restored = TRUE; +static gboolean +composer_registry_map_event_cb (GtkWindow *parent, + GdkEvent *event, + EComposerRegistry *registry) +{ + composer_registry_restore_orphans (registry, parent); + registry->priv->orphans_restored = TRUE; return FALSE; } @@ -142,7 +135,7 @@ composer_registry_notify_cb (EComposerRegistry *registry, GObject *where_the_object_was) { /* Remove the finalized composer from the registry. */ - g_queue_remove (®istry->composers, where_the_object_was); + g_queue_remove (®istry->priv->composers, where_the_object_was); g_object_unref (registry); } @@ -154,15 +147,15 @@ composer_registry_window_added_cb (GtkApplication *application, { /* Offer to restore any orphaned auto-save files from the * previous session once the first EShellWindow is mapped. */ - if (E_IS_SHELL_WINDOW (window) && !registry->orphans_restored) + if (E_IS_SHELL_WINDOW (window) && !registry->priv->orphans_restored) { g_signal_connect ( window, "map-event", G_CALLBACK (composer_registry_map_event_cb), registry); /* Track the new composer window. */ - else if (E_IS_MSG_COMPOSER (window)) { - g_queue_push_tail (®istry->composers, window); + } else if (E_IS_MSG_COMPOSER (window)) { + g_queue_push_tail (®istry->priv->composers, window); g_object_weak_ref ( G_OBJECT (window), (GWeakNotify) composer_registry_notify_cb, @@ -173,28 +166,25 @@ composer_registry_window_added_cb (GtkApplication *application, static void composer_registry_finalize (GObject *object) { - GObjectClass *parent_class; - EComposerRegistry *registry; + EComposerRegistryPrivate *priv; - registry = E_COMPOSER_REGISTRY (object); + priv = E_COMPOSER_REGISTRY_GET_PRIVATE (object); /* All composers should have been finalized by now. */ - g_warn_if_fail (g_queue_is_empty (®istry->composers)); + g_warn_if_fail (g_queue_is_empty (&priv->composers)); /* Chain up to parent's finalize() method. */ - parent_class = G_OBJECT_CLASS (e_composer_registry_parent_class); - parent_class->finalize (object); + G_OBJECT_CLASS (e_composer_registry_parent_class)->finalize (object); } static void composer_registry_constructed (GObject *object) { EExtensible *extensible; - GObjectClass *parent_class; /* Chain up to parent's constructed() method. */ - parent_class = G_OBJECT_CLASS (e_composer_registry_parent_class); - parent_class->constructed (object); + G_OBJECT_CLASS (e_composer_registry_parent_class)-> + constructed (object); extensible = e_extension_get_extensible (E_EXTENSION (object)); @@ -211,6 +201,8 @@ e_composer_registry_class_init (EComposerRegistryClass *class) GObjectClass *object_class; EExtensionClass *extension_class; + g_type_class_add_private (class, sizeof (EComposerRegistryPrivate)); + object_class = G_OBJECT_CLASS (class); object_class->finalize = composer_registry_finalize; object_class->constructed = composer_registry_constructed; @@ -227,7 +219,7 @@ e_composer_registry_class_finalize (EComposerRegistryClass *class) static void e_composer_registry_init (EComposerRegistry *registry) { - g_queue_init (®istry->composers); + registry->priv = E_COMPOSER_REGISTRY_GET_PRIVATE (registry); } void |