[Libreoffice-commits] core.git: Branch 'libreoffice-7-1' - vcl/Library_vclplug_gtk3_kde5.mk vcl/Library_vclplug_gtk3.mk vcl/unx

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Tue Apr 6 10:44:43 UTC 2021


 vcl/Library_vclplug_gtk3.mk          |    1 +
 vcl/Library_vclplug_gtk3_kde5.mk     |    1 +
 vcl/unx/gtk3/a11y/atkwrapper.hxx     |    1 +
 vcl/unx/gtk3/a11y/gtk3atkwrapper.cxx |   28 ++++++++++++++++++++++++++++
 4 files changed, 31 insertions(+)

New commits:
commit 4b2dc7863a532bdac4db59f9e0cce126f80207d3
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Wed Mar 24 11:33:42 2021 +0000
Commit:     Michael Stahl <michael.stahl at allotropia.de>
CommitDate: Tue Apr 6 12:44:09 2021 +0200

    tdf#141197 if we have a sysobj child then include that in the atk hierarchy
    
    this also should make the case of an embedded video visible in the atk
    hierarchy as well as the target of the native gtk widgets in a vcl
    window container in the startcenter
    
    Change-Id: Ia91439cbccbffbb0badbfb466f7ab6d1ccbfe3ae
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113526
    Tested-by: Jenkins
    Reviewed-by: Michael Stahl <michael.stahl at allotropia.de>

diff --git a/vcl/Library_vclplug_gtk3.mk b/vcl/Library_vclplug_gtk3.mk
index 9e67d5efc265..317152b59fe9 100644
--- a/vcl/Library_vclplug_gtk3.mk
+++ b/vcl/Library_vclplug_gtk3.mk
@@ -36,6 +36,7 @@ $(eval $(call gb_Library_set_include,vclplug_gtk3,\
 
 $(eval $(call gb_Library_add_defs,vclplug_gtk3,\
     -DVCLPLUG_GTK_IMPLEMENTATION \
+    -DVCL_INTERNALS \
 ))
 
 $(eval $(call gb_Library_use_custom_headers,vclplug_gtk3,\
diff --git a/vcl/Library_vclplug_gtk3_kde5.mk b/vcl/Library_vclplug_gtk3_kde5.mk
index 51dafda097be..602be3d13b45 100644
--- a/vcl/Library_vclplug_gtk3_kde5.mk
+++ b/vcl/Library_vclplug_gtk3_kde5.mk
@@ -41,6 +41,7 @@ $(eval $(call gb_Library_add_cxxflags,vclplug_gtk3_kde5,\
 
 $(eval $(call gb_Library_add_defs,vclplug_gtk3_kde5,\
     -DVCLPLUG_GTK_IMPLEMENTATION -DVCLPLUG_GTK3_KDE5_IMPLEMENTATION \
+    -DVCL_INTERNALS \
 ))
 
 $(eval $(call gb_Library_use_custom_headers,vclplug_gtk3_kde5,\
diff --git a/vcl/unx/gtk3/a11y/atkwrapper.hxx b/vcl/unx/gtk3/a11y/atkwrapper.hxx
index d9c651a2eae8..0fcbce6369fd 100644
--- a/vcl/unx/gtk3/a11y/atkwrapper.hxx
+++ b/vcl/unx/gtk3/a11y/atkwrapper.hxx
@@ -46,6 +46,7 @@ struct AtkObjectWrapper
 {
     AtkObject aParent;
     AtkObject* mpOrig;  //if we're a GtkDrawingArea acting as a custom LibreOffice widget, this is the toolkit default impl
+    AtkObject* mpSysObjChild; //if we're a container for a sysobj, then this is the sysobj native gtk AtkObject
 
     css::uno::Reference<css::accessibility::XAccessible> mpAccessible;
     css::uno::Reference<css::accessibility::XAccessibleContext> mpContext;
diff --git a/vcl/unx/gtk3/a11y/gtk3atkwrapper.cxx b/vcl/unx/gtk3/a11y/gtk3atkwrapper.cxx
index 2442e6ab665d..56bc8717d0fb 100644
--- a/vcl/unx/gtk3/a11y/gtk3atkwrapper.cxx
+++ b/vcl/unx/gtk3/a11y/gtk3atkwrapper.cxx
@@ -40,9 +40,13 @@
 #include <com/sun/star/accessibility/XAccessibleImage.hpp>
 #include <com/sun/star/accessibility/XAccessibleHypertext.hpp>
 #include <com/sun/star/accessibility/XAccessibleSelection.hpp>
+#include <com/sun/star/awt/XWindow.hpp>
 
 #include <rtl/strbuf.hxx>
 #include <osl/diagnose.h>
+#include <vcl/syschild.hxx>
+#include <vcl/sysdata.hxx>
+#include <vcl/toolkit/unowrap.hxx>
 
 #include "atkwrapper.hxx"
 #include "atkregistry.hxx"
@@ -406,6 +410,10 @@ static gint
 wrapper_get_n_children( AtkObject *atk_obj )
 {
     AtkObjectWrapper *obj = ATK_OBJECT_WRAPPER (atk_obj);
+
+    if (obj->mpSysObjChild)
+        return 1;
+
     gint n = 0;
 
     if( obj->mpContext.is() )
@@ -428,6 +436,13 @@ wrapper_ref_child( AtkObject *atk_obj,
                    gint       i )
 {
     AtkObjectWrapper *obj = ATK_OBJECT_WRAPPER (atk_obj);
+
+    if (obj->mpSysObjChild)
+    {
+        g_object_ref(obj->mpSysObjChild);
+        return obj->mpSysObjChild;
+    }
+
     AtkObject* child = nullptr;
 
     // see comments above atk_object_wrapper_remove_child
@@ -874,6 +889,19 @@ atk_object_wrapper_new( const css::uno::Reference< css::accessibility::XAccessib
             }
         }
 
+        // tdf#141197 if we have a sysobj child then include that in the hierarchy
+        if (UnoWrapperBase* pWrapper = UnoWrapperBase::GetUnoWrapper())
+        {
+            css::uno::Reference<css::awt::XWindow> xAWTWindow(rxAccessible, css::uno::UNO_QUERY);
+            VclPtr<vcl::Window> xWindow = pWrapper->GetWindow(xAWTWindow);
+            if (xWindow && xWindow->GetType() == WindowType::SYSTEMCHILDWINDOW)
+            {
+                const SystemEnvData* pEnvData = static_cast<SystemChildWindow*>(xWindow.get())->GetSystemData();
+                if (GtkWidget *pSysObj = pEnvData ? static_cast<GtkWidget*>(pEnvData->pWidget) : nullptr)
+                    pWrap->mpSysObjChild = gtk_widget_get_accessible(pSysObj);
+            }
+        }
+
         return ATK_OBJECT( pWrap );
     }
     catch (const uno::Exception &)


More information about the Libreoffice-commits mailing list