summaryrefslogtreecommitdiff
path: root/sw/source/core/access/accmap.cxx
diff options
context:
space:
mode:
authorMichael Weghorn <m.weghorn@posteo.de>2024-01-24 14:24:42 +0100
committerMichael Weghorn <m.weghorn@posteo.de>2024-01-25 09:42:20 +0100
commitc965b4f6fb1e59d05b26930d5fa24df2e7c0e0b5 (patch)
tree9d9bcfaaaa65c64108dfe28fec6d76ce86d63653 /sw/source/core/access/accmap.cxx
parent08b7a0eb45c8816c6cf093d9a7405ce9b6d3f990 (diff)
sw a11y: Drop special event handling for single selected shape
If shape selecion changed, just send the same `AccessibleEventId::SELECTION_CHANGED_ADD` event(s) regardless of whether only a single or multiple shapes are selected. This unifies the handling and also prepares for sending the event with the correct source and `NewValue` set. The `AccessibleEventId::SELECTION_CHANGED` doc doesn't expclicitly mention whether the source should be the selection container (i.e. the parent, which is the doc view in the case here) or the selected object, and this is currently handled inconsistently across the codebase. I tend to think that this event should have the container as the source (just as for the `AccessibleEventId::SELECTION_CHANGED_ADD` case, that will be fixed in an upcoming commit), and this is at least what the handling e.g. in the gtk3 a11y bridge assumes (s. `AtkListener::notifyEvent`), but there seems to be no added value in handling the case of a single selected shape specially here in the first place. This may have been inspired by the MSAA/IAccessible equivalent, `EVENT_OBJECT_SELECTION` [1]: > The selection within a container object has changed. (...) This event > signals a single selection: either a child is selected in a container > that previously did not contain any selected children, or the selection > has changed from one child to another. But then, the selection taking place here might also be from multiple objects being selected to just a single one, and `SELECTION_CHANGED_REMOVE` is sent for any previously selected but now unselected shape anyway, so using `AccessibleEventId::SELECTION_CHANGED_ADD` seems more consistent to me anyway. [1] https://learn.microsoft.com/en-us/windows/win32/winauto/event-constants Change-Id: I1525ed27434bbbb4cf181df2148669c7bc6850b9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/162518 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
Diffstat (limited to 'sw/source/core/access/accmap.cxx')
-rw-r--r--sw/source/core/access/accmap.cxx9
1 files changed, 1 insertions, 8 deletions
diff --git a/sw/source/core/access/accmap.cxx b/sw/source/core/access/accmap.cxx
index 38c9233ec018..bb0f209bb049 100644
--- a/sw/source/core/access/accmap.cxx
+++ b/sw/source/core/access/accmap.cxx
@@ -1495,7 +1495,6 @@ void SwAccessibleMap::DoInvalidateShapeSelection(bool bInvalidateFocusMode /*=fa
std::vector<::rtl::Reference<::accessibility::AccessibleShape>> vecxShapeAdd;
std::vector<::rtl::Reference<::accessibility::AccessibleShape>> vecxShapeRemove;
- int nCountSelectedShape=0;
vcl::Window *pWin = GetShell()->GetWin();
bool bFocused = pWin && pWin->HasFocus();
@@ -1545,7 +1544,6 @@ void SwAccessibleMap::DoInvalidateShapeSelection(bool bInvalidateFocusMode /*=fa
{
vecxShapeAdd.push_back(pShape->second);
}
- ++nCountSelectedShape;
}
}
@@ -1564,17 +1562,12 @@ void SwAccessibleMap::DoInvalidateShapeSelection(bool bInvalidateFocusMode /*=fa
}
else
{
- short nEventID = AccessibleEventId::SELECTION_CHANGED_ADD;
- if (nCountSelectedShape <= 1 && vecxShapeAdd.size() == 1 )
- {
- nEventID = AccessibleEventId::SELECTION_CHANGED;
- }
for (const auto& rpShape : vecxShapeAdd)
{
::accessibility::AccessibleShape *pAccShape = rpShape.get();
if (pAccShape)
{
- pAccShape->CommitChange(nEventID, uno::Any(), uno::Any(), -1);
+ pAccShape->CommitChange(AccessibleEventId::SELECTION_CHANGED_ADD, uno::Any(), uno::Any(), -1);
}
}
}