diff --git a/gtk/gtkemojichooser.c b/gtk/gtkemojichooser.c index 596c92e12f..9f1cb41244 100644 --- a/gtk/gtkemojichooser.c +++ b/gtk/gtkemojichooser.c @@ -343,6 +343,9 @@ add_emoji (GtkWidget *box, char text[64]; char *p = text; int i; + PangoLayout *layout; + PangoRectangle rect; + int width; codes = g_variant_get_child_value (item, 0); for (i = 0; i < g_variant_n_children (codes); i++) @@ -358,12 +361,27 @@ add_emoji (GtkWidget *box, g_variant_unref (codes); p[0] = 0; - label = gtk_label_new (text); + label = gtk_label_new ("🙂"); attrs = pango_attr_list_new (); pango_attr_list_insert (attrs, pango_attr_scale_new (PANGO_SCALE_X_LARGE)); gtk_label_set_attributes (GTK_LABEL (label), attrs); pango_attr_list_unref (attrs); + layout = gtk_label_get_layout (GTK_LABEL (label)); + pango_layout_get_extents (layout, &rect, NULL); + width = rect.width; + + gtk_label_set_text (GTK_LABEL (label), text); + layout = gtk_label_get_layout (GTK_LABEL (label)); + pango_layout_get_extents (layout, &rect, NULL); + + /* Check for fallback rendering that generates too wide items */ + if (rect.width >= 2 * width) + { + gtk_widget_destroy (label); + return; + } + child = gtk_flow_box_child_new (); gtk_style_context_add_class (gtk_widget_get_style_context (child), "emoji"); g_object_set_data_full (G_OBJECT (child), "emoji-data",