From ea81a5e3bd1cc8e9ba2b92ced9db1ebae803e24d Mon Sep 17 00:00:00 2001
From: raveit65 <mate@raveit.de>
Date: Fri, 22 Nov 2019 21:29:30 +0100
Subject: [PATCH] canvas-item: Don't hyphenate filenames

fixes https://github.com/mate-desktop/caja/issues/1284

Pango 1.44 got the ability to automatically hyphenate on line breaks,
which is on by default, but can be set off by a new attribute.

As a result, we now hyphenate filenames, which is confusing, because
a filename may already include hyphens.

To restore the previous behavior, let's not insert hyphens when
breaking filenames in multiple lines.

Inspired by https://gitlab.gnome.org/GNOME/nautilus/commit/9738d85
---
 libcaja-private/caja-icon-canvas-item.c | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/libcaja-private/caja-icon-canvas-item.c b/libcaja-private/caja-icon-canvas-item.c
index 71d56fc3..cb2d8316 100644
--- a/libcaja-private/caja-icon-canvas-item.c
+++ b/libcaja-private/caja-icon-canvas-item.c
@@ -60,6 +60,14 @@
 #define MAX_TEXT_WIDTH_BESIDE 90
 #define MAX_TEXT_WIDTH_BESIDE_TOP_TO_BOTTOM 150
 
+#ifndef PANGO_CHECK_VERSION
+#define PANGO_CHECK_VERSION(major, minor, micro)                          \
+     (PANGO_VERSION_MAJOR > (major) ||                                    \
+     (PANGO_VERSION_MAJOR == (major) && PANGO_VERSION_MINOR > (minor)) || \
+     (PANGO_VERSION_MAJOR == (major) && PANGO_VERSION_MINOR == (minor) && \
+      PANGO_VERSION_MICRO >= (micro)))
+#endif
+
 /* special text height handling
  * each item has three text height variables:
  *  + text_height: actual height of the displayed (i.e. on-screen) PangoLayout.
@@ -1967,12 +1975,18 @@ create_label_layout (CajaIconCanvasItem *item,
     GString *str;
     char *zeroified_text;
     const char *p;
+    #if PANGO_CHECK_VERSION (1, 44, 0)
+    PangoAttrList *attr_list;
+    #endif
 
     canvas_item = EEL_CANVAS_ITEM (item);
 
     container = CAJA_ICON_CONTAINER (canvas_item->canvas);
     context = gtk_widget_get_pango_context (GTK_WIDGET (canvas_item->canvas));
     layout = pango_layout_new (context);
+    #if PANGO_CHECK_VERSION (1, 44, 0)
+    attr_list = pango_attr_list_new ();
+    #endif
 
     zeroified_text = NULL;
 
@@ -2019,6 +2033,11 @@ create_label_layout (CajaIconCanvasItem *item,
     pango_layout_set_spacing (layout, LABEL_LINE_SPACING);
     pango_layout_set_wrap (layout, PANGO_WRAP_WORD_CHAR);
 
+    #if PANGO_CHECK_VERSION (1, 44, 0)
+    pango_attr_list_insert (attr_list, pango_attr_insert_hyphens_new (FALSE));
+    pango_layout_set_attributes (layout, attr_list);
+    #endif
+
     /* Create a font description */
     if (container->details->font)
     {
@@ -2034,6 +2053,9 @@ create_label_layout (CajaIconCanvasItem *item,
     pango_layout_set_font_description (layout, desc);
     pango_font_description_free (desc);
     g_free (zeroified_text);
+    #if PANGO_CHECK_VERSION (1, 44, 0)
+    pango_attr_list_unref (attr_list);
+    #endif
 
     return layout;
 }
-- 
2.21.0

