]> www.fi.muni.cz Git - evince.git/commitdiff
Correctly disconnect from job signals on destroy.
authorNickolay V. Shmyrev <nshmyrev@yandex.ru>
Sun, 8 Oct 2006 21:34:28 +0000 (21:34 +0000)
committerNickolay V. Shmyrev <nshmyrev@src.gnome.org>
Sun, 8 Oct 2006 21:34:28 +0000 (21:34 +0000)
2006-10-09  Nickolay V. Shmyrev  <nshmyrev@yandex.ru>

* shell/ev-properties-fonts.c: (ev_properties_fonts_dispose),
(job_fonts_finished_cb), (ev_properties_fonts_set_document):

Correctly disconnect from job signals on destroy.

ChangeLog
shell/ev-properties-fonts.c

index db495ea671cc6f6fbedc8576e765f600493dfef2..b348be7e1826b11f00b52e1135f0adc1cfdd0f0e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2006-10-09  Nickolay V. Shmyrev  <nshmyrev@yandex.ru>
+
+       * shell/ev-properties-fonts.c: (ev_properties_fonts_dispose),
+       (job_fonts_finished_cb), (ev_properties_fonts_set_document):
+       
+       Correctly disconnect from job signals on destroy.
+
 2006-10-08  Nickolay V. Shmyrev  <nshmyrev@yandex.ru>
 
        * shell/ev-view-private.h:
index 5a792072b172d31063a46152352071e66e24579a..b50206fa97a0fda60a0c572ab046e92aa5e66f1f 100644 (file)
@@ -38,6 +38,7 @@ struct _EvPropertiesFonts {
 
        GtkWidget *fonts_treeview;
        GtkWidget *fonts_progress_label;
+       EvJob     *fonts_job;
 
        EvDocument *document;
 };
@@ -46,6 +47,9 @@ struct _EvPropertiesFontsClass {
        GtkVBoxClass base_class;
 };
 
+static void
+job_fonts_finished_cb (EvJob *job, EvPropertiesFonts *properties);
+
 G_DEFINE_TYPE (EvPropertiesFonts, ev_properties_fonts, GTK_TYPE_VBOX)
 
 static void
@@ -57,6 +61,18 @@ ev_properties_fonts_dispose (GObject *object)
                g_object_unref (properties->xml);
                properties->xml = NULL;
        }
+       
+       if (properties->fonts_job) {
+
+               g_signal_handlers_disconnect_by_func
+                               (properties->fonts_job, 
+                                job_fonts_finished_cb, 
+                                properties);
+               ev_job_queue_remove_job (properties->fonts_job);
+
+               g_object_unref (properties->fonts_job);         
+               properties->fonts_job = NULL;
+       }
 }
 
 static void
@@ -146,25 +162,25 @@ job_fonts_finished_cb (EvJob *job, EvPropertiesFonts *properties)
 {      
        EvDocumentFonts *document_fonts = EV_DOCUMENT_FONTS (job->document);
        double progress;
-
+       
        progress = ev_document_fonts_get_progress (document_fonts);
        update_progress_label (properties->fonts_progress_label, progress);
 
        if (EV_JOB_FONTS (job)->scan_completed) {
                g_signal_handlers_disconnect_by_func
                                (job, job_fonts_finished_cb, properties);
+               g_object_unref (properties->fonts_job);
+               properties->fonts_job = NULL;
        } else {
                GtkTreeModel *model;
-               EvJob *new_job;
 
                model = gtk_tree_view_get_model
                                (GTK_TREE_VIEW (properties->fonts_treeview));
                ev_document_doc_mutex_lock ();
                ev_document_fonts_fill_model (document_fonts, model);
                ev_document_doc_mutex_unlock ();
-               new_job = ev_job_fonts_new (job->document);
+
                ev_job_queue_add_job (job, EV_JOB_PRIORITY_LOW);
-               g_object_unref (new_job);
        }
 }
 
@@ -174,7 +190,6 @@ ev_properties_fonts_set_document (EvPropertiesFonts *properties,
 {
        GtkTreeView *tree_view = GTK_TREE_VIEW (properties->fonts_treeview);
        GtkListStore *list_store;
-       EvJob *job;
 
        properties->document = document;
 
@@ -182,12 +197,11 @@ ev_properties_fonts_set_document (EvPropertiesFonts *properties,
                                         G_TYPE_STRING, G_TYPE_STRING);
        gtk_tree_view_set_model (tree_view, GTK_TREE_MODEL (list_store));
 
-       job = ev_job_fonts_new (properties->document);
-       g_signal_connect_object (job, "finished",
-                                G_CALLBACK (job_fonts_finished_cb),
-                                properties, 0);
-       ev_job_queue_add_job (job, EV_JOB_PRIORITY_LOW);
-       g_object_unref (job);
+       properties->fonts_job = ev_job_fonts_new (properties->document);
+       g_signal_connect (properties->fonts_job, "finished",
+                         G_CALLBACK (job_fonts_finished_cb),
+                         properties);
+       ev_job_queue_add_job (properties->fonts_job, EV_JOB_PRIORITY_LOW);
 }
 
 GtkWidget *