GtkFontChooser: Improvements on the spin/slider interaction

This commit is contained in:
Alberto Ruiz 2011-04-16 17:21:07 +01:00 committed by Matthias Clasen
parent c303d0b18c
commit 272f11069f

View File

@ -98,6 +98,8 @@ struct _GtkFontSelectionPrivate
gint size; gint size;
PangoFontFace *face; PangoFontFace *face;
PangoFontFamily *family; PangoFontFamily *family;
gboolean ignore_slider;
}; };
@ -312,6 +314,13 @@ slider_change_cb (GtkAdjustment *adjustment, gpointer data)
{ {
GtkFontSelectionPrivate *priv = (GtkFontSelectionPrivate*)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_set_value (gtk_spin_button_get_adjustment( GTK_SPIN_BUTTON(priv->size_spin)),
gtk_adjustment_get_value (adjustment)); 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)); GtkAdjustment *slider_adj = gtk_range_get_adjustment (GTK_RANGE (priv->size_slider));
if (size >= gtk_adjustment_get_lower (slider_adj) || /* We ignore the slider value change callback for both of this set_value call */
size <= gtk_adjustment_get_upper (slider_adj)) 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; 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); "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))), 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); "value-changed", G_CALLBACK (spin_change_cb), (gpointer)priv);
priv->ignore_slider = FALSE;
gtk_widget_pop_composite_child(); gtk_widget_pop_composite_child();
} }