mirror of
https://gitlab.gnome.org/GNOME/gtk.git
synced 2024-11-11 11:20:12 +00:00
Keep the currently selected font over theme changes
When repopulating the list of fonts, don't loose the current selection, unless the font is no longer in the list.
This commit is contained in:
parent
9c85d4f6df
commit
1207757924
@ -695,8 +695,9 @@ populate_list (GtkFontChooser *fontchooser,
|
||||
GtkFontChooserPrivate *priv = fontchooser->priv;
|
||||
GtkStyleContext *style_context;
|
||||
PangoFontDescription *default_font;
|
||||
PangoFontDescription *selected_font;
|
||||
|
||||
gboolean selected;
|
||||
gint match;
|
||||
GtkTreeIter match_row;
|
||||
GtkTreePath *path;
|
||||
|
||||
@ -717,23 +718,25 @@ populate_list (GtkFontChooser *fontchooser,
|
||||
|
||||
qsort (families, n_families, sizeof (PangoFontFamily *), cmp_families);
|
||||
|
||||
gtk_list_store_clear (model);
|
||||
|
||||
/* Get row header font color */
|
||||
style_context = gtk_widget_get_style_context (GTK_WIDGET (treeview));
|
||||
|
||||
/* Get theme font */
|
||||
style_context = gtk_widget_get_style_context (GTK_WIDGET (treeview));
|
||||
default_font = (PangoFontDescription*) gtk_style_context_get_font (style_context,
|
||||
GTK_STATE_NORMAL);
|
||||
|
||||
selected = FALSE;
|
||||
if (priv->face)
|
||||
selected_font = pango_font_face_describe (priv->face);
|
||||
else
|
||||
selected_font = NULL;
|
||||
|
||||
gtk_list_store_clear (model);
|
||||
|
||||
match = 0;
|
||||
|
||||
/* Iterate over families and faces */
|
||||
for (i = 0; i < n_families; i++)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
PangoFontFace **faces;
|
||||
|
||||
int j, n_faces;
|
||||
const gchar *fam_name = pango_font_family_get_name (families[i]);
|
||||
|
||||
@ -767,12 +770,27 @@ populate_list (GtkFontChooser *fontchooser,
|
||||
PREVIEW_TEXT_COLUMN, tmp->str,
|
||||
-1);
|
||||
|
||||
/* Select the first font or the default font/face from the style context */
|
||||
if (!selected ||
|
||||
(!strcmp (fam_name, pango_font_description_get_family (default_font)) && j == 0))
|
||||
/* Select the current font,
|
||||
* the default font/face from the theme,
|
||||
* or the first font
|
||||
*/
|
||||
if (match < 3 &&
|
||||
selected_font != NULL &&
|
||||
pango_font_description_equal (selected_font, pango_desc))
|
||||
{
|
||||
match_row = iter;
|
||||
selected = TRUE;
|
||||
match = 3;
|
||||
}
|
||||
if (match < 2 &&
|
||||
strcmp (fam_name, pango_font_description_get_family (default_font)) == 0)
|
||||
{
|
||||
match_row = iter;
|
||||
match = 2;
|
||||
}
|
||||
if (match < 1)
|
||||
{
|
||||
match_row = iter;
|
||||
match = 1;
|
||||
}
|
||||
|
||||
pango_font_description_free (pango_desc);
|
||||
@ -783,14 +801,16 @@ populate_list (GtkFontChooser *fontchooser,
|
||||
}
|
||||
|
||||
path = gtk_tree_model_get_path (GTK_TREE_MODEL (model), &match_row);
|
||||
|
||||
if (path)
|
||||
{
|
||||
gtk_tree_view_set_cursor (treeview, path, NULL, FALSE);
|
||||
gtk_tree_view_scroll_to_cell (treeview, path, NULL, FALSE, 0.5, 0.5);
|
||||
gtk_tree_path_free(path);
|
||||
gtk_tree_path_free (path);
|
||||
}
|
||||
|
||||
if (selected_font)
|
||||
pango_font_description_free (selected_font);
|
||||
|
||||
g_string_free (family_and_face, TRUE);
|
||||
g_string_free (tmp, TRUE);
|
||||
g_free (families);
|
||||
|
Loading…
Reference in New Issue
Block a user