зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1730096 part 8: Move DefaultTextAttributes to HyperTextAccessibleBase and implement it for RemoteAccessible. r=eeejay
This patch includes ATK and XPCOM support. Differential Revision: https://phabricator.services.mozilla.com/D129474
This commit is contained in:
Родитель
6bd5ccff7d
Коммит
1563d99b94
|
@ -295,25 +295,18 @@ static AtkAttributeSet* getRunAttributesCB(AtkText* aText, gint aOffset,
|
|||
}
|
||||
|
||||
static AtkAttributeSet* getDefaultAttributesCB(AtkText* aText) {
|
||||
AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aText));
|
||||
if (accWrap) {
|
||||
HyperTextAccessible* text = accWrap->AsHyperText();
|
||||
if (!text || !text->IsTextRole()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
RefPtr<AccAttributes> attributes = text->DefaultTextAttributes();
|
||||
return ConvertToAtkTextAttributeSet(attributes);
|
||||
}
|
||||
|
||||
RemoteAccessible* proxy = GetProxy(ATK_OBJECT(aText));
|
||||
if (!proxy) {
|
||||
Accessible* acc = GetInternalObj(ATK_OBJECT(aText));
|
||||
if (!acc) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
RefPtr<AccAttributes> attrs;
|
||||
proxy->DefaultTextAttributes(&attrs);
|
||||
return ConvertToAtkTextAttributeSet(attrs);
|
||||
HyperTextAccessibleBase* text = acc->AsHyperTextBase();
|
||||
if (!text || !acc->IsTextRole()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
RefPtr<AccAttributes> attributes = text->DefaultTextAttributes();
|
||||
return ConvertToAtkTextAttributeSet(attributes);
|
||||
}
|
||||
|
||||
static void getCharacterExtentsCB(AtkText* aText, gint aOffset, gint* aX,
|
||||
|
|
|
@ -7,7 +7,6 @@
|
|||
|
||||
#include "AccAttributes.h"
|
||||
#include "mozilla/a11y/Accessible.h"
|
||||
#include "mozilla/a11y/HyperTextAccessible.h"
|
||||
#include "mozilla/StaticPrefs_accessibility.h"
|
||||
#include "nsAccUtils.h"
|
||||
#include "TextLeafRange.h"
|
||||
|
@ -311,10 +310,7 @@ already_AddRefed<AccAttributes> HyperTextAccessibleBase::TextAttributes(
|
|||
// default attributes if they were requested, otherwise return empty set.
|
||||
if (offset == 0) {
|
||||
if (aIncludeDefAttrs) {
|
||||
// XXX This will be adjusted when DefaultTextAttributes is unified.
|
||||
if (LocalAccessible* acc = Acc()->AsLocal()) {
|
||||
return acc->AsHyperText()->DefaultTextAttributes();
|
||||
}
|
||||
return DefaultTextAttributes();
|
||||
}
|
||||
}
|
||||
return RefPtr{new AccAttributes()}.forget();
|
||||
|
|
|
@ -133,6 +133,11 @@ class HyperTextAccessibleBase {
|
|||
int32_t* aStartOffset,
|
||||
int32_t* aEndOffset);
|
||||
|
||||
/**
|
||||
* Return text attributes applied to the accessible.
|
||||
*/
|
||||
virtual already_AddRefed<AccAttributes> DefaultTextAttributes() = 0;
|
||||
|
||||
protected:
|
||||
virtual const Accessible* Acc() const = 0;
|
||||
Accessible* Acc() {
|
||||
|
|
|
@ -181,10 +181,7 @@ class HyperTextAccessible : public AccessibleWrap,
|
|||
bool aIncludeDefAttrs, int32_t aOffset, int32_t* aStartOffset,
|
||||
int32_t* aEndOffset) override;
|
||||
|
||||
/**
|
||||
* Return text attributes applied to the accessible.
|
||||
*/
|
||||
already_AddRefed<AccAttributes> DefaultTextAttributes();
|
||||
virtual already_AddRefed<AccAttributes> DefaultTextAttributes() override;
|
||||
|
||||
// HyperTextAccessibleBase provides an overload which takes an Accessible.
|
||||
using HyperTextAccessibleBase::GetChildOffset;
|
||||
|
|
|
@ -430,6 +430,17 @@ RemoteAccessibleBase<Derived>::GetCachedTextAttributes() {
|
|||
return nullptr;
|
||||
}
|
||||
|
||||
template <class Derived>
|
||||
already_AddRefed<AccAttributes>
|
||||
RemoteAccessibleBase<Derived>::DefaultTextAttributes() {
|
||||
RefPtr<const AccAttributes> attrs = GetCachedTextAttributes();
|
||||
RefPtr<AccAttributes> result = new AccAttributes();
|
||||
if (attrs) {
|
||||
attrs->CopyTo(result);
|
||||
}
|
||||
return result.forget();
|
||||
}
|
||||
|
||||
template class RemoteAccessibleBase<RemoteAccessible>;
|
||||
|
||||
} // namespace a11y
|
||||
|
|
|
@ -234,6 +234,8 @@ class RemoteAccessibleBase : public Accessible, public HyperTextAccessibleBase {
|
|||
// XXX Implement this once it's cached.
|
||||
virtual int32_t CaretOffset() const override { return -1; }
|
||||
|
||||
virtual already_AddRefed<AccAttributes> DefaultTextAttributes() override;
|
||||
|
||||
protected:
|
||||
RemoteAccessibleBase(uint64_t aID, Derived* aParent,
|
||||
DocAccessibleParent* aDoc, role aRole, AccType aType,
|
||||
|
|
|
@ -94,8 +94,6 @@ void GetTextBeforeOffset(int32_t aOffset, AccessibleTextBoundary aBoundaryType,
|
|||
|
||||
char16_t CharAt(int32_t aOffset);
|
||||
|
||||
void DefaultTextAttributes(RefPtr<AccAttributes>* aAttrs);
|
||||
|
||||
nsIntRect TextBounds(
|
||||
int32_t aStartOffset, int32_t aEndOffset,
|
||||
uint32_t aCoordType =
|
||||
|
|
|
@ -239,8 +239,13 @@ already_AddRefed<AccAttributes> RemoteAccessible::TextAttributes(
|
|||
return attrs.forget();
|
||||
}
|
||||
|
||||
void RemoteAccessible::DefaultTextAttributes(RefPtr<AccAttributes>* aAttrs) {
|
||||
Unused << mDoc->SendDefaultTextAttributes(mID, aAttrs);
|
||||
already_AddRefed<AccAttributes> RemoteAccessible::DefaultTextAttributes() {
|
||||
if (StaticPrefs::accessibility_cache_enabled_AtStartup()) {
|
||||
return RemoteAccessibleBase<RemoteAccessible>::DefaultTextAttributes();
|
||||
}
|
||||
RefPtr<AccAttributes> attrs;
|
||||
Unused << mDoc->SendDefaultTextAttributes(mID, &attrs);
|
||||
return attrs.forget();
|
||||
}
|
||||
|
||||
nsIntRect RemoteAccessible::TextBounds(int32_t aStartOffset, int32_t aEndOffset,
|
||||
|
|
|
@ -39,6 +39,8 @@ class RemoteAccessible : public RemoteAccessibleBase<RemoteAccessible> {
|
|||
bool aIncludeDefAttrs, int32_t aOffset, int32_t* aStartOffset,
|
||||
int32_t* aEndOffset) override;
|
||||
|
||||
virtual already_AddRefed<AccAttributes> DefaultTextAttributes() override;
|
||||
|
||||
protected:
|
||||
explicit RemoteAccessible(DocAccessibleParent* aThisAsDoc)
|
||||
: RemoteAccessibleBase(aThisAsDoc) {
|
||||
|
|
|
@ -77,14 +77,9 @@ inline NSString* ToNSString(id aValue) {
|
|||
// grammar, or spelling. We query the attribute value here in order
|
||||
// to find the correct string to return.
|
||||
RefPtr<AccAttributes> attributes;
|
||||
if (LocalAccessible* acc = mGeckoAccessible->AsLocal()) {
|
||||
HyperTextAccessible* text = acc->AsHyperText();
|
||||
if (text && text->IsTextRole()) {
|
||||
attributes = text->DefaultTextAttributes();
|
||||
}
|
||||
} else {
|
||||
RemoteAccessible* proxy = mGeckoAccessible->AsRemote();
|
||||
proxy->DefaultTextAttributes(&attributes);
|
||||
HyperTextAccessibleBase* text = mGeckoAccessible->AsHyperTextBase();
|
||||
if (text && mGeckoAccessible->IsTextRole()) {
|
||||
attributes = text->DefaultTextAttributes();
|
||||
}
|
||||
|
||||
nsAutoString invalidStr;
|
||||
|
|
|
@ -195,11 +195,12 @@ xpcAccessibleHyperText::GetDefaultTextAttributes(
|
|||
|
||||
if (!mIntl) return NS_ERROR_FAILURE;
|
||||
|
||||
if (mIntl->IsRemote()) {
|
||||
if (mIntl->IsRemote() &&
|
||||
!StaticPrefs::accessibility_cache_enabled_AtStartup()) {
|
||||
return NS_ERROR_NOT_IMPLEMENTED;
|
||||
}
|
||||
|
||||
RefPtr<AccAttributes> attributes = IntlLocal()->DefaultTextAttributes();
|
||||
RefPtr<AccAttributes> attributes = Intl()->DefaultTextAttributes();
|
||||
RefPtr<nsPersistentProperties> props = new nsPersistentProperties();
|
||||
nsAutoString unused;
|
||||
for (auto iter : *attributes) {
|
||||
|
|
Загрузка…
Ссылка в новой задаче