include/vcl/weld.hxx                              |    1 +
 svx/uiconfig/ui/accessibilitycheckentry.ui        |   22 ++++++++++------------
 sw/source/uibase/sidebar/A11yCheckIssuesPanel.cxx |   10 ++++++++++
 vcl/inc/salvtables.hxx                            |    9 ++++-----
 vcl/source/app/salvtables.cxx                     |   20 ++++++++++++++++----
 vcl/unx/gtk3/gtkinst.cxx                          |    7 +++++++
 6 files changed, 48 insertions(+), 21 deletions(-)

New commits:
commit 7cc6083325c4b2aa71a51296ecf69d748f8ba772
Author:     Caolán McNamara <caolan.mcnam...@collabora.com>
AuthorDate: Tue Jul 25 15:56:35 2023 +0100
Commit:     خالد حسني <kha...@libreoffice.org>
CommitDate: Wed Jul 26 14:38:19 2023 +0200

    Related: tdf#156137 allow GtkLinkButton to wrap
    
    Change-Id: I00ca5a9056b64389f1d55aa8ca6a9d5fd8a16372
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/154926
    Reviewed-by: Balazs Varga <balazs.varga.ext...@allotropia.de>
    Tested-by: Jenkins
    Reviewed-by: خالد حسني <kha...@libreoffice.org>

diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 8d1b5cf7722f..a1ed113b3743 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -1673,6 +1673,7 @@ protected:
 public:
     virtual void set_label(const OUString& rText) = 0;
     virtual OUString get_label() const = 0;
+    virtual void set_label_wrap(bool wrap) = 0;
     virtual void set_uri(const OUString& rUri) = 0;
     virtual OUString get_uri() const = 0;
 
diff --git a/svx/uiconfig/ui/accessibilitycheckentry.ui 
b/svx/uiconfig/ui/accessibilitycheckentry.ui
index ea4b63c5fe88..3bf122c0b70f 100644
--- a/svx/uiconfig/ui/accessibilitycheckentry.ui
+++ b/svx/uiconfig/ui/accessibilitycheckentry.ui
@@ -2,13 +2,14 @@
 <!-- Generated with glade 3.40.0 -->
 <interface domain="svx">
   <requires lib="gtk+" version="3.20"/>
-  <object class="GtkBox" id="accessibilityCheckEntryBox">
+  <!-- n-columns=3 n-rows=1 -->
+  <object class="GtkGrid" id="accessibilityCheckEntryBox">
     <property name="visible">True</property>
     <property name="can-focus">False</property>
     <property name="margin-top">1</property>
     <property name="margin-bottom">1</property>
     <property name="hexpand">True</property>
-    <property name="spacing">6</property>
+    <property name="column-spacing">6</property>
     <child>
       <object class="GtkLabel" id="accessibilityCheckEntryLabel">
         <property name="visible">True</property>
@@ -25,9 +26,8 @@
         </child>
       </object>
       <packing>
-        <property name="expand">True</property>
-        <property name="fill">True</property>
-        <property name="position">0</property>
+        <property name="left-attach">0</property>
+        <property name="top-attach">0</property>
       </packing>
     </child>
     <child>
@@ -35,14 +35,13 @@
         <property name="visible">True</property>
         <property name="can-focus">True</property>
         <property name="receives-default">True</property>
-        <property name="halign">start</property>
         <property name="hexpand">True</property>
         <property name="relief">none</property>
+        <property name="xalign">0</property>
       </object>
       <packing>
-        <property name="expand">True</property>
-        <property name="fill">True</property>
-        <property name="position">1</property>
+        <property name="left-attach">1</property>
+        <property name="top-attach">0</property>
       </packing>
     </child>
     <child>
@@ -55,9 +54,8 @@
         <property name="valign">center</property>
       </object>
       <packing>
-        <property name="expand">False</property>
-        <property name="fill">False</property>
-        <property name="position">2</property>
+        <property name="left-attach">2</property>
+        <property name="top-attach">0</property>
       </packing>
     </child>
   </object>
