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:
@@ -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;
|
||||
|
||||
@@ -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()) {
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user