diff options
author | Matthias Clasen <mclasen@redhat.com> | 2019-12-04 23:32:04 -0500 |
---|---|---|
committer | Matthias Clasen <mclasen@redhat.com> | 2019-12-04 23:32:04 -0500 |
commit | d82d4093c083e087ccd6823bfad836f25249eeb9 (patch) | |
tree | 3cf40aec6dde434f1939da6a186b7f6ccf9edbbc /pango/pango-fontmap.c | |
parent | c40f0f530671a6682091e91b443a519b041af041 (diff) | |
download | pango-d82d4093c083e087ccd6823bfad836f25249eeb9.tar.gz |
fontmap: Emit GListModel::changed
Emit the list model changed signal when the font map changes.
Since font map changes are rare, we don't keep track of detailed
changes and assume everything has changed.
Diffstat (limited to 'pango/pango-fontmap.c')
-rw-r--r-- | pango/pango-fontmap.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/pango/pango-fontmap.c b/pango/pango-fontmap.c index a8b9f426..8f4d7bc7 100644 --- a/pango/pango-fontmap.c +++ b/pango/pango-fontmap.c @@ -37,9 +37,16 @@ static PangoFontset *pango_font_map_real_load_fontset (PangoFontMap static PangoFontFamily *pango_font_map_real_get_family (PangoFontMap *fontmap, const char *name); +static void pango_font_map_real_changed (PangoFontMap *fontmap); + static void pango_font_map_list_model_init (GListModelInterface *iface); +typedef struct { + guint n_families; +} PangoFontMapPrivate; + G_DEFINE_ABSTRACT_TYPE_WITH_CODE (PangoFontMap, pango_font_map, G_TYPE_OBJECT, + G_ADD_PRIVATE (PangoFontMap) G_IMPLEMENT_INTERFACE (G_TYPE_LIST_MODEL, pango_font_map_list_model_init)) static void @@ -47,6 +54,7 @@ pango_font_map_class_init (PangoFontMapClass *class) { class->load_fontset = pango_font_map_real_load_fontset; class->get_family = pango_font_map_real_get_family; + class->changed = pango_font_map_real_changed; } static void @@ -120,9 +128,13 @@ pango_font_map_list_families (PangoFontMap *fontmap, PangoFontFamily ***families, int *n_families) { + PangoFontMapPrivate *priv = pango_font_map_get_instance_private (fontmap); g_return_if_fail (fontmap != NULL); PANGO_FONT_MAP_GET_CLASS (fontmap)->list_families (fontmap, families, n_families); + + /* keep this value for GListModel::changed */ + priv->n_families = *n_families; } /** @@ -327,6 +339,18 @@ pango_font_map_get_serial (PangoFontMap *fontmap) return 1; } +static void +pango_font_map_real_changed (PangoFontMap *fontmap) +{ + PangoFontMapPrivate *priv = pango_font_map_get_instance_private (fontmap); + guint removed, added; + + removed = priv->n_families; + added = g_list_model_get_n_items (G_LIST_MODEL (fontmap)); + + g_list_model_items_changed (G_LIST_MODEL (fontmap), 0, removed, added); +} + /** * pango_font_map_changed: * @fontmap: a #PangoFontMap @@ -420,7 +444,7 @@ pango_font_map_get_item (GListModel *list, { PangoFontMap *fontmap = PANGO_FONT_MAP (list); PangoFontFamily **families; - guint n_families; + int n_families; PangoFontFamily *family; pango_font_map_list_families (fontmap, &families, &n_families); |