diff --git a/accessible/generic/LocalAccessible.h b/accessible/generic/LocalAccessible.h index 9a4bb6f49826..05522f6c482f 100644 --- a/accessible/generic/LocalAccessible.h +++ b/accessible/generic/LocalAccessible.h @@ -511,6 +511,8 @@ class LocalAccessible : public nsISupports, public Accessible { ////////////////////////////////////////////////////////////////////////////// // ActionAccessible + virtual bool HasPrimaryAction() const override; + virtual uint8_t ActionCount() const override; virtual void ActionNameAt(uint8_t aIndex, nsAString& aName) override; @@ -981,8 +983,6 @@ class LocalAccessible : public nsISupports, public Accessible { virtual AccGroupInfo* GetOrCreateGroupInfo() override; - virtual bool HasPrimaryAction() const override; - virtual void ARIAGroupPosition(int32_t* aLevel, int32_t* aSetSize, int32_t* aPosInSet) const override; diff --git a/accessible/ipc/DocAccessibleChildBase.cpp b/accessible/ipc/DocAccessibleChildBase.cpp index 0a4655aaf9db..fe8eb8a50d36 100644 --- a/accessible/ipc/DocAccessibleChildBase.cpp +++ b/accessible/ipc/DocAccessibleChildBase.cpp @@ -51,7 +51,16 @@ void DocAccessibleChildBase::SerializeTree(nsTArray& aTree, // XXX: We need to do this because this requires a state check. genericTypes |= eNumericValue; } - if (acc->ActionCount()) { + if (acc->IsTextLeaf() || acc->IsImage()) { + // Ideally, we'd set eActionable for any Accessible with an ancedstor + // action. However, that requires an ancestor walk which is too expensive + // here. eActionable is only used by ATK. For now, we only expose ancestor + // actions on text leaf and image Accessibles. This means that we don't + // support "click ancestor" for ATK. + if (acc->ActionCount()) { + genericTypes |= eActionable; + } + } else if (acc->HasPrimaryAction()) { genericTypes |= eActionable; }