widget: Redraw when font options change
authorMatthias Clasen <mclasen@redhat.com>
Fri, 3 Sep 2021 17:55:39 +0000 (13:55 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Sun, 31 Oct 2021 21:52:04 +0000 (17:52 -0400)
Its the right thing to do, even if it is a rare event.

gtk/gtkwidget.c

index 2a8e288232c5440aa54c4aa89408fe237b920d98..65185415cd452f170f2e9baf514b0b30c8bf9883 100644 (file)
@@ -6427,7 +6427,7 @@ gtk_widget_get_effective_font_map (GtkWidget *widget)
     return pango_cairo_font_map_get_default ();
 }
 
-static void
+static gboolean
 update_pango_context (GtkWidget    *widget,
                       PangoContext *context)
 {
@@ -6436,6 +6436,9 @@ update_pango_context (GtkWidget    *widget,
   PangoFontDescription *font_desc;
   GtkSettings *settings;
   cairo_font_options_t *font_options;
+  guint old_serial;
+
+  old_serial = pango_context_get_serial (context);
 
   font_desc = gtk_css_style_get_pango_font (style);
   pango_context_set_font_description (context, font_desc);
@@ -6468,6 +6471,8 @@ update_pango_context (GtkWidget    *widget,
     }
 
   pango_context_set_font_map (context, gtk_widget_get_effective_font_map (widget));
+
+  return old_serial != pango_context_get_serial (context);
 }
 
 static void
@@ -6475,8 +6480,11 @@ gtk_widget_update_pango_context (GtkWidget *widget)
 {
   PangoContext *context = gtk_widget_peek_pango_context (widget);
 
-  if (context)
-    update_pango_context (widget, context);
+  if (!context)
+    return;
+
+  if (update_pango_context (widget, context))
+    gtk_widget_queue_draw (widget);
 }
 
 /**