You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
121 lines
4.5 KiB
121 lines
4.5 KiB
From 26ff4db374438a230f1670ab12d88f7f54075127 Mon Sep 17 00:00:00 2001
|
|
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
|
Date: Wed, 24 Mar 2021 11:33:42 +0000
|
|
Subject: [PATCH] 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
|
|
---
|
|
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(+)
|
|
|
|
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 &)
|
|
--
|
|
2.30.2
|
|
|