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@allotropia.de>
diff --git a/vcl/Library_vclplug_gtk3.mk b/vcl/Library_vclplug_gtk3.mk
index 9e67d5e..317152b 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 51dafda..602be3d 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 d9c651a..0fcbce6 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 2442e6a..56bc871 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 &)