office-gobmx/accessibility/inc/standard/vclxaccessibletextcomponent.hxx
Michael Weghorn a5593114bb tdf#104833 a11y Send name changed event for text controls
The text is at least often used for the accessible name of
text controls (e.g. the MultiLineEdit case in tdf#104833).

Therefore, also check whether the a11y name has changed
from the previously remembered one in
`VCLXAccessibleTextComponent::SetText` and send
a NAME_CHANGED event if it has.

This e.g. makes sure that the a11y name for the multi line
edit in the update dialog is updated on Windows
and NVDA properly announces it when it receives focus.
 (It now correctly announces "LibreOfficeDev 24.2 is up to date."
instead of the obsolete cached name "Checking...").

Also see how `VCLXAccessibleTextComponent::ProcessWindowEvent`
calls `VCLXAccessibleTextComponent::SetText` when processing
`VclEventId::WindowFrameTitleChanged` and this comment in
`Window::SetText` mentions that `VclEventId::WindowFrameTitleChanged`
is used to notify about a11y name changes:

    // #107247# needed for accessibility
    // The VclEventId::WindowFrameTitleChanged is (mis)used to notify accessible name changes.
    // Therefore a window, which is labeled by this window, must also notify an accessible
    // name change.

Change-Id: I2f15fe78324b14c3bbeae943cb87384007e21618
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/156411
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2023-09-01 16:13:40 +02:00

79 lines
3.9 KiB
C++

/* -*- 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 .
*/
#pragma once
#include <com/sun/star/accessibility/AccessibleScrollType.hpp>
#include <toolkit/awt/vclxaccessiblecomponent.hxx>
#include <comphelper/accessibletexthelper.hxx>
#include <cppuhelper/implbase.hxx>
class VCLXAccessibleTextComponent : public cppu::ImplInheritanceHelper<
VCLXAccessibleComponent,
css::accessibility::XAccessibleText>,
public ::comphelper::OCommonAccessibleText
{
OUString m_sText;
// accessible name the object had when SetText was called last time
OUString m_sOldName;
protected:
void SetText( const OUString& sText );
virtual void ProcessWindowEvent( const VclWindowEvent& rVclWindowEvent ) override;
// OCommonAccessibleText
virtual OUString implGetText() override;
virtual css::lang::Locale implGetLocale() override;
virtual void implGetSelection( sal_Int32& nStartIndex, sal_Int32& nEndIndex ) override;
// XComponent
virtual void SAL_CALL disposing() override;
public:
VCLXAccessibleTextComponent( VCLXWindow* pVCLXWindow );
// XAccessibleText
virtual sal_Int32 SAL_CALL getCaretPosition() override;
virtual sal_Bool SAL_CALL setCaretPosition( sal_Int32 nIndex ) override;
virtual sal_Unicode SAL_CALL getCharacter( sal_Int32 nIndex ) override;
virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL getCharacterAttributes( sal_Int32 nIndex, const css::uno::Sequence< OUString >& aRequestedAttributes ) override;
virtual css::awt::Rectangle SAL_CALL getCharacterBounds( sal_Int32 nIndex ) override;
virtual sal_Int32 SAL_CALL getCharacterCount() override;
virtual sal_Int32 SAL_CALL getIndexAtPoint( const css::awt::Point& aPoint ) override;
virtual OUString SAL_CALL getSelectedText() override;
virtual sal_Int32 SAL_CALL getSelectionStart() override;
virtual sal_Int32 SAL_CALL getSelectionEnd() override;
virtual sal_Bool SAL_CALL setSelection( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) override;
virtual OUString SAL_CALL getText() override;
virtual OUString SAL_CALL getTextRange( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) override;
virtual css::accessibility::TextSegment SAL_CALL getTextAtIndex( sal_Int32 nIndex, sal_Int16 aTextType ) override;
virtual css::accessibility::TextSegment SAL_CALL getTextBeforeIndex( sal_Int32 nIndex, sal_Int16 aTextType ) override;
virtual css::accessibility::TextSegment SAL_CALL getTextBehindIndex( sal_Int32 nIndex, sal_Int16 aTextType ) override;
virtual sal_Bool SAL_CALL copyText( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) override;
virtual sal_Bool SAL_CALL scrollSubstringTo( sal_Int32 nStartIndex, sal_Int32 nEndIndex, css::accessibility::AccessibleScrollType aScrollType) override;
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */