Sync headers in ModestHeaderWindow dispose instead of finalize.
authorJose Dapena Paz <jdapena@igalia.com>
Mon, 14 Sep 2009 14:58:26 +0000 (16:58 +0200)
committerJose Dapena Paz <jdapena@igalia.com>
Mon, 14 Sep 2009 15:06:41 +0000 (17:06 +0200)
* src/hildon2/modest-header-window.c: sync header changes on dispose of
  header window instead of finalize, as now, the folder in header view
  is unreferenced in dispose stage, and then sync was not working
  (fixes NB#138247).

src/hildon2/modest-header-window.c

index 9abe2b0..6490842 100644 (file)
@@ -113,6 +113,7 @@ struct _ModestHeaderWindowPrivate {
 static void modest_header_window_class_init  (ModestHeaderWindowClass *klass);
 static void modest_header_window_init        (ModestHeaderWindow *obj);
 static void modest_header_window_finalize    (GObject *obj);
+static void modest_header_window_dispose     (GObject *obj);
 
 static void connect_signals (ModestHeaderWindow *self);
 static void modest_header_window_disconnect_signals (ModestWindow *self);
@@ -225,6 +226,7 @@ modest_header_window_class_init (ModestHeaderWindowClass *klass)
 
        parent_class            = g_type_class_peek_parent (klass);
        gobject_class->finalize = modest_header_window_finalize;
+       gobject_class->dispose = modest_header_window_dispose;
 
        g_type_class_add_private (gobject_class, sizeof(ModestHeaderWindowPrivate));
        
@@ -266,13 +268,29 @@ modest_header_window_init (ModestHeaderWindow *obj)
 }
 
 static void
-modest_header_window_finalize (GObject *obj)
+modest_header_window_dispose (GObject *obj)
 {
        ModestHeaderWindowPrivate *priv;
        TnyFolder *folder;
 
        priv = MODEST_HEADER_WINDOW_GET_PRIVATE(obj);
 
+       folder = modest_header_view_get_folder ((ModestHeaderView *) priv->header_view);
+       if (folder) {
+               tny_folder_sync_async (folder, FALSE, NULL, NULL, NULL);
+               g_object_unref (folder);
+       }
+
+       G_OBJECT_CLASS(parent_class)->dispose (obj);
+}
+
+static void
+modest_header_window_finalize (GObject *obj)
+{
+       ModestHeaderWindowPrivate *priv;
+
+       priv = MODEST_HEADER_WINDOW_GET_PRIVATE(obj);
+
        if (priv->model_weak_ref) {
                g_object_weak_unref ((GObject *) priv->model_weak_ref,
                                     on_header_view_model_destroyed,
@@ -285,12 +303,6 @@ modest_header_window_finalize (GObject *obj)
                on_header_view_model_destroyed (obj, (GObject *) priv->model_weak_ref);
        }
 
-       folder = modest_header_view_get_folder ((ModestHeaderView *) priv->header_view);
-       if (folder) {
-               tny_folder_sync_async (folder, FALSE, NULL, NULL, NULL);
-               g_object_unref (folder);
-       }
-
        modest_header_window_disconnect_signals (MODEST_WINDOW (obj));
 
        g_object_unref (priv->header_view);