libreoffice/0001-tdf-141197-if-we-have-a-sysobj-child-then-include-th.patch
DistroBaker e182086193 Merged update from upstream sources
This is an automated DistroBaker update from upstream sources.
If you do not know what this is about or would like to opt out,
contact the OSCI team.

Source: https://src.fedoraproject.org/rpms/libreoffice.git#783a050a009ab57e097d57b80337ad1ca30f1a6c
2021-03-27 03:25:27 +00:00

121 lines
4.5 KiB
Diff

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