forked from mirrors/gecko-dev
Bug 1802040: Track the focused DocAccessibleParent on Android. r=eeejay
Differential Revision: https://phabricator.services.mozilla.com/D163707
This commit is contained in:
parent
ec36412f03
commit
ca834233da
3 changed files with 26 additions and 1 deletions
|
|
@ -68,11 +68,11 @@ Accessible* FocusManager::FocusedAccessible() const {
|
|||
} else {
|
||||
nsAccessibilityService::GetAndroidMonitor().AssertCurrentThreadOwns();
|
||||
}
|
||||
return mFocusedRemoteDoc ? mFocusedRemoteDoc->GetFocusedAcc() : nullptr;
|
||||
#else
|
||||
if (Accessible* focusedAcc = FocusedLocalAccessible()) {
|
||||
return focusedAcc;
|
||||
}
|
||||
#endif // defined(ANDROID)
|
||||
|
||||
if (!XRE_IsParentProcess()) {
|
||||
// DocAccessibleParent's don't exist in the content
|
||||
|
|
@ -96,6 +96,7 @@ Accessible* FocusManager::FocusedAccessible() const {
|
|||
DocAccessibleParent* focusedDoc =
|
||||
DocAccessibleParent::GetFrom(focusedContext);
|
||||
return focusedDoc ? focusedDoc->GetFocusedAcc() : nullptr;
|
||||
#endif // defined(ANDROID)
|
||||
}
|
||||
|
||||
bool FocusManager::IsFocusWithin(const Accessible* aContainer) const {
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ class Accessible;
|
|||
class AccEvent;
|
||||
class LocalAccessible;
|
||||
class DocAccessible;
|
||||
class DocAccessibleParent;
|
||||
|
||||
/**
|
||||
* Manage the accessible focus. Used to fire and process accessible events.
|
||||
|
|
@ -132,6 +133,15 @@ class FocusManager {
|
|||
*/
|
||||
void ProcessFocusEvent(AccEvent* aEvent);
|
||||
|
||||
#ifdef ANDROID
|
||||
void SetFocusedRemoteDoc(DocAccessibleParent* aDoc) {
|
||||
mFocusedRemoteDoc = aDoc;
|
||||
}
|
||||
bool IsFocusedRemoteDoc(DocAccessibleParent* aDoc) {
|
||||
return mFocusedRemoteDoc == aDoc;
|
||||
}
|
||||
#endif
|
||||
|
||||
protected:
|
||||
FocusManager();
|
||||
|
||||
|
|
@ -148,6 +158,9 @@ class FocusManager {
|
|||
RefPtr<LocalAccessible> mActiveItem;
|
||||
RefPtr<LocalAccessible> mLastFocus;
|
||||
RefPtr<LocalAccessible> mActiveARIAMenubar;
|
||||
#ifdef ANDROID
|
||||
DocAccessibleParent* mFocusedRemoteDoc = nullptr;
|
||||
#endif
|
||||
};
|
||||
|
||||
} // namespace a11y
|
||||
|
|
|
|||
|
|
@ -344,6 +344,11 @@ mozilla::ipc::IPCResult DocAccessibleParent::RecvEvent(
|
|||
void DocAccessibleParent::FireEvent(RemoteAccessible* aAcc,
|
||||
const uint32_t& aEventType) {
|
||||
if (aEventType == nsIAccessibleEvent::EVENT_FOCUS) {
|
||||
#ifdef ANDROID
|
||||
if (FocusMgr()) {
|
||||
FocusMgr()->SetFocusedRemoteDoc(this);
|
||||
}
|
||||
#endif
|
||||
mFocus = aAcc->ID();
|
||||
}
|
||||
|
||||
|
|
@ -1000,6 +1005,12 @@ void DocAccessibleParent::Destroy() {
|
|||
mShutdown = true;
|
||||
mBrowsingContext = nullptr;
|
||||
|
||||
#ifdef ANDROID
|
||||
if (FocusMgr() && FocusMgr()->IsFocusedRemoteDoc(this)) {
|
||||
FocusMgr()->SetFocusedRemoteDoc(nullptr);
|
||||
}
|
||||
#endif
|
||||
|
||||
MOZ_DIAGNOSTIC_ASSERT(LiveDocs().Contains(mActorID));
|
||||
uint32_t childDocCount = mChildDocs.Length();
|
||||
for (uint32_t i = 0; i < childDocCount; i++) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue