diff options
author | Matthias Clasen <mclasen@redhat.com> | 2011-08-09 02:04:22 +0200 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2011-08-15 18:57:57 -0400 |
commit | 8dbdfa7e73d1df8146346c9972e49e98d9629531 (patch) | |
tree | 3516c93ad62c9a14e4e430fe52ff4ae51ffe8a45 /gtk/gtkfontchooser.c | |
parent | 96f9b67b516fb9f89062367e7c20e8596a39b741 (diff) | |
download | gtk+-8dbdfa7e73d1df8146346c9972e49e98d9629531.tar.gz |
Avoid extraneous signals at destroy time
We need to disconnect the cursor-changed handler before the
treeview gets destroyed, to avoid unwanted emissions.
Diffstat (limited to 'gtk/gtkfontchooser.c')
-rw-r--r-- | gtk/gtkfontchooser.c | 58 |
1 files changed, 41 insertions, 17 deletions
diff --git a/gtk/gtkfontchooser.c b/gtk/gtkfontchooser.c index a6f2d9096d..c14dee8570 100644 --- a/gtk/gtkfontchooser.c +++ b/gtk/gtkfontchooser.c @@ -83,7 +83,6 @@ struct _GtkFontChooserPrivate GtkTreeModel *filter; GtkWidget *preview; - GtkWidget *preview_scrolled_window; gchar *preview_text; gboolean show_preview_entry; @@ -93,6 +92,8 @@ struct _GtkFontChooserPrivate gint size; PangoFontFace *face; PangoFontFamily *family; + + gulong cursor_changed_handler; }; #define DEFAULT_FONT_NAME "Sans 10" @@ -142,6 +143,7 @@ static void gtk_font_chooser_get_property (GObject *object, GValue *value, GParamSpec *pspec); static void gtk_font_chooser_finalize (GObject *object); +static void gtk_font_chooser_dispose (GObject *object); static void gtk_font_chooser_screen_changed (GtkWidget *widget, GdkScreen *previous_screen); @@ -165,6 +167,7 @@ gtk_font_chooser_class_init (GtkFontChooserClass *klass) widget_class->screen_changed = gtk_font_chooser_screen_changed; widget_class->style_updated = gtk_font_chooser_style_updated; + gobject_class->dispose = gtk_font_chooser_dispose; gobject_class->finalize = gtk_font_chooser_finalize; gobject_class->set_property = gtk_font_chooser_set_property; gobject_class->get_property = gtk_font_chooser_get_property; @@ -642,8 +645,9 @@ gtk_font_chooser_init (GtkFontChooser *fontchooser) g_signal_connect (gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (priv->size_spin)), "value-changed", G_CALLBACK (spin_change_cb), fontchooser); - g_signal_connect (priv->family_face_list, "cursor-changed", - G_CALLBACK (cursor_changed_cb), fontchooser); + priv->cursor_changed_handler = + g_signal_connect (priv->family_face_list, "cursor-changed", + G_CALLBACK (cursor_changed_cb), fontchooser); /* Zoom on preview scroll*/ g_signal_connect (priv->preview, "scroll-event", @@ -708,9 +712,14 @@ populate_list (GtkFontChooser *fontchooser, gint n_families, i; PangoFontFamily **families; + GString *tmp; + GString *family_and_face; + + if (!gtk_widget_has_screen (GTK_WIDGET (fontchooser))) + return; - GString *tmp = g_string_new (NULL); - GString *family_and_face = g_string_new (NULL); + tmp = g_string_new (NULL); + family_and_face = g_string_new (NULL); pango_context_list_families (gtk_widget_get_pango_context (GTK_WIDGET (treeview)), &families, @@ -878,6 +887,21 @@ gtk_font_chooser_bootstrap_fontlist (GtkFontChooser *fontchooser) populate_list (fontchooser, treeview, fontchooser->priv->model); } +static void +gtk_font_chooser_dispose (GObject *object) +{ + GtkFontChooser *fontchooser = GTK_FONT_CHOOSER (object); + GtkFontChooserPrivate *priv = fontchooser->priv; + + if (priv->cursor_changed_handler != 0) + { + g_signal_handler_disconnect (priv->family_face_list, + priv->cursor_changed_handler); + priv->cursor_changed_handler = 0; + } + + G_OBJECT_CLASS (gtk_font_chooser_parent_class)->dispose (object); +} static void gtk_font_chooser_finalize (GObject *object) @@ -890,7 +914,6 @@ gtk_font_chooser_finalize (GObject *object) G_OBJECT_CLASS (gtk_font_chooser_parent_class)->finalize (object); } - static void gtk_font_chooser_screen_changed (GtkWidget *widget, GdkScreen *previous_screen) @@ -940,11 +963,6 @@ gtk_font_chooser_ref_face (GtkFontChooser *fontchooser, priv->face = face; } - -/* - * These functions are the main public interface for getting/setting the font. - */ - /** * gtk_font_chooser_get_family: * @fontchooser: a #GtkFontChooser @@ -1242,13 +1260,19 @@ void gtk_font_chooser_set_show_preview_entry (GtkFontChooser *fontchooser, gboolean show_preview_entry) { + GtkFontChooserPrivate *priv = fontchooser->priv; + g_return_if_fail (GTK_IS_FONT_CHOOSER (fontchooser)); - if (show_preview_entry) - gtk_widget_show (fontchooser->priv->preview_scrolled_window); - else - gtk_widget_hide (fontchooser->priv->preview_scrolled_window); + if (priv->show_preview_entry != show_preview_entry) + { + fontchooser->priv->show_preview_entry = show_preview_entry; - fontchooser->priv->show_preview_entry = show_preview_entry; - g_object_notify (G_OBJECT (fontchooser), "show-preview-entry"); + if (show_preview_entry) + gtk_widget_show (fontchooser->priv->preview); + else + gtk_widget_hide (fontchooser->priv->preview); + + g_object_notify (G_OBJECT (fontchooser), "show-preview-entry"); + } } |