diff options
-rw-r--r-- | comphelper/source/misc/accessiblecontexthelper.cxx | 6 | ||||
-rw-r--r-- | include/comphelper/accessiblecontexthelper.hxx | 7 | ||||
-rw-r--r-- | include/toolkit/awt/vclxaccessiblecomponent.hxx | 2 | ||||
-rw-r--r-- | offapi/UnoApi_offapi.mk | 1 | ||||
-rw-r--r-- | offapi/com/sun/star/accessibility/XAccessibleContext2.idl | 56 | ||||
-rw-r--r-- | toolkit/source/awt/vclxaccessiblecomponent.cxx | 13 | ||||
-rw-r--r-- | vcl/unx/gtk/a11y/atkwrapper.cxx | 12 |
7 files changed, 95 insertions, 2 deletions
diff --git a/comphelper/source/misc/accessiblecontexthelper.cxx b/comphelper/source/misc/accessiblecontexthelper.cxx index 1b6d7f59f547..463c9735f228 100644 --- a/comphelper/source/misc/accessiblecontexthelper.cxx +++ b/comphelper/source/misc/accessiblecontexthelper.cxx @@ -196,6 +196,12 @@ namespace comphelper } + OUString SAL_CALL OAccessibleContextHelper::getAccessibleId( ) + { + return OUString(); + } + + sal_Int32 SAL_CALL OAccessibleContextHelper::getAccessibleIndexInParent( ) { OExternalLockGuard aGuard( this ); diff --git a/include/comphelper/accessiblecontexthelper.hxx b/include/comphelper/accessiblecontexthelper.hxx index 7af467872faa..f8182526b280 100644 --- a/include/comphelper/accessiblecontexthelper.hxx +++ b/include/comphelper/accessiblecontexthelper.hxx @@ -22,7 +22,7 @@ #include <cppuhelper/compbase2.hxx> #include <cppuhelper/basemutex.hxx> -#include <com/sun/star/accessibility/XAccessibleContext.hpp> +#include <com/sun/star/accessibility/XAccessibleContext2.hpp> #include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp> #include <comphelper/comphelperdllapi.h> #include <comphelper/solarmutex.hxx> @@ -37,7 +37,7 @@ namespace comphelper class OContextHelper_Impl; - typedef ::cppu::WeakAggComponentImplHelper2 < css::accessibility::XAccessibleContext, + typedef ::cppu::WeakAggComponentImplHelper2 < css::accessibility::XAccessibleContext2, css::accessibility::XAccessibleEventBroadcaster > OAccessibleContextHelper_Base; @@ -91,6 +91,9 @@ namespace comphelper virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet( ) override = 0; virtual css::uno::Reference< css::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet( ) override = 0; + // XAccessibleContext2 - default implementation + virtual OUString SAL_CALL getAccessibleId( ) override; + // XAccessibleContext - default implementations /** default implementation for retrieving the index of this object within the parent <p>This basic implementation here returns the index <code>i</code> of the child for which diff --git a/include/toolkit/awt/vclxaccessiblecomponent.hxx b/include/toolkit/awt/vclxaccessiblecomponent.hxx index 8779f0e14237..377dcbc57ce1 100644 --- a/include/toolkit/awt/vclxaccessiblecomponent.hxx +++ b/include/toolkit/awt/vclxaccessiblecomponent.hxx @@ -99,6 +99,7 @@ public: sal_Int16 SAL_CALL getAccessibleRole( ) override; OUString SAL_CALL getAccessibleDescription( ) override; OUString SAL_CALL getAccessibleName( ) override; + OUString SAL_CALL getAccessibleId( ) override; css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet( ) override; css::uno::Reference< css::accessibility::XAccessibleStateSet > SAL_CALL getAccessibleStateSet( ) override; css::lang::Locale SAL_CALL getLocale( ) override; @@ -138,6 +139,7 @@ private: sal_Int16 getAccessibleRole() => VCL Window::GetAccessibleRole() OUString getAccessibleDescription() => VCL Window::GetAccessibleDescription OUString getAccessibleName() => VCL Window::GetAccessibleText() => Most windows return Window::GetText() + OUString getAccessibleId() => VCL Window::get_id() Reference< XAccessibleRelationSet > getAccessibleRelationSet() Reference< XAccessibleStateSet > getAccessibleStateSet() => override FillAccessibleStateSet( ... ) diff --git a/offapi/UnoApi_offapi.mk b/offapi/UnoApi_offapi.mk index a1ffab05d2e8..4c79c9d04328 100644 --- a/offapi/UnoApi_offapi.mk +++ b/offapi/UnoApi_offapi.mk @@ -1634,6 +1634,7 @@ $(eval $(call gb_UnoApi_add_idlfiles,offapi,com/sun/star/accessibility,\ XAccessibleAction \ XAccessibleComponent \ XAccessibleContext \ + XAccessibleContext2 \ XAccessibleEditableText \ XAccessibleEventBroadcaster \ XAccessibleEventListener \ diff --git a/offapi/com/sun/star/accessibility/XAccessibleContext2.idl b/offapi/com/sun/star/accessibility/XAccessibleContext2.idl new file mode 100644 index 000000000000..e9d4feae1021 --- /dev/null +++ b/offapi/com/sun/star/accessibility/XAccessibleContext2.idl @@ -0,0 +1,56 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed + * with this work for additional information regarding copyright + * ownership. The ASF licenses this file to you under the Apache + * License, Version 2.0 (the "License"); you may not use this file + * except in compliance with the License. You may obtain a copy of + * the License at http://www.apache.org/licenses/LICENSE-2.0 . + */ + +#ifndef __com_sun_star_accessibility_XAccessibleContext2_idl__ +#define __com_sun_star_accessibility_XAccessibleContext2_idl__ + +module com { module sun { module star { module accessibility { + +/** Implement this interface for exposing more aspects of a class's + content. + + <p>This is an extension of XAccessibleContext to add getAccessibleId().</p> + + @since LibreOffice 6.3 +*/ +interface XAccessibleContext2 : ::com::sun::star::accessibility::XAccessibleContext +{ + /** Return the object's identifier. + + <p>This is not meant to be presented to the user, but to be an ID + which is stable over application development. Typically, this is + the gtkbuilder ID. Such an ID can then be used to identify a given + well-known accessible object independently from the current locale, + user-visible labelling, or dialog structure. This can then be used for + tailored screen reading (e.g. automatically announcing the content of a + well-known object), or for automatic regression testing (to check the + behavior of well-known objects). Uniqueness within the window is thus + desirable when returning a non-empty string.</p> + + @return + The returned string is the object's identifier. + */ + string getAccessibleId (); +}; + +}; }; }; }; + +#endif + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/toolkit/source/awt/vclxaccessiblecomponent.cxx b/toolkit/source/awt/vclxaccessiblecomponent.cxx index 8bd78e5d9c1b..f9b55d278655 100644 --- a/toolkit/source/awt/vclxaccessiblecomponent.cxx +++ b/toolkit/source/awt/vclxaccessiblecomponent.cxx @@ -620,6 +620,19 @@ OUString VCLXAccessibleComponent::getAccessibleName( ) return aName; } +OUString VCLXAccessibleComponent::getAccessibleId( ) +{ + OExternalLockGuard aGuard( this ); + + OUString aId; + if ( GetWindow() ) + { + const OUString &aWindowId = GetWindow()->get_id(); + aId = aWindowId; + } + return aId; +} + uno::Reference< accessibility::XAccessibleRelationSet > VCLXAccessibleComponent::getAccessibleRelationSet( ) { OExternalLockGuard aGuard( this ); diff --git a/vcl/unx/gtk/a11y/atkwrapper.cxx b/vcl/unx/gtk/a11y/atkwrapper.cxx index a6382c8b2ef6..63b4cfa04430 100644 --- a/vcl/unx/gtk/a11y/atkwrapper.cxx +++ b/vcl/unx/gtk/a11y/atkwrapper.cxx @@ -31,6 +31,7 @@ #include <com/sun/star/accessibility/XAccessibleValue.hpp> #include <com/sun/star/accessibility/XAccessibleAction.hpp> #include <com/sun/star/accessibility/XAccessibleContext.hpp> +#include <com/sun/star/accessibility/XAccessibleContext2.hpp> #include <com/sun/star/accessibility/XAccessibleComponent.hpp> #include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp> #include <com/sun/star/accessibility/XAccessibleMultiLineText.hpp> @@ -880,6 +881,17 @@ atk_object_wrapper_new( const css::uno::Reference< css::accessibility::XAccessib OSL_ASSERT( false ); } +#if ATK_CHECK_VERSION(2,33,1) + { + css::uno::Reference<css::accessibility::XAccessibleContext2> xContext2(xContext, css::uno::UNO_QUERY); + if( xContext2.is() ) + { + OString aId = OUStringToOString( xContext2->getAccessibleId(), RTL_TEXTENCODING_UTF8); + atk_object_set_accessible_id(atk_obj, aId.getStr()); + } + } +#endif + return ATK_OBJECT( pWrap ); } catch (const uno::Exception &) |