Files
tubestation/accessible/mac/RotorRules.h
Eitan Isaacson 642922bc35 Bug 1772375 - Initial support for MacOS full keyboard access. r=morgan
This feature relies mostly on a search predicate key we did not support.
With that added we at least get some functionality although you encounter
bugs pretty quickly. For example a button after a password field loses focus,
but this seems to be a bug in Safari too. I think the browser support here in general
is pretty underwhelming at this time.

Note: This just works because we now start a11y when a role is retrieved, so
we don't need to sniff out any special FKA settings.

Differential Revision: https://phabricator.services.mozilla.com/D219822
2024-08-23 23:15:12 +00:00

154 lines
5.0 KiB
Objective-C

/* clang-format off */
/* -*- Mode: Objective-C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* clang-format on */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#import "mozAccessible.h"
#include "Pivot.h"
using namespace mozilla::a11y;
/**
* This rule matches all accessibles that satisfy the "boilerplate"
* pivot conditions and have a corresponding native accessible.
*/
class RotorRule : public PivotRule {
public:
explicit RotorRule(Accessible* aDirectDescendantsFrom,
const nsString& aSearchText);
explicit RotorRule(const nsString& aSearchText);
uint16_t Match(Accessible* aAcc) override;
private:
Accessible* mDirectDescendantsFrom;
const nsString& mSearchText;
};
/**
* This rule matches all accessibles of a given role.
*/
class RotorRoleRule : public RotorRule {
public:
explicit RotorRoleRule(role aRole, Accessible* aDirectDescendantsFrom,
const nsString& aSearchText);
explicit RotorRoleRule(role aRole, const nsString& aSearchText);
uint16_t Match(Accessible* aAcc) override;
private:
role mRole;
};
class RotorMacRoleRule : public RotorRule {
public:
explicit RotorMacRoleRule(NSString* aRole, const nsString& aSearchText);
explicit RotorMacRoleRule(NSString* aRole, Accessible* aDirectDescendantsFrom,
const nsString& aSearchText);
~RotorMacRoleRule();
virtual uint16_t Match(Accessible* aAcc) override;
protected:
NSString* mMacRole;
};
class RotorControlRule final : public RotorRule {
public:
explicit RotorControlRule(Accessible* aDirectDescendantsFrom,
const nsString& aSearchText);
explicit RotorControlRule(const nsString& aSearchText);
virtual uint16_t Match(Accessible* aAcc) override;
};
class RotorTextEntryRule final : public RotorRule {
public:
explicit RotorTextEntryRule(Accessible* aDirectDescendantsFrom,
const nsString& aSearchText);
explicit RotorTextEntryRule(const nsString& aSearchText);
virtual uint16_t Match(Accessible* aAcc) override;
};
class RotorLinkRule : public RotorRule {
public:
explicit RotorLinkRule(const nsString& aSearchText);
explicit RotorLinkRule(Accessible* aDirectDescendantsFrom,
const nsString& aSearchText);
virtual uint16_t Match(Accessible* aAcc) override;
};
class RotorVisitedLinkRule final : public RotorLinkRule {
public:
explicit RotorVisitedLinkRule(const nsString& aSearchText);
explicit RotorVisitedLinkRule(Accessible* aDirectDescendantsFrom,
const nsString& aSearchText);
virtual uint16_t Match(Accessible* aAcc) override;
};
class RotorUnvisitedLinkRule final : public RotorLinkRule {
public:
explicit RotorUnvisitedLinkRule(const nsString& aSearchText);
explicit RotorUnvisitedLinkRule(Accessible* aDirectDescendantsFrom,
const nsString& aSearchText);
virtual uint16_t Match(Accessible* aAcc) override;
};
/**
* This rule matches all accessibles that satisfy the "boilerplate"
* pivot conditions and have a corresponding native accessible.
*/
class RotorNotMacRoleRule : public RotorMacRoleRule {
public:
explicit RotorNotMacRoleRule(NSString* aMacRole,
Accessible* aDirectDescendantsFrom,
const nsString& aSearchText);
explicit RotorNotMacRoleRule(NSString* aMacRole, const nsString& aSearchText);
uint16_t Match(Accessible* aAcc) override;
};
class RotorStaticTextRule : public RotorRule {
public:
explicit RotorStaticTextRule(const nsString& aSearchText);
explicit RotorStaticTextRule(Accessible* aDirectDescendantsFrom,
const nsString& aSearchText);
virtual uint16_t Match(Accessible* aAcc) override;
};
class RotorHeadingLevelRule : public RotorRoleRule {
public:
explicit RotorHeadingLevelRule(int32_t aLevel, const nsString& aSearchText);
explicit RotorHeadingLevelRule(int32_t aLevel,
Accessible* aDirectDescendantsFrom,
const nsString& aSearchText);
virtual uint16_t Match(Accessible* aAcc) override;
private:
int32_t mLevel;
};
class RotorLiveRegionRule : public RotorRule {
public:
explicit RotorLiveRegionRule(Accessible* aDirectDescendantsFrom,
const nsString& aSearchText)
: RotorRule(aDirectDescendantsFrom, aSearchText) {}
explicit RotorLiveRegionRule(const nsString& aSearchText)
: RotorRule(aSearchText) {}
uint16_t Match(Accessible* aAcc) override;
};
class RotorFocusableRule : public RotorRule {
public:
explicit RotorFocusableRule(const nsString& aSearchText);
explicit RotorFocusableRule(Accessible* aDirectDescendantsFrom,
const nsString& aSearchText);
virtual uint16_t Match(Accessible* aAcc) override;
};