office-gobmx/winaccessibility/inc/AccObjectContainerEventListener.hxx
Michael Weghorn a10a99b0c6 wina11y: Retrieve a11y name on demand
Instead of doing extra bookkeeping to keep
`CMAccessible::m_pszName` as a class member up
to date with the current value of the accessible
name, just retrieve the current a11y name directly
from the underlying `XAccessible` when it is requested
via the IAccessible2 API in `CMAccessible::get_accName`.

This is basically the accessible name equivalent of the
the following commit that did similarly for the
accessible description:

    commit fcf4a26275
    Author: Michael Weghorn <m.weghorn@posteo.de>
    Date:   Wed Jan 5 13:41:53 2022 +0000

        tdf#146306 wina11y: Retrieve accessible desc on demand

        Adapt 'MAccessible::get_accDescription' to directly
        retrieve the accessible description on demand via the
        corresponding XAccessible, rather than keeping
        track of it in a class member.

        This simplifies the handling and makes it
        unnecessary to "manually" update the description
        on 'accessibility::AccessibleEventId::DESCRIPTION_CHANGED'
        events, since the new value will
        be queried next time it is needed anyway.

        This also fixes the problem that a significant
        amount of time was spent generating accessible
        descriptions for all newly inserted a11y objects when
        entering values into Calc cells with the NVDA
        screen reader in use, resulting in several
        seconds of delay.

        Querying up-to-date values from the underlying
        UNO interfaces on demand instead of doing extra
        manual bookkeeping in the winaccessibility code
        may be possible for more a11y attributes in addition
        to the accessible description handled in this commit,
        but each one will have to be looked at separately.

This also allows to drop the
`AccContainerEventListener::HandleNameChangedEvent` and
`AccObjectContainerEventListener::HandleStateChangedEvent`
overrides of the base class implementations unnecessary,
as the only thing they did in addition was updating the
a11y name.

This commit has no effect on events sent on the platform
layer, those are still sent as before to notify about the
name change.

Change-Id: I4d1df1d0b73ce963cdaec91d642ff5bbf2b371bc
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/172148
Tested-by: Jenkins
Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-08-21 07:47:58 +02:00

44 lines
1.8 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 <stdio.h>
#include "AccContainerEventListener.hxx"
#include <com/sun/star/accessibility/XAccessibleEventListener.hpp>
#include <com/sun/star/accessibility/XAccessible.hpp>
/**
* AccObjectContainerEventListener is inherited from AccContainerEventListener. It handles the events
* generated by container controls. The accessible role is: SHAPE
* It defines the procedure of specific event handling related with shapes and provides
* the detailed support for some related methods.
*/
class AccObjectContainerEventListener: public AccContainerEventListener
{
public:
AccObjectContainerEventListener(css::accessibility::XAccessible* pAcc, AccObjectWinManager& rManager);
virtual ~AccObjectContainerEventListener() override;
//for visible data changed event, for shapes, the visibledatachanged should be mapped to LOCATION_CHANGED
virtual void HandleVisibleDataChangedEvent() override;
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */