GtkFontChooser: Keep reference to the face and the family objects
This commit is contained in:
committed by
Matthias Clasen
parent
88ab6f14d3
commit
0db1b63b1f
@ -373,6 +373,7 @@ void
|
|||||||
cursor_changed_cb (GtkTreeView *treeview, gpointer data)
|
cursor_changed_cb (GtkTreeView *treeview, gpointer data)
|
||||||
{
|
{
|
||||||
gchar *family_name;
|
gchar *family_name;
|
||||||
|
PangoFontFamily *family;
|
||||||
PangoFontFace *face;
|
PangoFontFace *face;
|
||||||
PangoFontDescription *desc;
|
PangoFontDescription *desc;
|
||||||
|
|
||||||
@ -382,47 +383,47 @@ cursor_changed_cb (GtkTreeView *treeview, gpointer data)
|
|||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
GtkTreePath *path = gtk_tree_path_new ();
|
GtkTreePath *path = gtk_tree_path_new ();
|
||||||
|
|
||||||
GtkFontSelectionPrivate *priv = (GtkFontSelectionPrivate*)data;
|
GtkFontSelection *fontsel = (GtkFontSelection*)data;
|
||||||
|
|
||||||
gtk_tree_view_get_cursor (treeview, &path, NULL);
|
gtk_tree_view_get_cursor (treeview, &path, NULL);
|
||||||
|
|
||||||
if (!path)
|
if (!path)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (priv->model), &iter, path))
|
if (!gtk_tree_model_get_iter (GTK_TREE_MODEL (fontsel->priv->model), &iter, path))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
gtk_tree_model_get (GTK_TREE_MODEL (priv->model), &iter,
|
gtk_tree_model_get (GTK_TREE_MODEL (fontsel->priv->model), &iter,
|
||||||
FACE_COLUMN, &face,
|
FACE_COLUMN, &face,
|
||||||
|
FAMILY_COLUMN, &family,
|
||||||
FAMILY_NAME_COLUMN, &family_name,
|
FAMILY_NAME_COLUMN, &family_name,
|
||||||
-1);
|
-1);
|
||||||
|
gtk_tree_path_free (path);
|
||||||
|
path = NULL;
|
||||||
|
|
||||||
if (!face && !family_name)
|
if (!face || !family_name || !family)
|
||||||
return;
|
|
||||||
if (!face)
|
|
||||||
{
|
{
|
||||||
g_free (family_name);
|
g_free (family_name);
|
||||||
return;
|
g_object_unref (face);
|
||||||
}
|
g_object_unref (family);
|
||||||
if (!family_name)
|
|
||||||
{
|
|
||||||
g_object_unref ((gpointer)face);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
desc = pango_font_face_describe (face);
|
desc = pango_font_face_describe (face);
|
||||||
pango_font_description_set_size (desc, priv->size);
|
pango_font_description_set_size (desc, fontsel->priv->size);
|
||||||
gtk_widget_override_font (priv->preview, desc);
|
gtk_widget_override_font (fontsel->priv->preview, desc);
|
||||||
|
|
||||||
pango_font_face_list_sizes (face, &sizes, &n_sizes);
|
pango_font_face_list_sizes (face, &sizes, &n_sizes);
|
||||||
/* It seems not many fonts actually have a sane set of sizes */
|
/* It seems not many fonts actually have a sane set of sizes */
|
||||||
/* set_range_marks (priv->size_slider, sizes, n_sizes); */
|
/* set_range_marks (priv->size_slider, sizes, n_sizes); */
|
||||||
|
|
||||||
|
gtk_font_selection_ref_family (fontsel, family);
|
||||||
|
gtk_font_selection_ref_face (fontsel, face);
|
||||||
|
|
||||||
/* Free resources */
|
/* Free resources */
|
||||||
g_free (family_name);
|
g_free (family_name);
|
||||||
g_object_unref ((gpointer)face);
|
g_object_unref ((gpointer)face);
|
||||||
pango_font_description_free(desc);
|
pango_font_description_free(desc);
|
||||||
gtk_tree_path_free (path);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -551,7 +552,7 @@ gtk_font_selection_init (GtkFontSelection *fontsel)
|
|||||||
|
|
||||||
/* Font selection callbacks */
|
/* Font selection callbacks */
|
||||||
g_signal_connect (G_OBJECT (priv->family_face_list), "cursor-changed",
|
g_signal_connect (G_OBJECT (priv->family_face_list), "cursor-changed",
|
||||||
G_CALLBACK (cursor_changed_cb), (gpointer)priv);
|
G_CALLBACK (cursor_changed_cb), (gpointer)fontsel);
|
||||||
|
|
||||||
|
|
||||||
set_range_marks (priv->size_slider, (gint*)font_sizes, FONT_SIZES_LENGTH);
|
set_range_marks (priv->size_slider, (gint*)font_sizes, FONT_SIZES_LENGTH);
|
||||||
|
|||||||
Reference in New Issue
Block a user