diff --git a/sw/source/uibase/sidebar/A11yCheckIssuesPanel.cxx 
b/sw/source/uibase/sidebar/A11yCheckIssuesPanel.cxx
index 162724a1035c..338b0f1f7cac 100644
--- a/sw/source/uibase/sidebar/A11yCheckIssuesPanel.cxx
+++ b/sw/source/uibase/sidebar/A11yCheckIssuesPanel.cxx
@@ -43,6 +43,16 @@ AccessibilityCheckEntry::AccessibilityCheckEntry(
     if (m_pAccessibilityIssue->canGotoIssue())
     {
         m_xGotoButton->set_label(m_pAccessibilityIssue->m_aIssueText);
+
+        // int nPrefWidth(m_xGotoButton->get_preferred_size().Width());
+        int nMaxWidth = m_xGotoButton->get_approximate_digit_width() * 10;
+        // if (nPrefWidth > nMaxWidth)
+        {
+            // tdf#156137 allow LinkButton label to wrap
+            m_xGotoButton->set_label_wrap(true);
+            m_xGotoButton->set_size_request(nMaxWidth, -1);
+        }
+
         m_xGotoButton->connect_activate_link(
             LINK(this, AccessibilityCheckEntry, GotoButtonClicked));
         m_xLabel->set_visible(false);
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index 7ac28808ce3d..4e3087da8150 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -1078,9 +1078,6 @@ private:
 
     DECL_LINK(ClickHdl, ::Button*, void);
 
-protected:
-    void set_label_wrap(bool bWrap);
-
 public:
     SalInstanceButton(::Button* pButton, SalInstanceBuilder* pBuilder, bool 
bTakeOwnership);
 
@@ -1240,6 +1237,8 @@ public:
 
     virtual OUString get_uri() const override { return m_xButton->GetURL(); }
 
+    virtual void set_label_wrap(bool wrap) override;
+
     virtual ~SalInstanceLinkButton() override { 
m_xButton->SetClickHdl(m_aOrigClickHdl); }
 };
 
@@ -1265,7 +1264,7 @@ public:
 
     virtual OUString get_label() const override { return 
SalInstanceButton::get_label(); }
 
-    virtual void set_label_wrap(bool wrap) override { 
SalInstanceButton::set_label_wrap(wrap); }
+    virtual void set_label_wrap(bool wrap) override;
 
     virtual ~SalInstanceCheckButton() override;
 };
@@ -2011,7 +2010,7 @@ public:
 
     virtual OUString get_label() const override { return 
SalInstanceButton::get_label(); }
 
-    virtual void set_label_wrap(bool wrap) override { 
SalInstanceButton::set_label_wrap(wrap); }
+    virtual void set_label_wrap(bool wrap) override;
 
     virtual ~SalInstanceRadioButton() override;
 };
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 71308484ed63..b16b0930ab00 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -2884,14 +2884,14 @@ void SalInstanceButton::set_from_icon_name(const 
OUString& rIconName)
     m_xButton->SetModeImage(Image(StockImage::Yes, rIconName));
 }
 
-void SalInstanceButton::set_label_wrap(bool wrap)
+static void set_label_wrap(Control& rWidget, bool wrap)
 {
-    WinBits nBits = m_xButton->GetStyle();
+    WinBits nBits = rWidget.GetStyle();
     nBits &= ~WB_WORDBREAK;
     if (wrap)
         nBits |= WB_WORDBREAK;
-    m_xButton->SetStyle(nBits);
-    m_xButton->queue_resize();
+    rWidget.SetStyle(nBits);
+    rWidget.queue_resize();
 }
 
 void SalInstanceButton::set_font(const vcl::Font& rFont)
@@ -3103,6 +3103,8 @@ IMPL_LINK(SalInstanceLinkButton, ClickHdl, 
FixedHyperlink&, rButton, void)
         m_aOrigClickHdl.Call(rButton);
 }
 
+void SalInstanceLinkButton::set_label_wrap(bool bWrap) { 
::set_label_wrap(*m_xButton, bWrap); }
+
 SalInstanceRadioButton::SalInstanceRadioButton(::RadioButton* pButton, 
SalInstanceBuilder* pBuilder,
                                                bool bTakeOwnership)
     : SalInstanceButton(pButton, pBuilder, bTakeOwnership)
@@ -3147,6 +3149,11 @@ void SalInstanceRadioButton::set_inconsistent(bool 
/*inconsistent*/)
 
 bool SalInstanceRadioButton::get_inconsistent() const { return false; }
 
+void SalInstanceRadioButton::set_label_wrap(bool bWrap)
+{
+    ::set_label_wrap(*m_xRadioButton, bWrap);
+}
+
 SalInstanceRadioButton::~SalInstanceRadioButton()
 {
     m_xRadioButton->SetToggleHdl(Link<::RadioButton&, void>());
@@ -3198,6 +3205,11 @@ bool SalInstanceCheckButton::get_inconsistent() const
     return m_xCheckButton->GetState() == TRISTATE_INDET;
 }
 
+void SalInstanceCheckButton::set_label_wrap(bool bWrap)
+{
+    ::set_label_wrap(*m_xCheckButton, bWrap);
+}
+
 SalInstanceCheckButton::~SalInstanceCheckButton()
 {
     m_xCheckButton->SetToggleHdl(Link<CheckBox&, void>());
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index 60d6c6b12b3b..77d69b9a4436 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -12573,6 +12573,13 @@ public:
         gtk_link_button_set_uri(m_pButton, OUStringToOString(rText, 
RTL_TEXTENCODING_UTF8).getStr());
     }
 
+    virtual void set_label_wrap(bool bWrap) override
+    {
+        GtkLabel* pChild = ::get_label_widget(GTK_WIDGET(m_pButton));
+        ::set_label_wrap(pChild, bWrap);
+        gtk_label_set_max_width_chars(pChild, 1);
+    }
+
     virtual OUString get_uri() const override
     {
         const gchar* pStr = gtk_link_button_get_uri(m_pButton);

Reply via email to