formula/uiconfig/ui/formuladialog.ui |   31 ++++++++++++++++++++-----------
 formula/uiconfig/ui/parameter.ui     |   15 +++++++++++++++
 vcl/source/window/window.cxx         |    7 +++++++
 3 files changed, 42 insertions(+), 11 deletions(-)

New commits:
commit f7b0986d05a1cf5e8420b5e145aa088444dd368f
Author:     Parth Raiyani <[email protected]>
AuthorDate: Wed Sep 3 20:06:33 2025 +0530
Commit:     Szymon Kłos <[email protected]>
CommitDate: Tue Oct 14 12:45:07 2025 +0200

    Improve accessibility by adding static roles to GtkLabels
    
    - Adds static accessibility roles to GtkLabels to ensure proper rendering 
and enhance compatibility with assistive technologies
    - Introduces new `renderAsStatic` property in JSON which is set inside 
DumpAsPropertyTree method when label has static accessibility role
    
    Signed-off-by: Parth Raiyani <[email protected]>
    Change-Id: I8b8d0005b60fdda2af44eb87186e0b7982ee91f5
    (cherry picked from commit 410735f1f2bbc6772f0f70a95803237daec8a24a)
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/192366
    Tested-by: Szymon Kłos <[email protected]>
    Reviewed-by: Szymon Kłos <[email protected]>

diff --git a/formula/uiconfig/ui/formuladialog.ui 
b/formula/uiconfig/ui/formuladialog.ui
index 1bb11eefe9ba..38171cad9aa7 100644
--- a/formula/uiconfig/ui/formuladialog.ui
+++ b/formula/uiconfig/ui/formuladialog.ui
@@ -234,23 +234,17 @@
                             <property name="can-focus">False</property>
                             <property name="halign">start</property>
                             <property name="hexpand">True</property>
+                            <child internal-child="accessible">
+                              <object class="AtkObject" 
id="editname-atkobject">
+                                <property 
name="AtkObject::accessible-role">static</property>
+                              </object>
+                            </child>
                           </object>
                           <packing>
                             <property name="left-attach">0</property>
                             <property name="top-attach">0</property>
                           </packing>
                         </child>
-                        <child>
-                          <object class="GtkLabel" id="label3">
-                            <property name="visible">True</property>
-                            <property name="can-focus">False</property>
-                            <property name="hexpand">True</property>
-                          </object>
-                          <packing>
-                            <property name="left-attach">1</property>
-                            <property name="top-attach">0</property>
-                          </packing>
-                        </child>
                       </object>
                       <packing>
                         <property name="expand">False</property>
@@ -295,6 +289,11 @@
                             <attributes>
                               <attribute name="weight" value="bold"/>
                             </attributes>
+                            <child internal-child="accessible">
+                              <object class="AtkObject" 
id="headline-atkobject">
+                                <property 
name="AtkObject::accessible-role">static</property>
+                              </object>
+                            </child>
                           </object>
                           <packing>
                             <property name="left-attach">0</property>
@@ -309,6 +308,11 @@
                             <property name="wrap">True</property>
                             <property name="xalign">0</property>
                             <property name="yalign">0</property>
+                            <child internal-child="accessible">
+                              <object class="AtkObject" 
id="funcname-atkobject">
+                                <property 
name="AtkObject::accessible-role">static</property>
+                              </object>
+                            </child>
                           </object>
                           <packing>
                             <property name="left-attach">0</property>
@@ -324,6 +328,11 @@
                             <property name="wrap">True</property>
                             <property name="xalign">0</property>
                             <property name="yalign">0</property>
+                            <child internal-child="accessible">
+                              <object class="AtkObject" 
id="funcdesc-atkobject">
+                                <property 
name="AtkObject::accessible-role">static</property>
+                              </object>
+                            </child>
                             <attributes>
                               <attribute name="scale" value="0.9"/>
                             </attributes>
diff --git a/formula/uiconfig/ui/parameter.ui b/formula/uiconfig/ui/parameter.ui
index 5cdcf3f88981..8e5c30bcdde5 100644
--- a/formula/uiconfig/ui/parameter.ui
+++ b/formula/uiconfig/ui/parameter.ui
@@ -28,6 +28,11 @@
             <property name="wrap">True</property>
             <property name="xalign">0</property>
             <property name="yalign">0</property>
+            <child internal-child="accessible">
+              <object class="AtkObject" id="editdesc-atkobject">
+                <property name="AtkObject::accessible-role">static</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="expand">False</property>
@@ -41,6 +46,11 @@
             <property name="can-focus">False</property>
             <property name="halign">start</property>
             <property name="hexpand">True</property>
+            <child internal-child="accessible">
+              <object class="AtkObject" id="parname-atkobject">
+                <property name="AtkObject::accessible-role">static</property>
+              </object>
+            </child>
           </object>
           <packing>
             <property name="expand">False</property>
@@ -58,6 +68,11 @@
             <property name="wrap">True</property>
             <property name="xalign">0</property>
             <property name="yalign">0</property>
+            <child internal-child="accessible">
+              <object class="AtkObject" id="pardesc-atkobject">
+                <property name="AtkObject::accessible-role">static</property>
+              </object>
+            </child>
             <attributes>
               <attribute name="scale" value="0.9"/>
             </attributes>
diff --git a/vcl/source/window/window.cxx b/vcl/source/window/window.cxx
index 0366f5ba5e75..6ff8fea2a84b 100644
--- a/vcl/source/window/window.cxx
+++ b/vcl/source/window/window.cxx
@@ -62,6 +62,7 @@
 #include <dndeventdispatcher.hxx>
 
 #include <com/sun/star/accessibility/AccessibleRelation.hpp>
+#include <com/sun/star/accessibility/AccessibleRole.hpp>
 #include <com/sun/star/accessibility/XAccessible.hpp>
 #include <com/sun/star/accessibility/XAccessibleEditableText.hpp>
 #include <com/sun/star/awt/XVclWindowPeer.hpp>
@@ -3402,6 +3403,12 @@ void Window::DumpAsPropertyTree(tools::JsonWriter& 
rJsonWriter)
         }
     }
 
+    // If GtkLabel has a static accessibility role, mark renderAsStatic.
+    // so LOK renders it as <span> instead of <label> for correct 
accessibility.
+    sal_uInt16 nAccessibleRole = GetAccessibleRole();
+    if (nAccessibleRole == css::accessibility::AccessibleRole::STATIC && 
GetType() == WindowType::FIXEDTEXT)
+        rJsonWriter.put("renderAsStatic", true);
+
     vcl::Window* pAccLabelFor = getAccessibleRelationLabelFor();
     if (pAccLabelFor)
         rJsonWriter.put("labelFor", pAccLabelFor->get_id());

Reply via email to