1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4 * License, v. 2.0. If a copy of the MPL was not distributed with this
5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
7 #include "InterfaceInitFuncs.h"
9 #include "LocalAccessible-inl.h"
12 #include "mozilla/Likely.h"
13 #include "RemoteAccessible.h"
16 using namespace mozilla::a11y
;
20 static gboolean
doActionCB(AtkAction
* aAction
, gint aActionIndex
) {
21 AccessibleWrap
* accWrap
= GetAccessibleWrap(ATK_OBJECT(aAction
));
23 return accWrap
->DoAction(aActionIndex
);
26 RemoteAccessible
* proxy
= GetProxy(ATK_OBJECT(aAction
));
27 return proxy
&& proxy
->DoAction(aActionIndex
);
30 static gint
getActionCountCB(AtkAction
* aAction
) {
31 AccessibleWrap
* accWrap
= GetAccessibleWrap(ATK_OBJECT(aAction
));
33 return accWrap
->ActionCount();
36 RemoteAccessible
* proxy
= GetProxy(ATK_OBJECT(aAction
));
37 return proxy
? proxy
->ActionCount() : 0;
40 static const gchar
* getActionDescriptionCB(AtkAction
* aAction
,
42 nsAutoString description
;
43 AccessibleWrap
* accWrap
= GetAccessibleWrap(ATK_OBJECT(aAction
));
45 accWrap
->ActionDescriptionAt(aActionIndex
, description
);
46 } else if (RemoteAccessible
* proxy
= GetProxy(ATK_OBJECT(aAction
))) {
47 proxy
->ActionDescriptionAt(aActionIndex
, description
);
52 return AccessibleWrap::ReturnString(description
);
55 static const gchar
* getActionNameCB(AtkAction
* aAction
, gint aActionIndex
) {
57 AccessibleWrap
* accWrap
= GetAccessibleWrap(ATK_OBJECT(aAction
));
59 accWrap
->ActionNameAt(aActionIndex
, autoStr
);
60 } else if (RemoteAccessible
* proxy
= GetProxy(ATK_OBJECT(aAction
))) {
61 proxy
->ActionNameAt(aActionIndex
, autoStr
);
66 return AccessibleWrap::ReturnString(autoStr
);
69 static const gchar
* getKeyBindingCB(AtkAction
* aAction
, gint aActionIndex
) {
70 nsAutoString keyBindingsStr
;
71 AccessibleWrap
* acc
= GetAccessibleWrap(ATK_OBJECT(aAction
));
73 AccessibleWrap::GetKeyBinding(acc
, keyBindingsStr
);
74 } else if (RemoteAccessible
* proxy
= GetProxy(ATK_OBJECT(aAction
))) {
75 proxy
->AtkKeyBinding(keyBindingsStr
);
80 return AccessibleWrap::ReturnString(keyBindingsStr
);
84 void actionInterfaceInitCB(AtkActionIface
* aIface
) {
85 NS_ASSERTION(aIface
, "Invalid aIface");
86 if (MOZ_UNLIKELY(!aIface
)) return;
88 aIface
->do_action
= doActionCB
;
89 aIface
->get_n_actions
= getActionCountCB
;
90 aIface
->get_description
= getActionDescriptionCB
;
91 aIface
->get_keybinding
= getKeyBindingCB
;
92 aIface
->get_name
= getActionNameCB
;