Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNickolay V. Shmyrev <nshmyrev@yandex.ru>2006-10-08 21:34:28 (GMT)
committer Nickolay V. Shmyrev <nshmyrev@src.gnome.org>2006-10-08 21:34:28 (GMT)
commit7ace0d1d14db65c27a0d9b11d803a2d960ca206d (patch)
tree55614e1137b5481b7a3069e294dec17f155297ae
parent4eb491b96085b0a32dae91c973e803276a31d078 (diff)
Correctly disconnect from job signals on destroy.
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.
-rw-r--r--ChangeLog7
-rw-r--r--shell/ev-properties-fonts.c36
2 files changed, 32 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog
index db495ea..b348be7 100644
--- 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:
diff --git a/shell/ev-properties-fonts.c b/shell/ev-properties-fonts.c
index 5a79207..b50206f 100644
--- a/shell/ev-properties-fonts.c
+++ b/shell/ev-properties-fonts.c
@@ -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 *