summaryrefslogtreecommitdiffstats
path: root/accessible/base/Platform.h
blob: d2fefea68bd2e58f2e555c224bbbe529b7fe25d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=2 et sw=2 tw=80: */
/* 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/. */

#ifndef mozilla_a11y_Platform_h
#define mozilla_a11y_Platform_h

#include <stdint.h>
#include "nsStringFwd.h"

#if defined(ANDROID)
#  include "nsTArray.h"
#  include "nsRect.h"
#endif

#ifdef MOZ_WIDGET_COCOA
#  include "mozilla/a11y/Role.h"
#endif

#if defined(XP_WIN)
#  include "Units.h"
#endif

namespace mozilla {
namespace a11y {

class ProxyAccessible;

enum EPlatformDisabledState {
  ePlatformIsForceEnabled = -1,
  ePlatformIsEnabled = 0,
  ePlatformIsDisabled = 1
};

/**
 * Return the platform disabled state.
 */
EPlatformDisabledState PlatformDisabledState();

#ifdef MOZ_ACCESSIBILITY_ATK
/**
 * Perform initialization that should be done as soon as possible, in order
 * to minimize startup time.
 * XXX: this function and the next defined in ApplicationAccessibleWrap.cpp
 */
void PreInit();
#endif

#if defined(MOZ_ACCESSIBILITY_ATK) || defined(XP_MACOSX)
/**
 * Is platform accessibility enabled.
 * Only used on linux with atk and MacOS for now.
 */
bool ShouldA11yBeEnabled();
#endif

#if defined(XP_WIN)
/*
 * Do we have AccessibleHandler.dll registered.
 */
bool IsHandlerRegistered();

/*
 * Name of platform service that instantiated accessibility
 */
void SetInstantiator(const uint32_t aInstantiatorPid);
bool GetInstantiator(nsIFile** aOutInstantiator);
#endif

/**
 * Called to initialize platform specific accessibility support.
 * Note this is called after internal accessibility support is initialized.
 */
void PlatformInit();

/**
 * Shutdown platform accessibility.
 * Note this is called before internal accessibility support is shutdown.
 */
void PlatformShutdown();

/**
 * called when a new ProxyAccessible is created, so the platform may setup a
 * wrapper for it, or take other action.
 */
void ProxyCreated(ProxyAccessible* aProxy, uint32_t aInterfaces);

/**
 * Called just before a ProxyAccessible is destroyed so its wrapper can be
 * disposed of and other action taken.
 */
void ProxyDestroyed(ProxyAccessible*);

/**
 * Callied when an event is fired on a proxied accessible.
 */
void ProxyEvent(ProxyAccessible* aTarget, uint32_t aEventType);
void ProxyStateChangeEvent(ProxyAccessible* aTarget, uint64_t aState,
                           bool aEnabled);

#if defined(XP_WIN)
void ProxyFocusEvent(ProxyAccessible* aTarget,
                     const LayoutDeviceIntRect& aCaretRect);
void ProxyCaretMoveEvent(ProxyAccessible* aTarget,
                         const LayoutDeviceIntRect& aCaretRect);
#else
void ProxyCaretMoveEvent(ProxyAccessible* aTarget, int32_t aOffset,
                         bool aIsSelectionCollapsed);
#endif
void ProxyTextChangeEvent(ProxyAccessible* aTarget, const nsString& aStr,
                          int32_t aStart, uint32_t aLen, bool aIsInsert,
                          bool aFromUser);
void ProxyShowHideEvent(ProxyAccessible* aTarget, ProxyAccessible* aParent,
                        bool aInsert, bool aFromUser);
void ProxySelectionEvent(ProxyAccessible* aTarget, ProxyAccessible* aWidget,
                         uint32_t aType);

#if defined(ANDROID)
MOZ_CAN_RUN_SCRIPT
void ProxyVirtualCursorChangeEvent(ProxyAccessible* aTarget,
                                   ProxyAccessible* aOldPosition,
                                   int32_t aOldStartOffset,
                                   int32_t aOldEndOffset,
                                   ProxyAccessible* aNewPosition,
                                   int32_t aNewStartOffset,
                                   int32_t aNewEndOffset, int16_t aReason,
                                   int16_t aBoundaryType, bool aFromUser);

void ProxyScrollingEvent(ProxyAccessible* aTarget, uint32_t aEventType,
                         uint32_t aScrollX, uint32_t aScrollY,
                         uint32_t aMaxScrollX, uint32_t aMaxScrollY);

void ProxyAnnouncementEvent(ProxyAccessible* aTarget,
                            const nsString& aAnnouncement, uint16_t aPriority);

class BatchData;

void ProxyBatch(ProxyAccessible* aDocument, const uint64_t aBatchType,
                const nsTArray<ProxyAccessible*>& aAccessibles,
                const nsTArray<BatchData>& aData);

bool LocalizeString(
    const char* aToken, nsAString& aLocalized,
    const nsTArray<nsString>& aFormatString = nsTArray<nsString>());
#endif

#ifdef MOZ_WIDGET_COCOA
class TextRangeData;
void ProxyTextSelectionChangeEvent(ProxyAccessible* aTarget,
                                   const nsTArray<TextRangeData>& aSelection);

void ProxyRoleChangedEvent(ProxyAccessible* aTarget, const a11y::role& aRole);
#endif

}  // namespace a11y
}  // namespace mozilla

#endif  // mozilla_a11y_Platform_h