9fa7593c9fe68dd31cfc9d83b2a616b46e87f17a
diff --git a/gtk/gtktextlayout.c b/gtk/gtktextlayout.c
index 0c4db57..7bc5bd4 100644
--- a/gtk/gtktextlayout.c
+++ b/gtk/gtktextlayout.c
@@ -1511,7 +1511,17 @@ add_generic_attrs (GtkTextLayout      *layout,
       
       pango_attr_list_insert (attrs, attr);
     }
-  
+
+  if (appearance->font_fallback_disabled)
+    {
+      attr = pango_attr_fallback_new (FALSE);
+      
+      attr->start_index = start;
+      attr->end_index = start + byte_count;
+      
+      pango_attr_list_insert (attrs, attr);
+    }
+
   if (!size_only)
     {
       attr = gtk_text_attr_appearance_new (appearance);
diff --git a/gtk/gtktexttag.c b/gtk/gtktexttag.c
index 0d7db46..3b793b8 100644
--- a/gtk/gtktexttag.c
+++ b/gtk/gtktexttag.c
@@ -106,6 +106,7 @@ enum {
   PROP_INVISIBLE,
   PROP_PARAGRAPH_BACKGROUND,
   PROP_PARAGRAPH_BACKGROUND_GDK,
+  PROP_FONT_FALLBACK,
 
   /* Behavior args */
   PROP_ACCUMULATIVE_MARGIN,
@@ -139,6 +140,7 @@ enum {
   PROP_TABS_SET,
   PROP_INVISIBLE_SET,
   PROP_PARAGRAPH_BACKGROUND_SET,
+  PROP_FONT_FALLBACK_SET,
 
   LAST_ARG
 };
@@ -556,6 +558,21 @@ gtk_text_tag_class_init (GtkTextTagClass *klass)
                                                          FALSE,
                                                          GTK_PARAM_READWRITE));
 
+  /**
+   * GtkTextTag:font-fallback:
+   *
+   * Whether this text should have font fallback.
+   *
+   * Since: 2.16
+   */
+  g_object_class_install_property (object_class,
+                                   PROP_FONT_FALLBACK,
+                                   g_param_spec_boolean ("font-fallback",
+                                                         P_("Font Fallback"),
+                                                         P_("Whether this text has font fall-back."),
+                                                         TRUE,
+                                                         GTK_PARAM_READWRITE));
+
   /* Style props are set or not */
 
 #define ADD_SET_PROP(propname, propval, nick, blurb) g_object_class_install_property (object_class, propval, g_param_spec_boolean (propname, nick, blurb, FALSE, GTK_PARAM_READWRITE))
@@ -672,6 +689,10 @@ gtk_text_tag_class_init (GtkTextTagClass *klass)
                 P_("Paragraph background set"),
                 P_("Whether this tag affects the paragraph background color"));
 
+  ADD_SET_PROP ("font-fallback-set", PROP_FONT_FALLBACK_SET,
+                P_("Font Fallback set"),
+                P_("Whether this tag affects the text font fall-back"));
+
   /**
    * GtkTextTag::event:
    * @tag: the #GtkTextTag on which the signal is emitted
@@ -1318,6 +1339,12 @@ gtk_text_tag_set_property (GObject      *object,
       size_changed = TRUE;
       break;
 
+    case PROP_FONT_FALLBACK:
+      text_tag->font_fallback_set = TRUE;
+      text_tag->values->appearance.font_fallback_disabled = !g_value_get_boolean (value);
+      g_object_notify (object, "font-fallback-set");
+      break;
+
       /* Whether the value should be used... */
 
     case PROP_BACKGROUND_SET:
@@ -1456,6 +1483,10 @@ gtk_text_tag_set_property (GObject      *object,
       text_tag->pg_bg_color_set = g_value_get_boolean (value);
       break;
 
+    case PROP_FONT_FALLBACK_SET:
+      text_tag->font_fallback_set = g_value_get_boolean (value);
+      break;
+
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       break;
@@ -1648,6 +1679,10 @@ gtk_text_tag_get_property (GObject      *object,
       g_value_set_boolean (value, tag->accumulative_margin);
       break;
 
+    case PROP_FONT_FALLBACK:
+      g_value_set_boolean (value, !tag->values->appearance.font_fallback_disabled);
+      break;
+
     case PROP_BACKGROUND_SET:
       g_value_set_boolean (value, tag->bg_color_set);
       break;
@@ -1750,6 +1785,10 @@ gtk_text_tag_get_property (GObject      *object,
       g_value_set_boolean (value, tag->pg_bg_color_set);
       break;
 
+    case PROP_FONT_FALLBACK_SET:
+      g_value_set_boolean (value, tag->font_fallback_set);
+      break;
+
     case PROP_BACKGROUND:
     case PROP_FOREGROUND:
     case PROP_PARAGRAPH_BACKGROUND:
@@ -1957,7 +1996,7 @@ gtk_text_attributes_new (void)
 {
   GtkTextAttributes *values;
 
-  values = g_new0 (GtkTextAttributes, 1);
+  values = g_slice_new0 (GtkTextAttributes);
 
   /* 0 is a valid value for most of the struct */
 
@@ -2114,7 +2153,7 @@ gtk_text_attributes_unref (GtkTextAttributes *values)
       if (values->pg_bg_color)
 	gdk_color_free (values->pg_bg_color);
 
-      g_free (values);
+      g_slice_free (GtkTextAttributes, values);
     }
 }
 
@@ -2303,6 +2342,9 @@ _gtk_text_attributes_fill_from_tags (GtkTextAttributes *dest,
       if (tag->language_set)
 	dest->language = vals->language;
 
+      if (tag->font_fallback_set)
+        dest->appearance.font_fallback_disabled = vals->appearance.font_fallback_disabled;
+
       ++n;
     }
 
@@ -2344,7 +2386,8 @@ _gtk_text_tag_affects_nonsize_appearance (GtkTextTag *tag)
     tag->fg_stipple_set ||
     tag->strikethrough_set ||
     tag->bg_full_height_set ||
-    tag->pg_bg_color_set;
+    tag->pg_bg_color_set ||
+    tag->font_fallback_set;
 }
 
 #define __GTK_TEXT_TAG_C__
diff --git a/gtk/gtktexttag.h b/gtk/gtktexttag.h
index 61d60d9..4c22104 100644
--- a/gtk/gtktexttag.h
+++ b/gtk/gtktexttag.h
@@ -129,7 +129,8 @@ struct _GtkTextTag
   /* Whether these margins accumulate or override */
   guint accumulative_margin : 1;
 
-  guint pad1 : 1;
+  guint font_fallback_set : 1;
+  /* guint pad : 8 */
 };
 
 struct _GtkTextTagClass
@@ -199,8 +200,10 @@ struct _GtkTextAppearance
   guint inside_selection : 1;
   guint is_text : 1;
 
+  /* Whether font fallback is disabled */
+  guint font_fallback_disabled : 1;
+
   /*< private >*/
-  guint pad1 : 1;
   guint pad2 : 1;
   guint pad3 : 1;
   guint pad4 : 1;
