6#if QT_CONFIG(accessibility)
8#include "private/qaccessiblecache_p.h"
9#include "private/qcore_mac_p.h"
15@implementation QMacAccessibilityElement
17- (instancetype)initWithId:(
QAccessible::
Id)anId withAccessibilityContainer:(
id)view
20 self = [
super initWithAccessibilityContainer:view];
33 QAccessibleCache *
cache = QAccessibleCache::instance();
35 QMacAccessibilityElement *element =
cache->elementForId(anId);
37 auto *a11yInterface = QAccessible::accessibleInterface(anId);
39 auto *
window = a11yInterface->window();
42 element = [[
self alloc] initWithId:anId withAccessibilityContainer:platformWindow->view()];
43 cache->insertElement(anId, element);
46 <<
"with platform window" << (
window ?
window->handle() :
nullptr);
57- (BOOL)isAccessibilityElement
62- (NSString*)accessibilityLabel
64 QAccessibleInterface *
iface = QAccessible::accessibleInterface(
self.axid);
66 qWarning() <<
"invalid accessible interface for: " <<
self.axid;
70 return iface->text(QAccessible::Name).toNSString();
73- (NSString*)accessibilityHint
75 QAccessibleInterface *
iface = QAccessible::accessibleInterface(
self.axid);
77 qWarning() <<
"invalid accessible interface for: " <<
self.axid;
80 return iface->text(QAccessible::Description).toNSString();
83- (NSString*)accessibilityValue
85 QAccessibleInterface *
iface = QAccessible::accessibleInterface(
self.axid);
87 qWarning() <<
"invalid accessible interface for: " <<
self.axid;
98 QAccessibleValueInterface *
val =
iface->valueInterface();
100 return val->currentValue().toString().toNSString();
101 }
else if (QAccessibleTextInterface *
text =
iface->textInterface()) {
102 return text->text(0,
text->characterCount()).toNSString();
105 return [
super accessibilityHint];
108- (CGRect)accessibilityFrame
110 QAccessibleInterface *
iface = QAccessible::accessibleInterface(
self.axid);
112 qWarning() <<
"invalid accessible interface for: " <<
self.axid;
120- (UIAccessibilityTraits)accessibilityTraits
122 UIAccessibilityTraits traits = UIAccessibilityTraitNone;
124 QAccessibleInterface *
iface = QAccessible::accessibleInterface(
self.axid);
126 qWarning() <<
"invalid accessible interface for: " <<
self.axid;
131 traits |= UIAccessibilityTraitNotEnabled;
133 if (
state.searchEdit)
134 traits |= UIAccessibilityTraitSearchField;
137 traits |= UIAccessibilityTraitSelected;
139 const auto accessibleRole =
iface->role();
140 if (accessibleRole == QAccessible::Button) {
141 traits |= UIAccessibilityTraitButton;
142 }
else if (accessibleRole == QAccessible::EditableText) {
143 static auto defaultTextFieldTraits = []{
144 auto *textField = [[[UITextField alloc] initWithFrame:CGRectZero] autorelease];
145 return textField.accessibilityTraits;
147 traits |= defaultTextFieldTraits;
148 }
else if (accessibleRole == QAccessible::Graphic) {
149 traits |= UIAccessibilityTraitImage;
150 }
else if (accessibleRole == QAccessible::Heading) {
151 traits |= UIAccessibilityTraitHeader;
152 }
else if (accessibleRole == QAccessible::Link) {
153 traits |= UIAccessibilityTraitLink;
154 }
else if (accessibleRole == QAccessible::StaticText) {
155 traits |= UIAccessibilityTraitStaticText;
158 if (
iface->valueInterface())
159 traits |= UIAccessibilityTraitAdjustable;
164- (BOOL)accessibilityActivate
166 QAccessibleInterface *
iface = QAccessible::accessibleInterface(
self.axid);
167 if (QAccessibleActionInterface *action =
iface->actionInterface()) {
168 if (action->actionNames().contains(QAccessibleActionInterface::pressAction())) {
169 action->doAction(QAccessibleActionInterface::pressAction());
171 }
else if (action->actionNames().contains(QAccessibleActionInterface::showMenuAction())) {
172 action->doAction(QAccessibleActionInterface::showMenuAction());
179- (
void)accessibilityIncrement
181 QAccessibleInterface *
iface = QAccessible::accessibleInterface(
self.axid);
182 if (QAccessibleActionInterface *action =
iface->actionInterface())
183 action->doAction(QAccessibleActionInterface::increaseAction());
186- (
void)accessibilityDecrement
188 QAccessibleInterface *
iface = QAccessible::accessibleInterface(
self.axid);
189 if (QAccessibleActionInterface *action =
iface->actionInterface())
190 action->doAction(QAccessibleActionInterface::decreaseAction());
193- (BOOL)accessibilityScroll:(UIAccessibilityScrollDirection)direction
195 QAccessibleInterface *
iface = QAccessible::accessibleInterface(
self.axid);
196 QAccessibleActionInterface *action =
iface->actionInterface();
200 case UIAccessibilityScrollDirectionRight:
201 action->doAction(QAccessibleActionInterface::scrollRightAction());
203 case UIAccessibilityScrollDirectionLeft:
204 action->doAction(QAccessibleActionInterface::scrollLeftAction());
206 case UIAccessibilityScrollDirectionUp:
207 action->doAction(QAccessibleActionInterface::scrollUpAction());
209 case UIAccessibilityScrollDirectionDown:
210 action->doAction(QAccessibleActionInterface::scrollDownAction());
212 case UIAccessibilityScrollDirectionNext:
213 action->doAction(QAccessibleActionInterface::nextPageAction());
215 case UIAccessibilityScrollDirectionPrevious:
216 action->doAction(QAccessibleActionInterface::previousPageAction());
The QAccessible class provides enums and static functions related to accessibility.
static QString translate(const char *context, const char *key, const char *disambiguation=nullptr, int n=-1)
\threadsafe
\inmodule QtCore\reentrant
QCache< int, Employee > cache
[0]
constexpr QBindableInterface iface
#define QT_NAMESPACE_ALIAS_OBJC_CLASS(__KLASS__)
DBusConnection const char DBusError DBusBusType DBusError return DBusConnection DBusHandleMessageFunction void DBusFreeFunction return DBusConnection return DBusConnection return const char DBusError return DBusConnection DBusMessage dbus_uint32_t return DBusConnection dbus_bool_t DBusConnection DBusAddWatchFunction DBusRemoveWatchFunction DBusWatchToggledFunction void DBusFreeFunction return DBusConnection DBusDispatchStatusFunction void DBusFreeFunction DBusTimeout return DBusTimeout return DBusWatch return DBusWatch unsigned int return DBusError const DBusError return const DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessage return DBusMessageIter int const void return DBusMessageIter DBusMessageIter return DBusMessageIter void DBusMessageIter void int return DBusMessage DBusMessageIter return DBusMessageIter return DBusMessageIter DBusMessageIter const char const char const char const char return DBusMessage return DBusMessage const char return DBusMessage dbus_bool_t return DBusMessage dbus_uint32_t return DBusMessage void