void SelectionManager::ProcessSelectionChanged(nsISelection* aSelection) { Selection* selection = static_cast<Selection*>(aSelection); const nsRange* range = selection->GetAnchorFocusRange(); nsINode* cntrNode = nullptr; if (range) cntrNode = range->GetCommonAncestor(); if (!cntrNode) { cntrNode = selection->GetFrameSelection()->GetAncestorLimiter(); if (!cntrNode) { cntrNode = selection->GetPresShell()->GetDocument(); NS_ASSERTION(selection->GetPresShell()->ConstFrameSelection() == selection->GetFrameSelection(), "Wrong selection container was used!"); } } HyperTextAccessible* text = nsAccUtils::GetTextContainer(cntrNode); if (!text) { NS_NOTREACHED("We must reach document accessible implementing text interface!"); return; } if (selection->GetType() == nsISelectionController::SELECTION_NORMAL) { nsRefPtr<AccEvent> event = new AccTextSelChangeEvent(text, aSelection); text->Document()->FireDelayedEvent(event); } else if (selection->GetType() == nsISelectionController::SELECTION_SPELLCHECK) { // XXX: fire an event for container accessible of the focus/anchor range // of the spelcheck selection. text->Document()->FireDelayedEvent(nsIAccessibleEvent::EVENT_TEXT_ATTRIBUTE_CHANGED, text); } }
void SelectionManager::ProcessSelectionChanged(SelData* aSelData) { Selection* selection = aSelData->mSel; if (!selection->GetPresShell()) return; const nsRange* range = selection->GetAnchorFocusRange(); nsINode* cntrNode = nullptr; if (range) cntrNode = range->GetCommonAncestor(); if (!cntrNode) { cntrNode = selection->GetFrameSelection()->GetAncestorLimiter(); if (!cntrNode) { cntrNode = selection->GetPresShell()->GetDocument(); NS_ASSERTION(aSelData->mSel->GetPresShell()->ConstFrameSelection() == selection->GetFrameSelection(), "Wrong selection container was used!"); } } HyperTextAccessible* text = nsAccUtils::GetTextContainer(cntrNode); if (!text) { // FIXME bug 1126649 NS_ERROR("We must reach document accessible implementing text interface!"); return; } if (selection->GetType() == SelectionType::eNormal) { RefPtr<AccEvent> event = new AccTextSelChangeEvent(text, selection, aSelData->mReason); text->Document()->FireDelayedEvent(event); } else if (selection->GetType() == SelectionType::eSpellCheck) { // XXX: fire an event for container accessible of the focus/anchor range // of the spelcheck selection. text->Document()->FireDelayedEvent( nsIAccessibleEvent::EVENT_TEXT_ATTRIBUTE_CHANGED, text); } }
void SelectionManager::SpellcheckSelectionChanged(nsISelection* aSelection) { // XXX: fire an event for accessible of focus node of the selection. If // spellchecking is enabled then we will fire the number of events for // the same accessible for newly appended range of the selection (for every // misspelled word). If spellchecking is disabled (for example, // @spellcheck="false" on html:body) then we won't fire any event. HyperTextAccessible* hyperText = nsAccUtils::GetTextAccessibleFromSelection(aSelection); if (hyperText) { hyperText->Document()-> FireDelayedEvent(nsIAccessibleEvent::EVENT_TEXT_ATTRIBUTE_CHANGED, hyperText); } }
void nsCaretAccessible::SpellcheckSelectionChanged(nsISelection* aSelection) { // XXX: fire an event for accessible of focus node of the selection. If // spellchecking is enabled then we will fire the number of events for // the same accessible for newly appended range of the selection (for every // misspelled word). If spellchecking is disabled (for example, // @spellcheck="false" on html:body) then we won't fire any event. HyperTextAccessible* textAcc = nsAccUtils::GetTextAccessibleFromSelection(aSelection); if (!textAcc) return; nsRefPtr<AccEvent> event = new AccEvent(nsIAccessibleEvent::EVENT_TEXT_ATTRIBUTE_CHANGED, textAcc); if (event) textAcc->Document()->FireDelayedAccessibleEvent(event); }