diff --git a/gtk/gtkcssenumvalue.c b/gtk/gtkcssenumvalue.c
index 784f97e..2a4e231 100644
--- a/gtk/gtkcssenumvalue.c
+++ b/gtk/gtkcssenumvalue.c
@@ -330,9 +330,32 @@ _gtk_css_font_size_value_get (const GtkCssValue *value)
 
 /* PangoStyle */
 
+static GtkCssValue *
+gtk_css_value_font_style_compute  (GtkCssValue             *value,
+                                   guint                    property_id,
+                                   GtkStyleProviderPrivate *provider,
+                                   GtkCssStyle             *style,
+                                   GtkCssStyle             *parent_style)
+{
+  GtkSettings *settings;
+  PangoStyle new_style;
+
+  settings = _gtk_style_provider_private_get_settings (provider);
+  if (settings != NULL)
+  {
+    new_style = gtk_settings_get_font_style (settings);
+    return _gtk_css_font_style_value_new (new_style);
+  }
+
+  if (value->value >= 0)
+    return _gtk_css_value_ref (value);
+
+  return _gtk_css_font_style_value_new (PANGO_STYLE_NORMAL);
+}
+
 static const GtkCssValueClass GTK_CSS_VALUE_FONT_STYLE = {
   gtk_css_value_enum_free,
-  gtk_css_value_enum_compute,
+  gtk_css_value_font_style_compute,
   gtk_css_value_enum_equal,
   gtk_css_value_enum_transition,
   gtk_css_value_enum_print
@@ -435,9 +458,17 @@ gtk_css_value_font_weight_compute (GtkCssValue             *value,
                                    GtkCssStyle             *style,
                                    GtkCssStyle             *parent_style)
 {
+  GtkSettings *settings;
   PangoWeight new_weight;
   int parent_value;
 
+  settings = _gtk_style_provider_private_get_settings (provider);
+  if (settings != NULL)
+  {
+    new_weight = gtk_settings_get_font_weight (settings);
+    return _gtk_css_font_weight_value_new (new_weight);
+  }
+
   if (value->value >= 0)
     return _gtk_css_value_ref (value);
 
diff --git a/gtk/gtksettings.c b/gtk/gtksettings.c
index f6d7283..eb04eef 100644
--- a/gtk/gtksettings.c
+++ b/gtk/gtksettings.c
@@ -126,6 +126,8 @@ struct _GtkSettingsPrivate
   gint font_size;
   gboolean font_size_absolute;
   gchar *font_family;
+  gint font_style;
+  gint font_weight;
 };
 
 struct _GtkSettingsValuePrivate
@@ -2015,6 +2017,26 @@ settings_update_font_values (GtkSettings *settings)
       priv->font_size_absolute = FALSE;
     }
 
+  if (desc != NULL &&
+      (pango_font_description_get_set_fields (desc) & PANGO_FONT_MASK_STYLE) != 0)
+    {
+      priv->font_style = pango_font_description_get_style (desc);
+    }
+  else
+    {
+      priv->font_style = PANGO_STYLE_NORMAL;
+    }
+
+  if (desc != NULL &&
+      (pango_font_description_get_set_fields (desc) & PANGO_FONT_MASK_WEIGHT) != 0)
+    {
+      priv->font_weight = pango_font_description_get_weight (desc);
+    }
+  else
+    {
+      priv->font_weight = PANGO_WEIGHT_NORMAL;
+    }
+
   g_free (priv->font_family);
 
   if (desc != NULL &&
@@ -3641,3 +3663,19 @@ gtk_settings_get_font_size_is_absolute (GtkSettings *settings)
 
   return settings->priv->font_size_absolute;
 }
+
+gint
+gtk_settings_get_font_style (GtkSettings *settings)
+{
+  settings_update_font_name (settings);
+
+  return settings->priv->font_style;
+}
+
+gint
+gtk_settings_get_font_weight (GtkSettings *settings)
+{
+  settings_update_font_name (settings);
+
+  return settings->priv->font_weight;
+}
diff --git a/gtk/gtksettingsprivate.h b/gtk/gtksettingsprivate.h
index 47f75a6..68b18e2 100644
--- a/gtk/gtksettingsprivate.h
+++ b/gtk/gtksettingsprivate.h
@@ -57,6 +57,8 @@ gint     gtk_settings_get_dnd_drag_threshold (GtkSettings *settings);
 const gchar *gtk_settings_get_font_family    (GtkSettings *settings);
 gint         gtk_settings_get_font_size      (GtkSettings *settings);
 gboolean     gtk_settings_get_font_size_is_absolute (GtkSettings *settings);
+gint         gtk_settings_get_font_style     (GtkSettings *settings);
+gint         gtk_settings_get_font_weight    (GtkSettings *settings);
 
 G_END_DECLS
 
