Bug 1951573 part 3: Implement HyperTextAccessibleBase::SetCaretOffset using TextLeafRange::SetSelection. r=eeejay

TextLeafRange::SetSelection should now be the one place where all text selections are set.
Previously, we had a separate local implementation for SetCaretOffset which differed slightly from using TextLeafRange::SetSelection.
Now, these should be equivalent, so there's no need for this separate local implementation.

Differential Revision: https://phabricator.services.mozilla.com/D240276
This commit is contained in:
James Teh
2025-03-05 23:42:51 +00:00
parent 4c17052376
commit 4c4cebf7e8
10 changed files with 11 additions and 36 deletions

View File

@@ -95,14 +95,6 @@ class SelectionManager : public nsISelectionListener {
return mAccWithCaret;
}
/**
* Update caret offset when it doesn't go through a caret move event.
*/
inline void UpdateCaretOffset(HyperTextAccessible* aItem, int32_t aOffset) {
mAccWithCaret = aItem;
mCaretOffset = aOffset;
}
inline void ResetCaretOffset() {
mCaretOffset = -1;
mAccWithCaret = nullptr;

View File

@@ -629,6 +629,16 @@ int32_t HyperTextAccessibleBase::CaretOffset() const {
return htOffset;
}
void HyperTextAccessibleBase::SetCaretOffset(int32_t aOffset) {
TextLeafPoint point = ToTextLeafPoint(aOffset);
TextLeafRange range(point, point);
if (!range) {
NS_ERROR("Wrong in offset");
return;
}
range.SetSelection(TextLeafRange::kRemoveAllExistingSelectedRanges);
}
int32_t HyperTextAccessibleBase::CaretLineNumber() {
TextLeafPoint point = TextLeafPoint::GetCaret(const_cast<Accessible*>(Acc()));
if (point.mOffset == 0 && point.mAcc == Acc()) {

View File

@@ -82,7 +82,7 @@ class HyperTextAccessibleBase {
* Get/set caret offset, if no caret then -1.
*/
virtual int32_t CaretOffset() const;
virtual void SetCaretOffset(int32_t aOffset) = 0;
MOZ_CAN_RUN_SCRIPT_BOUNDARY virtual void SetCaretOffset(int32_t aOffset);
/**
* Provide the line number for the caret.

View File

@@ -18,13 +18,6 @@
namespace mozilla::a11y {
inline void HyperTextAccessible::SetCaretOffset(int32_t aOffset) {
SetSelectionRange(aOffset, aOffset);
// XXX: Force cache refresh until a good solution for AT emulation of user
// input is implemented (AccessFu caret movement).
SelectionMgr()->UpdateCaretOffset(this, aOffset);
}
inline already_AddRefed<nsFrameSelection> HyperTextAccessible::FrameSelection()
const {
nsIFrame* frame = GetFrame();

View File

@@ -144,7 +144,6 @@ class HyperTextAccessible : public AccessibleWrap,
* Get/set caret offset, if no caret then -1.
*/
virtual int32_t CaretOffset() const override;
virtual void SetCaretOffset(int32_t aOffset) override;
/**
* Return the caret rect and the widget containing the caret within this

View File

@@ -261,15 +261,6 @@ mozilla::ipc::IPCResult DocAccessibleChild::RecvDoActionAsync(
return IPC_OK();
}
mozilla::ipc::IPCResult DocAccessibleChild::RecvSetCaretOffset(
const uint64_t& aID, const int32_t& aOffset) {
HyperTextAccessible* acc = IdToHyperTextAccessible(aID);
if (acc && acc->IsTextRole() && acc->IsValidOffset(aOffset)) {
acc->SetCaretOffset(aOffset);
}
return IPC_OK();
}
mozilla::ipc::IPCResult DocAccessibleChild::RecvSetTextSelection(
const uint64_t& aStartID, const int32_t& aStartOffset,
const uint64_t& aEndID, const int32_t& aEndOffset,

View File

@@ -93,9 +93,6 @@ class DocAccessibleChild : public PDocAccessibleChild {
virtual mozilla::ipc::IPCResult RecvDoActionAsync(
const uint64_t& aID, const uint8_t& aIndex) override;
virtual mozilla::ipc::IPCResult RecvSetCaretOffset(
const uint64_t& aID, const int32_t& aOffset) override;
MOZ_CAN_RUN_SCRIPT_BOUNDARY
virtual mozilla::ipc::IPCResult RecvSetTextSelection(
const uint64_t& aStartID, const int32_t& aStartOffset,

View File

@@ -157,8 +157,6 @@ child:
// AccessibleText
async SetCaretOffset(uint64_t aID, int32_t aOffset);
async SetTextSelection(uint64_t aStartID, int32_t aStartOffset,
uint64_t aEndID, int32_t aEndOffset,
int32_t aSelectionNum);

View File

@@ -2325,10 +2325,6 @@ nsTArray<int32_t>& RemoteAccessible::GetCachedHyperTextOffsets() {
CacheKey::HyperTextOffsets);
}
void RemoteAccessible::SetCaretOffset(int32_t aOffset) {
Unused << mDoc->SendSetCaretOffset(mID, aOffset);
}
Maybe<int32_t> RemoteAccessible::GetIntARIAAttr(nsAtom* aAttrName) const {
if (RequestDomainsIfInactive(CacheDomain::ARIA)) {
return Nothing();

View File

@@ -274,7 +274,6 @@ class RemoteAccessible : public Accessible, public HyperTextAccessibleBase {
virtual void TakeFocus() const override;
virtual void ScrollTo(uint32_t aHow) const override;
virtual void SetCaretOffset(int32_t aOffset) override;
/**
* Allow the platform to store a pointers worth of data on us.