From b98088495e4b45b1f572bfb177790c78945a4774 Mon Sep 17 00:00:00 2001 From: Alberto Ruiz Date: Sat, 16 Apr 2011 17:21:07 +0100 Subject: [PATCH] GtkFontChooser: Improvements on the spin/slider interaction --- gtk/gtkfontchooser.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/gtk/gtkfontchooser.c b/gtk/gtkfontchooser.c index 6349de21f6..f2d704ad5c 100644 --- a/gtk/gtkfontchooser.c +++ b/gtk/gtkfontchooser.c @@ -98,6 +98,8 @@ struct _GtkFontSelectionPrivate gint size; PangoFontFace *face; PangoFontFamily *family; + + gboolean ignore_slider; }; @@ -312,6 +314,13 @@ slider_change_cb (GtkAdjustment *adjustment, gpointer data) { GtkFontSelectionPrivate *priv = (GtkFontSelectionPrivate*)data; + /* If we set the silder value manually, we ignore this callback */ + if (priv->ignore_slider) + { + priv->ignore_slider = FALSE; + return; + } + gtk_adjustment_set_value (gtk_spin_button_get_adjustment( GTK_SPIN_BUTTON(priv->size_spin)), gtk_adjustment_get_value (adjustment)); } @@ -325,10 +334,16 @@ spin_change_cb (GtkAdjustment *adjustment, gpointer data) GtkAdjustment *slider_adj = gtk_range_get_adjustment (GTK_RANGE (priv->size_slider)); - if (size >= gtk_adjustment_get_lower (slider_adj) || - size <= gtk_adjustment_get_upper (slider_adj)) + /* We ignore the slider value change callback for both of this set_value call */ + if (size < gtk_adjustment_get_lower (slider_adj)) { - gtk_adjustment_set_value (slider_adj, size); + priv->ignore_slider = TRUE; + gtk_adjustment_set_value (slider_adj, gtk_adjustment_get_lower (slider_adj)); + } + else if (size > gtk_adjustment_get_upper (slider_adj)) + { + priv->ignore_slider = TRUE; + gtk_adjustment_set_value (slider_adj, gtk_adjustment_get_upper (slider_adj)); } priv->size = ((gint)gtk_adjustment_get_value (adjustment)) * PANGO_SCALE; @@ -436,6 +451,7 @@ gtk_font_selection_init (GtkFontSelection *fontsel) "value-changed", G_CALLBACK (slider_change_cb), (gpointer)priv); g_signal_connect (G_OBJECT (gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON (priv->size_spin))), "value-changed", G_CALLBACK (spin_change_cb), (gpointer)priv); + priv->ignore_slider = FALSE; gtk_widget_pop_composite_child(); }