sc/source/ui/Accessibility/AccessibleContextBase.cxx | 51 +- sc/source/ui/Accessibility/AccessibleDocument.cxx | 107 +----- sc/source/ui/Accessibility/AccessibleDocumentPagePreview.cxx | 71 ---- sc/source/ui/Accessibility/AccessiblePageHeader.cxx | 25 - sc/source/ui/Accessibility/AccessiblePageHeaderArea.cxx | 5 sc/source/ui/Accessibility/AccessiblePreviewTable.cxx | 5 sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx | 194 +++-------- sc/source/ui/Accessibility/AccessibleTableBase.cxx | 7 sc/source/ui/inc/AccessibleContextBase.hxx | 6 9 files changed, 145 insertions(+), 326 deletions(-)
New commits: commit b997fd92359c00bb91fd3d25bf992c4b3cd82543 Author: Michael Weghorn <m.wegh...@posteo.de> AuthorDate: Wed Apr 9 14:44:35 2025 +0200 Commit: Michael Weghorn <m.wegh...@posteo.de> CommitDate: Thu Apr 10 11:31:49 2025 +0200 sc a11y: Deduplicate code for AccessibleEventObject creation Change ScAccessibleContextBase::CommitChange from taking a `const AccessibleEventObject&` param to taking the parameters needed to create an AccessibleEventObject instead and create that event in ScAccessibleContextBase::CommitChange instead of having all callers do that themselves. This also aligns this with OAccessibleComponentHelper::NotifyAccessibleEvent and therefore prepares for turning ScAccessibleContextBase into an OAccessibleComponentHelper subclass in an upcoming commit, to further deduplicate XAccessibleEventBroadcaster and XAccessibleComponent implementations. For most cases, the event being created should be unchanged, with few exceptions for cases that looked a bit suspicious: 1) In ScAccessibleSpreadsheet::NotifyRefMode, a single event object was created and then reused multiple times, with just adjusting some of the members. While that is fine in general, the AccessibleEventObject::OldValue being set to the old/previous formula cell doesn't make sense for the AccessibleEventId::SELECTION_CHANGED_WITHIN and AccessibleEventId::SELECTION_CHANGED_ADD events, so it is no longer set there. (For other events, the doc in offapi/com/sun/star/accessibility/AccessibleEventId.idl also doesn't always document an `OldValue` to be set (or even says it should be empty), but at a quick glance, winaccessibility might still process it if set, so leave it in place for now. (This should potentially be revisited independently, not as part of a change like this that intends to not change behavior for end users.) 2) In ScAccessibleSpreadsheet::Notify, pass an empty/default-constructed uno::Any for the OldValue of the AccessibleEventId::ACTIVE_DESCENDANT_CHANGED_NOFOCUS event instead of an emtpy reference. The only handler in AccDescendantManagerEventListener::HandleChildChangedNoFocusEvent handles both the same way. Similar for any events further down where the OldValue would still be set as it's not explicitly unset. No change in user-observable behavior was noticed in a quick test of Calc with Orca and Accerciser and the gtk3 and qt6 VCL plugins on Linux with this commit in place. Change-Id: Ida3264b0935f544d4ce787b71684af148e47f86b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183931 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.wegh...@posteo.de> diff --git a/sc/source/ui/Accessibility/AccessibleContextBase.cxx b/sc/source/ui/Accessibility/AccessibleContextBase.cxx index 03b4b16a7fe3..99707cdd4517 100644 --- a/sc/source/ui/Accessibility/AccessibleContextBase.cxx +++ b/sc/source/ui/Accessibility/AccessibleContextBase.cxx @@ -284,15 +284,11 @@ OUString SAL_CALL if (msDescription != sDescription) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::DESCRIPTION_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - aEvent.OldValue <<= msDescription; - aEvent.NewValue <<= sDescription; - + const OUString sOldDescription = msDescription; msDescription = sDescription; - CommitChange(aEvent); + CommitChange(AccessibleEventId::DESCRIPTION_CHANGED, uno::Any(sOldDescription), + uno::Any(sDescription)); } } return msDescription; @@ -310,15 +306,10 @@ OUString SAL_CALL if (msName != sName) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::NAME_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - aEvent.OldValue <<= msName; - aEvent.NewValue <<= sName; - + const OUString sOldName = msName; msName = sName; - CommitChange(aEvent); + CommitChange(AccessibleEventId::NAME_CHANGED, uno::Any(sOldName), uno::Any(sName)); } } return msName; @@ -428,30 +419,32 @@ OUString ScAccessibleContextBase::createAccessibleName() return OUString(); } -void ScAccessibleContextBase::CommitChange(const AccessibleEventObject& rEvent) +void ScAccessibleContextBase::CommitChange(const sal_Int16 nEventId, const css::uno::Any& rOldValue, + const css::uno::Any& rNewValue, sal_Int32 nIndexHint) { - if (mnClientId) - comphelper::AccessibleEventNotifier::addEvent( mnClientId, rEvent ); -} + if (!mnClientId) + return; -void ScAccessibleContextBase::CommitFocusGained() -{ AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::STATE_CHANGED; aEvent.Source = uno::Reference<XAccessibleContext>(this); - aEvent.NewValue <<= AccessibleStateType::FOCUSED; + aEvent.EventId = nEventId; + aEvent.OldValue = rOldValue; + aEvent.NewValue = rNewValue; + aEvent.IndexHint = nIndexHint; - CommitChange(aEvent); + comphelper::AccessibleEventNotifier::addEvent(mnClientId, aEvent); } -void ScAccessibleContextBase::CommitFocusLost() +void ScAccessibleContextBase::CommitFocusGained() { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::STATE_CHANGED; - aEvent.Source = uno::Reference<XAccessibleContext>(this); - aEvent.OldValue <<= AccessibleStateType::FOCUSED; + CommitChange(AccessibleEventId::STATE_CHANGED, uno::Any(), + uno::Any(AccessibleStateType::FOCUSED)); +} - CommitChange(aEvent); +void ScAccessibleContextBase::CommitFocusLost() +{ + CommitChange(AccessibleEventId::STATE_CHANGED, uno::Any(AccessibleStateType::FOCUSED), + uno::Any()); } void ScAccessibleContextBase::IsObjectValid() const diff --git a/sc/source/ui/Accessibility/AccessibleDocument.cxx b/sc/source/ui/Accessibility/AccessibleDocument.cxx index 55e031c18dc7..42ba75f6433a 100644 --- a/sc/source/ui/Accessibility/AccessibleDocument.cxx +++ b/sc/source/ui/Accessibility/AccessibleDocument.cxx @@ -429,13 +429,10 @@ bool ScChildrenShapes::ReplaceChild (::accessibility::AccessibleShape* pCurrentC if (it != maShapesMap.end() && it->second->pAccShape.is()) { OSL_ENSURE(it->second->pAccShape == pCurrentChild, "wrong child found"); - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.Source = uno::Reference< XAccessibleContext >(mpAccessibleDocument); - aEvent.OldValue <<= uno::Reference<XAccessible>(pCurrentChild); - aEvent.IndexHint = -1; - - mpAccessibleDocument->CommitChange(aEvent); // child is gone - event + // child is gone - event + mpAccessibleDocument->CommitChange(AccessibleEventId::CHILD, + uno::Any(uno::Reference<XAccessible>(pCurrentChild)), + uno::Any()); pCurrentChild->dispose(); } @@ -447,13 +444,9 @@ bool ScChildrenShapes::ReplaceChild (::accessibility::AccessibleShape* pCurrentC if (it != maShapesMap.end()) { it->second->pAccShape = pReplacement; - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.Source = uno::Reference< XAccessibleContext >(mpAccessibleDocument); - aEvent.NewValue <<= uno::Reference<XAccessible>(pReplacement); - aEvent.IndexHint = -1; - - mpAccessibleDocument->CommitChange(aEvent); // child is new - event + // child is new - event + mpAccessibleDocument->CommitChange(AccessibleEventId::CHILD, uno::Any(), + uno::Any(uno::Reference<XAccessible>(pReplacement))); bResult = true; } } @@ -1070,36 +1063,27 @@ bool ScChildrenShapes::FindSelectedShapesChanges(const uno::Reference<drawing::X } if (vecSelectedShapeAdd.size() >= 10 ) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_WITHIN; - aEvent.Source = uno::Reference< XAccessible >(mpAccessibleDocument); - mpAccessibleDocument->CommitChange(aEvent); + mpAccessibleDocument->CommitChange(AccessibleEventId::SELECTION_CHANGED_WITHIN, uno::Any(), + uno::Any()); } else { for (const auto& rpShape : vecSelectedShapeAdd) { - AccessibleEventObject aEvent; + sal_Int16 nEventId; if (bHasSelect) - { - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_ADD; - } + nEventId = AccessibleEventId::SELECTION_CHANGED_ADD; else - { - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED; - } - aEvent.Source = uno::Reference< XAccessible >(mpAccessibleDocument); - aEvent.NewValue <<= uno::Reference< XAccessible >( rpShape->pAccShape ); - mpAccessibleDocument->CommitChange(aEvent); + nEventId = AccessibleEventId::SELECTION_CHANGED; + mpAccessibleDocument->CommitChange( + nEventId, uno::Any(), uno::Any(uno::Reference<XAccessible>(rpShape->pAccShape))); } } for (const auto& rpShape : vecSelectedShapeRemove) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_REMOVE; - aEvent.Source = uno::Reference< XAccessible >(mpAccessibleDocument); - aEvent.NewValue <<= uno::Reference< XAccessible >( rpShape->pAccShape ); - mpAccessibleDocument->CommitChange(aEvent); + mpAccessibleDocument->CommitChange( + AccessibleEventId::SELECTION_CHANGED_REMOVE, uno::Any(), + uno::Any(uno::Reference<XAccessible>(rpShape->pAccShape))); } for(ScAccessibleShapeData*& pShapeData : aShapesList) { @@ -1217,13 +1201,9 @@ void ScChildrenShapes::AddShape(const uno::Reference<drawing::XShape>& xShape, b } if (mpAccessibleDocument && bCommitChange) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.Source = uno::Reference< XAccessibleContext >(mpAccessibleDocument); - aEvent.NewValue <<= Get(pShape); - aEvent.IndexHint = -1; - - mpAccessibleDocument->CommitChange(aEvent); // new child - event + // new child - event + mpAccessibleDocument->CommitChange(AccessibleEventId::CHILD, uno::Any(), + uno::Any(Get(pShape))); } } @@ -1245,13 +1225,9 @@ void ScChildrenShapes::RemoveShape(const uno::Reference<drawing::XShape>& xShape maShapesMap.erase((*aItr)->xShape); maZOrderedShapes.erase(aItr); - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.Source = uno::Reference< XAccessibleContext >(mpAccessibleDocument); - aEvent.OldValue <<= xOldAccessible; - aEvent.IndexHint = -1; - - mpAccessibleDocument->CommitChange(aEvent); // child is gone - event + // child is gone - event + mpAccessibleDocument->CommitChange(AccessibleEventId::CHILD, uno::Any(xOldAccessible), + uno::Any()); } else { @@ -1478,10 +1454,8 @@ void ScAccessibleDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) // mpChildrenShapes variable. mpChildrenShapes.reset( new ScChildrenShapes( this, mpViewShell, meSplitPos ) ); - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::INVALIDATE_ALL_CHILDREN; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - CommitChange(aEvent); // all children changed + // all children changed + CommitChange(AccessibleEventId::INVALIDATE_ALL_CHILDREN, uno::Any(), uno::Any()); if (mpAccessibleSpreadsheet.is()) mpAccessibleSpreadsheet->GotFocus(); @@ -1548,11 +1522,7 @@ void ScAccessibleDocument::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) { if (maVisArea.GetSize() != aOldVisArea.GetSize()) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::BOUNDRECT_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - - CommitChange(aEvent); + CommitChange(AccessibleEventId::BOUNDRECT_CHANGED, uno::Any(), uno::Any()); if (mpAccessibleSpreadsheet.is()) mpAccessibleSpreadsheet->BoundingBoxChanged(); @@ -1589,13 +1559,7 @@ void SAL_CALL ScAccessibleDocument::selectionChanged( const lang::EventObject& / bSelectionChanged = true; if (bSelectionChanged) - { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - - CommitChange(aEvent); - } + CommitChange(AccessibleEventId::SELECTION_CHANGED, uno::Any(), uno::Any()); } //===== XInterface ===================================================== @@ -2132,12 +2096,8 @@ void ScAccessibleDocument::AddChild(const uno::Reference<XAccessible>& xAcc, boo mxTempAcc = xAcc; if( bFireEvent ) { - AccessibleEventObject aEvent; - aEvent.Source = uno::Reference<XAccessibleContext>(this); - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.NewValue <<= mxTempAcc; - aEvent.IndexHint = getAccessibleChildCount() - 1; - CommitChange( aEvent ); + CommitChange(AccessibleEventId::CHILD, uno::Any(), uno::Any(mxTempAcc), + getAccessibleChildCount() - 1); } } } @@ -2150,14 +2110,7 @@ void ScAccessibleDocument::RemoveChild(const uno::Reference<XAccessible>& xAcc, OSL_ENSURE(xAcc.get() == mxTempAcc.get(), "only the same object should be removed"); if( bFireEvent ) - { - AccessibleEventObject aEvent; - aEvent.Source = uno::Reference<XAccessibleContext>(this); - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.OldValue <<= mxTempAcc; - aEvent.IndexHint = -1; - CommitChange( aEvent ); - } + CommitChange(AccessibleEventId::CHILD, uno::Any(mxTempAcc), uno::Any()); mxTempAcc = nullptr; } diff --git a/sc/source/ui/Accessibility/AccessibleDocumentPagePreview.cxx b/sc/source/ui/Accessibility/AccessibleDocumentPagePreview.cxx index fa2c3d975d86..7d3d76f4862c 100644 --- a/sc/source/ui/Accessibility/AccessibleDocumentPagePreview.cxx +++ b/sc/source/ui/Accessibility/AccessibleDocumentPagePreview.cxx @@ -437,13 +437,8 @@ struct ScChildGone { if (mpAccDoc) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.Source = uno::Reference< XAccessibleContext >(mpAccDoc); - aEvent.OldValue <<= xAccessible; - aEvent.IndexHint = -1; - - mpAccDoc->CommitChange(aEvent); // gone child - event + // gone child - event + mpAccDoc->CommitChange(AccessibleEventId::CHILD, uno::Any(xAccessible), uno::Any()); } } }; @@ -456,13 +451,8 @@ struct ScChildNew { if (mpAccDoc) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.Source = uno::Reference< XAccessibleContext >(mpAccDoc); - aEvent.NewValue <<= xAccessible; - aEvent.IndexHint = -1; - - mpAccDoc->CommitChange(aEvent); // new child - event + // new child - event + mpAccDoc->CommitChange(AccessibleEventId::CHILD, uno::Any(), uno::Any(xAccessible)); } } }; @@ -721,46 +711,26 @@ void ScShapeChildren::FindChanged(ScShapeChildVec& rOld, ScShapeChildVec& rNew) else if (aNewItr->mxShape.get() < aOldItr->mxShape.get()) { xAcc = GetAccShape(*aNewItr); - AccessibleEventObject aEvent; - aEvent.Source = uno::Reference<XAccessibleContext> (mpAccDoc); - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.NewValue <<= xAcc; - aEvent.IndexHint = -1; - mpAccDoc->CommitChange(aEvent); + mpAccDoc->CommitChange(AccessibleEventId::CHILD, uno::Any(), uno::Any(xAcc)); ++aNewItr; } else { xAcc = GetAccShape(*aOldItr); - AccessibleEventObject aEvent; - aEvent.Source = uno::Reference<XAccessibleContext> (mpAccDoc); - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.OldValue <<= xAcc; - aEvent.IndexHint = -1; - mpAccDoc->CommitChange(aEvent); + mpAccDoc->CommitChange(AccessibleEventId::CHILD, uno::Any(xAcc), uno::Any()); ++aOldItr; } } while (aOldItr != aOldEnd) { xAcc = GetAccShape(*aOldItr); - AccessibleEventObject aEvent; - aEvent.Source = uno::Reference<XAccessibleContext> (mpAccDoc); - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.OldValue <<= xAcc; - aEvent.IndexHint = -1; - mpAccDoc->CommitChange(aEvent); + mpAccDoc->CommitChange(AccessibleEventId::CHILD, uno::Any(xAcc), uno::Any()); ++aOldItr; } while (aNewItr != aNewEnd) { xAcc = GetAccShape(*aNewItr); - AccessibleEventObject aEvent; - aEvent.Source = uno::Reference<XAccessibleContext> (mpAccDoc); - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.NewValue <<= xAcc; - aEvent.IndexHint = -1; - mpAccDoc->CommitChange(aEvent); + mpAccDoc->CommitChange(AccessibleEventId::CHILD, uno::Any(), uno::Any(xAcc)); ++aNewItr; } } @@ -1215,14 +1185,8 @@ void ScAccessibleDocumentPagePreview::Notify( SfxBroadcaster& rBC, const SfxHint // only notify if child exist, otherwise it is not necessary if (mpTable.is()) // if there is no table there is nothing to notify, because no one recognizes the change { - { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - aEvent.OldValue <<= uno::Reference<XAccessible>(mpTable); - aEvent.IndexHint = -1; - CommitChange(aEvent); - } + CommitChange(AccessibleEventId::CHILD, uno::Any(uno::Reference<XAccessible>(mpTable)), + uno::Any()); mpTable->dispose(); mpTable.clear(); @@ -1248,14 +1212,8 @@ void ScAccessibleDocumentPagePreview::Notify( SfxBroadcaster& rBC, const SfxHint mpTable = new ScAccessiblePreviewTable( this, mpViewShell, nIndex ); mpTable->Init(); - { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - aEvent.NewValue <<= uno::Reference<XAccessible>(mpTable); - aEvent.IndexHint = -1; - CommitChange(aEvent); - } + CommitChange(AccessibleEventId::CHILD, uno::Any(), + uno::Any(uno::Reference<XAccessible>(mpTable))); } } else if (rHint.GetId() == SfxHintId::ScAccVisAreaChanged) @@ -1269,10 +1227,7 @@ void ScAccessibleDocumentPagePreview::Notify( SfxBroadcaster& rBC, const SfxHint GetShapeChildren()->VisAreaChanged(); - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::VISIBLE_DATA_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - CommitChange(aEvent); + CommitChange(AccessibleEventId::VISIBLE_DATA_CHANGED, uno::Any(), uno::Any()); } ScAccessibleDocumentBase::Notify(rBC, rHint); } diff --git a/sc/source/ui/Accessibility/AccessiblePageHeader.cxx b/sc/source/ui/Accessibility/AccessiblePageHeader.cxx index dab5f2f89b3c..c7a3d4cf8297 100644 --- a/sc/source/ui/Accessibility/AccessiblePageHeader.cxx +++ b/sc/source/ui/Accessibility/AccessiblePageHeader.cxx @@ -107,34 +107,23 @@ void ScAccessiblePageHeader::Notify( SfxBroadcaster& rBC, const SfxHint& rHint ) { if (aOldAreas[i].is() && aOldAreas[i]->GetEditTextObject()) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - aEvent.OldValue <<= uno::Reference<XAccessible>(aOldAreas[i]); - aEvent.IndexHint = -1; - - CommitChange(aEvent); // child gone - event + // child gone - event + CommitChange(AccessibleEventId::CHILD, + uno::Any(uno::Reference<XAccessible>(aOldAreas[i])), uno::Any()); aOldAreas[i]->dispose(); } if (maAreas[i].is() && maAreas[i]->GetEditTextObject()) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::CHILD; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - aEvent.NewValue <<= uno::Reference<XAccessible>(maAreas[i]); - aEvent.IndexHint = -1; - - CommitChange(aEvent); // new child - event + // new child - event + CommitChange(AccessibleEventId::CHILD, uno::Any(), + uno::Any(uno::Reference<XAccessible>(maAreas[i]))); } } } } else if (rHint.GetId() == SfxHintId::ScAccVisAreaChanged) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::VISIBLE_DATA_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - CommitChange(aEvent); + CommitChange(AccessibleEventId::VISIBLE_DATA_CHANGED, uno::Any(), uno::Any()); } ScAccessibleContextBase::Notify(rBC, rHint); diff --git a/sc/source/ui/Accessibility/AccessiblePageHeaderArea.cxx b/sc/source/ui/Accessibility/AccessiblePageHeaderArea.cxx index 4881e2a8ce60..845cdbc5d884 100644 --- a/sc/source/ui/Accessibility/AccessiblePageHeaderArea.cxx +++ b/sc/source/ui/Accessibility/AccessiblePageHeaderArea.cxx @@ -89,10 +89,7 @@ void ScAccessiblePageHeaderArea::Notify( SfxBroadcaster& rBC, const SfxHint& rHi if (mpTextHelper) mpTextHelper->UpdateChildren(); - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::VISIBLE_DATA_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - CommitChange(aEvent); + CommitChange(AccessibleEventId::VISIBLE_DATA_CHANGED, uno::Any(), uno::Any()); } ScAccessibleContextBase::Notify(rBC, rHint); } diff --git a/sc/source/ui/Accessibility/AccessiblePreviewTable.cxx b/sc/source/ui/Accessibility/AccessiblePreviewTable.cxx index 5dfc06ca063b..791c3a7d7836 100644 --- a/sc/source/ui/Accessibility/AccessiblePreviewTable.cxx +++ b/sc/source/ui/Accessibility/AccessiblePreviewTable.cxx @@ -91,10 +91,7 @@ void ScAccessiblePreviewTable::Notify( SfxBroadcaster& rBC, const SfxHint& rHint } else if (nId == SfxHintId::ScAccVisAreaChanged) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::VISIBLE_DATA_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - CommitChange(aEvent); + CommitChange(AccessibleEventId::VISIBLE_DATA_CHANGED, uno::Any(), uno::Any()); } ScAccessibleContextBase::Notify(rBC, rHint); diff --git a/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx b/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx index 239341d36f7c..a98ac677605e 100644 --- a/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx +++ b/sc/source/ui/Accessibility/AccessibleSpreadsheet.cxx @@ -329,35 +329,26 @@ void ScAccessibleSpreadsheet::CompleteSelectionChanged(bool bNewState) } mpMarkedRanges.reset(); - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::STATE_CHANGED; + uno::Any aOldValue; + uno::Any aNewValue; if (bNewState) - aEvent.NewValue <<= AccessibleStateType::SELECTED; + aNewValue <<= AccessibleStateType::SELECTED; else - aEvent.OldValue <<= AccessibleStateType::SELECTED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - - CommitChange(aEvent); + aOldValue <<= AccessibleStateType::SELECTED; + CommitChange(AccessibleEventId::STATE_CHANGED, aOldValue, aNewValue); } void ScAccessibleSpreadsheet::LostFocus() { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - aEvent.OldValue <<= uno::Reference<XAccessible>(mpAccCell); - - CommitChange(aEvent); - + CommitChange(AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, + uno::Any(uno::Reference<XAccessible>(mpAccCell)), uno::Any()); CommitFocusLost(); } void ScAccessibleSpreadsheet::GotFocus() { CommitFocusGained(); - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); + uno::Reference< XAccessible > xNew; if (IsFormulaMode()) { @@ -384,27 +375,18 @@ void ScAccessibleSpreadsheet::GotFocus() return ; } } - aEvent.NewValue <<= xNew; - CommitChange(aEvent); + CommitChange(AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, uno::Any(), uno::Any(xNew)); } void ScAccessibleSpreadsheet::BoundingBoxChanged() { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::BOUNDRECT_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - - CommitChange(aEvent); + CommitChange(AccessibleEventId::BOUNDRECT_CHANGED, uno::Any(), uno::Any()); } void ScAccessibleSpreadsheet::VisAreaChanged() { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::VISIBLE_DATA_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - - CommitChange(aEvent); + CommitChange(AccessibleEventId::VISIBLE_DATA_CHANGED, uno::Any(), uno::Any()); } //===== SfxListener ===================================================== @@ -477,13 +459,8 @@ void ScAccessibleSpreadsheet::Notify( SfxBroadcaster& rBC, const SfxHint& rHint } CommitTableModelChange(nFirstRow, nFirstCol, nLastRow, nLastCol, nId); - - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - aEvent.NewValue <<= uno::Reference<XAccessible>(mpAccCell); - - CommitChange(aEvent); + CommitChange(AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, uno::Any(), + uno::Any(uno::Reference<XAccessible>(mpAccCell))); } } } @@ -511,18 +488,16 @@ void ScAccessibleSpreadsheet::Notify( SfxBroadcaster& rBC, const SfxHint& rHint } m_bFormulaLastMode = m_bFormulaMode; - AccessibleEventObject aEvent; - aEvent.Source = uno::Reference< XAccessible >(this); ScAddress aNewCell = rViewData.GetCurPos(); if(aNewCell.Tab() != maActiveCell.Tab()) { - aEvent.EventId = AccessibleEventId::PAGE_CHANGED; auto pAccParent = getAccessibleParent(); ScAccessibleDocument *pAccDoc = static_cast<ScAccessibleDocument*>(pAccParent.get()); if(pAccDoc) { - pAccDoc->CommitChange(aEvent); + pAccDoc->CommitChange(AccessibleEventId::PAGE_CHANGED, uno::Any(), + uno::Any()); } } bool bNewPosCell = (aNewCell != maActiveCell) || mpViewShell->GetForceFocusOnCurCell(); // #i123629# @@ -540,16 +515,14 @@ void ScAccessibleSpreadsheet::Notify( SfxBroadcaster& rBC, const SfxHint& rHint // sal_Bool bNewCellSelected = isAccessibleSelected(aNewCell.Row(), aNewCell.Col()); sal_uInt16 nTab = rViewData.GetTabNo(); const ScRange& aMarkRange = refScMarkData.GetMarkArea(); - aEvent.OldValue.clear(); ScDocument* pDoc= GetDocument(mpViewShell); //Mark All if ( !bNewPosCellFocus && (bNewMarked || bIsMark || bIsMultMark ) && aMarkRange == ScRange( 0,0,nTab, pDoc->MaxCol(),pDoc->MaxRow(),nTab ) ) { - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_WITHIN; - aEvent.NewValue.clear(); - CommitChange(aEvent); + CommitChange(AccessibleEventId::SELECTION_CHANGED_WITHIN, uno::Any(), + uno::Any()); return ; } if (!mpMarkedRanges) @@ -578,11 +551,8 @@ void ScAccessibleSpreadsheet::Notify( SfxBroadcaster& rBC, const SfxHint& rHint !aMarkRange.Contains(m_aLastWithInMarkRange) && aMarkRange.Intersects(m_aLastWithInMarkRange); if( !bSelSmaller ) - { - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_WITHIN; - aEvent.NewValue.clear(); - CommitChange(aEvent); - } + CommitChange(AccessibleEventId::SELECTION_CHANGED_WITHIN, uno::Any(), + uno::Any()); m_aLastWithInMarkRange = aMarkRange; } return ; @@ -608,14 +578,11 @@ void ScAccessibleSpreadsheet::Notify( SfxBroadcaster& rBC, const SfxHint& rHint xChild = mpAccCell; maActiveCell = aNewCell; - aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED_NOFOCUS; - aEvent.NewValue <<= uno::Reference< XAccessible >(xChild); - aEvent.OldValue <<= uno::Reference< XAccessible >(); - CommitChange(aEvent); + CommitChange(AccessibleEventId::ACTIVE_DESCENDANT_CHANGED_NOFOCUS, + uno::Any(), uno::Any(uno::Reference<XAccessible>(xChild))); } - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED; - aEvent.NewValue <<= uno::Reference< XAccessible >(xChild); - CommitChange(aEvent); + CommitChange(AccessibleEventId::SELECTION_CHANGED, uno::Any(), + uno::Any(uno::Reference<XAccessible>(xChild))); OSL_ASSERT(m_mapSelectionSend.count(aNewCell) == 0 ); m_mapSelectionSend.emplace(aNewCell,xChild); @@ -637,9 +604,8 @@ void ScAccessibleSpreadsheet::Notify( SfxBroadcaster& rBC, const SfxHint& rHint std::vector<ScMyAddress> vecNew; if(CalcScRangeListDifferenceMax(mpMarkedRanges.get(), &m_LastMarkedRanges,10,vecNew)) { - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_WITHIN; - aEvent.NewValue.clear(); - CommitChange(aEvent); + CommitChange(AccessibleEventId::SELECTION_CHANGED_WITHIN, uno::Any(), + uno::Any()); } else { @@ -648,13 +614,12 @@ void ScAccessibleSpreadsheet::Notify( SfxBroadcaster& rBC, const SfxHint& rHint rtl::Reference< ScAccessibleCell > xChild = GetAccessibleCellAt(rAddr.Row(),rAddr.Col()); if (!(bNewPosCellFocus && rAddr == aNewCell) ) { - aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED_NOFOCUS; - aEvent.NewValue <<= uno::Reference< XAccessible >(xChild); - CommitChange(aEvent); + CommitChange( + AccessibleEventId::ACTIVE_DESCENDANT_CHANGED_NOFOCUS, + uno::Any(), uno::Any(uno::Reference<XAccessible>(xChild))); } - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_ADD; - aEvent.NewValue <<= uno::Reference< XAccessible >(xChild); - CommitChange(aEvent); + CommitChange(AccessibleEventId::SELECTION_CHANGED_ADD, uno::Any(), + uno::Any(uno::Reference<XAccessible>(xChild))); m_mapSelectionSend.emplace(rAddr,xChild); } } @@ -685,18 +650,17 @@ void ScAccessibleSpreadsheet::Notify( SfxBroadcaster& rBC, const SfxHint& rHint OUString valStr(pScDoc->GetString(aNewCell.Col(),aNewCell.Row(),aNewCell.Tab())); if(mpAccCell.is() && m_strCurCellValue != valStr) { - AccessibleEventObject aTextChangedEvent; - (void)comphelper::OCommonAccessibleText::implInitTextChangedEvent(m_strCurCellValue, valStr, - aTextChangedEvent.OldValue, - aTextChangedEvent.NewValue); - aTextChangedEvent.EventId = AccessibleEventId::TEXT_CHANGED; - mpAccCell->CommitChange(aTextChangedEvent); + uno::Any aOldValue; + uno::Any aNewValue; + (void)comphelper::OCommonAccessibleText::implInitTextChangedEvent( + m_strCurCellValue, valStr, aOldValue, aNewValue); + mpAccCell->CommitChange(AccessibleEventId::TEXT_CHANGED, aOldValue, + aNewValue); if (pScDoc->HasValueData(maActiveCell)) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::VALUE_CHANGED; - mpAccCell->CommitChange(aEvent); + mpAccCell->CommitChange(AccessibleEventId::VALUE_CHANGED, + uno::Any(), uno::Any()); } m_strCurCellValue = valStr; @@ -705,15 +669,12 @@ void ScAccessibleSpreadsheet::Notify( SfxBroadcaster& rBC, const SfxHint& rHint pScDoc->GetName( maActiveCell.Tab(), tabName ); if( m_strOldTabName != tabName ) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::NAME_CHANGED; OUString sOldName(ScResId(STR_ACC_TABLE_NAME)); sOldName = sOldName.replaceFirst("%1", m_strOldTabName); - aEvent.OldValue <<= sOldName; OUString sNewName(ScResId(STR_ACC_TABLE_NAME)); sNewName = sNewName.replaceFirst("%1", tabName); - aEvent.NewValue <<= sNewName; - CommitChange( aEvent ); + CommitChange(AccessibleEventId::NAME_CHANGED, uno::Any(sOldName), + uno::Any(sNewName)); m_strOldTabName = tabName; } } @@ -745,8 +706,6 @@ void ScAccessibleSpreadsheet::Notify( SfxBroadcaster& rBC, const SfxHint& rHint void ScAccessibleSpreadsheet::RemoveSelection(const ScMarkData &refScMarkData) { - AccessibleEventObject aEvent; - aEvent.Source = uno::Reference< XAccessible >(this); MAP_ADDR_XACC::iterator miRemove = m_mapSelectionSend.begin(); while (miRemove != m_mapSelectionSend.end()) { @@ -756,9 +715,8 @@ void ScAccessibleSpreadsheet::RemoveSelection(const ScMarkData &refScMarkData) ++miRemove; continue; } - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_REMOVE; - aEvent.NewValue <<= uno::Reference< XAccessible >(miRemove->second); - CommitChange(aEvent); + CommitChange(AccessibleEventId::SELECTION_CHANGED_REMOVE, uno::Any(), + uno::Any(uno::Reference<XAccessible>(miRemove->second))); miRemove = m_mapSelectionSend.erase(miRemove); } } @@ -786,37 +744,31 @@ void ScAccessibleSpreadsheet::CommitFocusCell(const ScAddress &aNewCell) OUString valStr(pScDoc->GetString(aOldActiveCell.Col(),aOldActiveCell.Row(),aOldActiveCell.Tab())); if(m_strCurCellValue != valStr) { - AccessibleEventObject aTextChangedEvent; - (void)comphelper::OCommonAccessibleText::implInitTextChangedEvent(m_strCurCellValue, valStr, - aTextChangedEvent.OldValue, - aTextChangedEvent.NewValue); - aTextChangedEvent.EventId = AccessibleEventId::TEXT_CHANGED; - mpAccCell->CommitChange(aTextChangedEvent); + uno::Any aOldValue; + uno::Any aNewValue; + (void)comphelper::OCommonAccessibleText::implInitTextChangedEvent( + m_strCurCellValue, valStr, aOldValue, aNewValue); + mpAccCell->CommitChange(AccessibleEventId::TEXT_CHANGED, aOldValue, aNewValue); if (pScDoc->HasValueData(maActiveCell)) { - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::VALUE_CHANGED; - mpAccCell->CommitChange(aEvent); + mpAccCell->CommitChange(AccessibleEventId::VALUE_CHANGED, uno::Any(), uno::Any()); } m_strCurCellValue = valStr; } } - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED; - aEvent.Source = uno::Reference< XAccessible >(this); - aEvent.OldValue <<= uno::Reference<XAccessible>(mpAccCell); + uno::Reference<XAccessible> xOldCell = mpAccCell; mpAccCell.clear(); mpAccCell = GetAccessibleCellAt(aNewCell.Row(), aNewCell.Col()); - aEvent.NewValue <<= uno::Reference<XAccessible>(mpAccCell); maActiveCell = aNewCell; if (pScDoc) { m_strCurCellValue = pScDoc->GetString(maActiveCell.Col(),maActiveCell.Row(),maActiveCell.Tab()); } - CommitChange(aEvent); + CommitChange(AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, uno::Any(xOldCell), + uno::Any(uno::Reference<XAccessible>(mpAccCell))); } //===== XAccessibleTable ================================================ @@ -1531,11 +1483,8 @@ void ScAccessibleSpreadsheet::FireFirstCellFocus() return ; } mbIsFocusSend = true; - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED; - aEvent.Source = uno::Reference< XAccessible >(this); - aEvent.NewValue <<= getAccessibleCellAt(maActiveCell.Row(), maActiveCell.Col()); - CommitChange(aEvent); + CommitChange(AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, uno::Any(), + uno::Any(getAccessibleCellAt(maActiveCell.Row(), maActiveCell.Col()))); } void ScAccessibleSpreadsheet::NotifyRefMode() @@ -1561,19 +1510,16 @@ void ScAccessibleSpreadsheet::NotifyRefMode() m_nMinY = std::min(nRefStartY,nRefEndY); m_nMaxY = std::max(nRefStartY,nRefEndY); RemoveFormulaSelection(); - AccessibleEventObject aEvent; - aEvent.Source = uno::Reference< XAccessible >(this); - aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED; - aEvent.OldValue <<= uno::Reference<XAccessible>(m_pAccFormulaCell); + uno::Reference<XAccessible> xOldFormulaCell = m_pAccFormulaCell; m_pAccFormulaCell = GetAccessibleCellAt(aFormulaAddr.Row(), aFormulaAddr.Col()); rtl::Reference< ScAccessibleCell > xNew = m_pAccFormulaCell; - aEvent.NewValue <<= uno::Reference< XAccessible >(xNew); - CommitChange(aEvent); + CommitChange(AccessibleEventId::ACTIVE_DESCENDANT_CHANGED, uno::Any(xOldFormulaCell), + uno::Any(uno::Reference<XAccessible>(xNew))); + if (nRefStartX == nRefEndX && nRefStartY == nRefEndY) {//Selection Single - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED; - aEvent.NewValue <<= uno::Reference< XAccessible >(xNew); - CommitChange(aEvent); + CommitChange(AccessibleEventId::SELECTION_CHANGED, uno::Any(xOldFormulaCell), + uno::Any(uno::Reference<XAccessible>(xNew))); m_mapFormulaSelectionSend.emplace(aFormulaAddr,xNew); m_vecFormulaLastMyAddr.clear(); m_vecFormulaLastMyAddr.emplace_back(aFormulaAddr); @@ -1599,9 +1545,7 @@ void ScAccessibleSpreadsheet::NotifyRefMode() int nNewSize = vecNew.size(); if ( nNewSize > 10 ) { - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_WITHIN; - aEvent.NewValue.clear(); - CommitChange(aEvent); + CommitChange(AccessibleEventId::SELECTION_CHANGED_WITHIN, uno::Any(), uno::Any()); } else { @@ -1615,13 +1559,12 @@ void ScAccessibleSpreadsheet::NotifyRefMode() else { xChild = GetAccessibleCellAt(rAddr.Row(),rAddr.Col()); - aEvent.EventId = AccessibleEventId::ACTIVE_DESCENDANT_CHANGED_NOFOCUS; - aEvent.NewValue <<= uno::Reference< XAccessible >(xChild); - CommitChange(aEvent); + CommitChange(AccessibleEventId::ACTIVE_DESCENDANT_CHANGED_NOFOCUS, + uno::Any(xOldFormulaCell), + uno::Any(uno::Reference<XAccessible>(xChild))); } - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_ADD; - aEvent.NewValue <<= uno::Reference< XAccessible >(xChild); - CommitChange(aEvent); + CommitChange(AccessibleEventId::SELECTION_CHANGED_ADD, uno::Any(), + uno::Any(uno::Reference<XAccessible>(xChild))); m_mapFormulaSelectionSend.emplace(rAddr,xChild); } } @@ -1633,8 +1576,6 @@ void ScAccessibleSpreadsheet::NotifyRefMode() void ScAccessibleSpreadsheet::RemoveFormulaSelection(bool bRemoveAll ) { - AccessibleEventObject aEvent; - aEvent.Source = uno::Reference< XAccessible >(this); auto miRemove = m_mapFormulaSelectionSend.begin(); while (miRemove != m_mapFormulaSelectionSend.end()) { @@ -1643,9 +1584,8 @@ void ScAccessibleSpreadsheet::RemoveFormulaSelection(bool bRemoveAll ) ++miRemove; continue; } - aEvent.EventId = AccessibleEventId::SELECTION_CHANGED_REMOVE; - aEvent.NewValue <<= uno::Reference< XAccessible >(miRemove->second); - CommitChange(aEvent); + CommitChange(AccessibleEventId::SELECTION_CHANGED_REMOVE, uno::Any(), + uno::Any(uno::Reference<XAccessible>(miRemove->second))); miRemove = m_mapFormulaSelectionSend.erase(miRemove); } } diff --git a/sc/source/ui/Accessibility/AccessibleTableBase.cxx b/sc/source/ui/Accessibility/AccessibleTableBase.cxx index a40bb7e22245..316b92567182 100644 --- a/sc/source/ui/Accessibility/AccessibleTableBase.cxx +++ b/sc/source/ui/Accessibility/AccessibleTableBase.cxx @@ -435,12 +435,7 @@ void ScAccessibleTableBase::CommitTableModelChange(sal_Int32 nStartRow, sal_Int3 aModelChange.LastColumn = nEndCol; aModelChange.Type = nId; - AccessibleEventObject aEvent; - aEvent.EventId = AccessibleEventId::TABLE_MODEL_CHANGED; - aEvent.Source = uno::Reference< XAccessibleContext >(this); - aEvent.NewValue <<= aModelChange; - - CommitChange(aEvent); + CommitChange(AccessibleEventId::TABLE_MODEL_CHANGED, uno::Any(), uno::Any(aModelChange)); } sal_Bool SAL_CALL ScAccessibleTableBase::selectRow( sal_Int32 ) diff --git a/sc/source/ui/inc/AccessibleContextBase.hxx b/sc/source/ui/inc/AccessibleContextBase.hxx index 24bbc903d835..ed6bee6b3277 100644 --- a/sc/source/ui/inc/AccessibleContextBase.hxx +++ b/sc/source/ui/inc/AccessibleContextBase.hxx @@ -193,9 +193,9 @@ protected: virtual tools::Rectangle GetBoundingBox() const = 0; public: - /// Calls all Listener to tell they the change. - void - CommitChange(const css::accessibility::AccessibleEventObject& rEvent); + /// Calls all listeners to notify them about the change. + void CommitChange(const sal_Int16 nEventId, const css::uno::Any& rOldValue, + const css::uno::Any& rNewValue, sal_Int32 nIndexHint = -1); /// Use this method to set initial Name without notification void SetName(const OUString& rName) { msName = rName; }