vcl/unx/gtk3/gtkinst.cxx |   39 ++++++++++++++++++++++++---------------
 1 file changed, 24 insertions(+), 15 deletions(-)

New commits:
commit 13d4a0d2a287074a954bd698e325fc2fe2d76bbb
Author:     Caolán McNamara <caol...@redhat.com>
AuthorDate: Wed Nov 3 10:59:53 2021 +0000
Commit:     Adolfo Jayme Barrientos <fit...@ubuntu.com>
CommitDate: Thu Nov 4 01:26:13 2021 +0100

    Related: tdf#143443 remove PANGO_ATTR_ABSOLUTE_SIZE and PANGO_ATTR_SIZE
    
    when setting a new size because an absolute size set by gtk itself seems
    to be not overwritten by pango_attr_size_new so sometimes the size of
    the font in the annotation window label is too large
    
    Change-Id: Ib69eec2111336cc27d1571babcc891f16cae2f01
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/124482
    Tested-by: Jenkins
    Reviewed-by: Adolfo Jayme Barrientos <fit...@ubuntu.com>

diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index 6bfef76f9ed9..6b592b341ea0 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -8689,6 +8689,7 @@ void update_attr_list(PangoAttrList* pAttrList, const 
vcl::Font& rFont)
 {
     pango_attr_list_change(pAttrList, 
pango_attr_family_new(OUStringToOString(rFont.GetFamilyName(), 
RTL_TEXTENCODING_UTF8).getStr()));
     pango_attr_list_change(pAttrList, 
pango_attr_size_new(rFont.GetFontSize().Height() * PANGO_SCALE));
+
     switch (rFont.GetItalic())
     {
         case ITALIC_NONE:
@@ -8757,10 +8758,33 @@ void update_attr_list(PangoAttrList* pAttrList, const 
vcl::Font& rFont)
     }
 }
 
+gboolean filter_pango_attrs(PangoAttribute *attr, gpointer data)
+{
+    PangoAttrType* pFilterAttrs = static_cast<PangoAttrType*>(data);
+    while (*pFilterAttrs)
+    {
+        if (attr->klass->type == *pFilterAttrs)
+            return true;
+        ++pFilterAttrs;
+    }
+    return false;
+}
+
 void set_font(GtkLabel* pLabel, const vcl::Font& rFont)
 {
     PangoAttrList* pOrigList = gtk_label_get_attributes(pLabel);
     PangoAttrList* pAttrList = pOrigList ? pango_attr_list_copy(pOrigList) : 
pango_attr_list_new();
+
+    if (pOrigList)
+    {
+        // tdf#143443 remove both PANGO_ATTR_ABSOLUTE_SIZE and PANGO_ATTR_SIZE
+        // because pango_attr_list_change(..., pango_attr_size_new...) isn't
+        // sufficient on its own to ensure a new size sticks.
+        PangoAttrType aFilterAttrs[] = {PANGO_ATTR_ABSOLUTE_SIZE, 
PANGO_ATTR_SIZE, PANGO_ATTR_INVALID};
+        PangoAttrList* pRemovedAttrs = pOrigList ? 
pango_attr_list_filter(pAttrList, filter_pango_attrs, &aFilterAttrs) : nullptr;
+        pango_attr_list_unref(pRemovedAttrs);
+    }
+
     update_attr_list(pAttrList, rFont);
     gtk_label_set_attributes(pLabel, pAttrList);
     pango_attr_list_unref(pAttrList);
@@ -11867,21 +11891,6 @@ namespace
     }
 }
 
-namespace
-{
-    gboolean filter_pango_attrs(PangoAttribute *attr, gpointer data)
-    {
-        PangoAttrType* pFilterAttrs = static_cast<PangoAttrType*>(data);
-        while (*pFilterAttrs)
-        {
-            if (attr->klass->type == *pFilterAttrs)
-                return true;
-            ++pFilterAttrs;
-        }
-        return false;
-    }
-}
-
 namespace
 {
 

Reply via email to