parent
0391b06f3b
commit
783a050a00
@ -0,0 +1,43 @@
|
|||||||
|
From 2beb3922391ae1a6f1d26128d82c0e34cb963af3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
|
||||||
|
Date: Tue, 23 Mar 2021 14:55:09 +0000
|
||||||
|
Subject: [PATCH] Related: tdf#141197 critical a11y warning
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
** (soffice:19098): CRITICAL **: 13:44:40.365:
|
||||||
|
AtkObject* atk_object_wrapper_ref(const com::sun::star::uno::Reference<com::sun::star::accessibility::XAccessible>&, bool):
|
||||||
|
assertion 'bool(rxAccessible)' failed
|
||||||
|
|
||||||
|
probably since...
|
||||||
|
|
||||||
|
commit cbc18cc904c652a936c4b68fba4d975bd89b5abd
|
||||||
|
Date: Mon Nov 23 21:03:28 2020 +0100
|
||||||
|
|
||||||
|
tdf#138425 vcl/gtk activate main menu in UpdateFull
|
||||||
|
|
||||||
|
Change-Id: Ieb181e02bb0d2a907aec8534349ec2a80fd9c7e3
|
||||||
|
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/113000
|
||||||
|
Tested-by: Jenkins
|
||||||
|
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
|
||||||
|
---
|
||||||
|
vcl/source/window/menu.cxx | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/vcl/source/window/menu.cxx b/vcl/source/window/menu.cxx
|
||||||
|
index 4fb964f2f008..233f531cfcaf 100644
|
||||||
|
--- a/vcl/source/window/menu.cxx
|
||||||
|
+++ b/vcl/source/window/menu.cxx
|
||||||
|
@@ -1303,7 +1303,7 @@ css::uno::Reference<css::accessibility::XAccessible> Menu::GetAccessible()
|
||||||
|
// Since PopupMenu are sometimes shared by different instances of MenuBar, the mxAccessible member gets
|
||||||
|
// overwritten and may contain a disposed object when the initial menubar gets set again. So use the
|
||||||
|
// mxAccessible member only for sub menus.
|
||||||
|
- if ( pStartedFrom )
|
||||||
|
+ if (pStartedFrom && pStartedFrom != this)
|
||||||
|
{
|
||||||
|
for ( sal_uInt16 i = 0, nCount = pStartedFrom->GetItemCount(); i < nCount; ++i )
|
||||||
|
{
|
||||||
|
--
|
||||||
|
2.30.2
|
||||||
|
|
@ -0,0 +1,120 @@
|
|||||||
|
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
|
||||||
|
|
Loading…
Reference in new issue