Line data Source code
1 : /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 : /* This Source Code Form is subject to the terms of the Mozilla Public
3 : * License, v. 2.0. If a copy of the MPL was not distributed with this
4 : * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
5 :
6 : #include "XULColorPickerAccessible.h"
7 :
8 : #include "Accessible-inl.h"
9 : #include "nsAccUtils.h"
10 : #include "nsCoreUtils.h"
11 : #include "DocAccessible.h"
12 : #include "Role.h"
13 : #include "States.h"
14 :
15 : #include "nsIDOMElement.h"
16 : #include "nsMenuPopupFrame.h"
17 :
18 : using namespace mozilla::a11y;
19 :
20 : ////////////////////////////////////////////////////////////////////////////////
21 : // XULColorPickerTileAccessible
22 : ////////////////////////////////////////////////////////////////////////////////
23 :
24 0 : XULColorPickerTileAccessible::
25 0 : XULColorPickerTileAccessible(nsIContent* aContent, DocAccessible* aDoc) :
26 0 : AccessibleWrap(aContent, aDoc)
27 : {
28 0 : }
29 :
30 : ////////////////////////////////////////////////////////////////////////////////
31 : // XULColorPickerTileAccessible: Accessible
32 :
33 : void
34 0 : XULColorPickerTileAccessible::Value(nsString& aValue)
35 : {
36 0 : aValue.Truncate();
37 :
38 0 : mContent->GetAttr(kNameSpaceID_None, nsGkAtoms::color, aValue);
39 0 : }
40 :
41 : role
42 0 : XULColorPickerTileAccessible::NativeRole()
43 : {
44 0 : return roles::PUSHBUTTON;
45 : }
46 :
47 : uint64_t
48 0 : XULColorPickerTileAccessible::NativeState()
49 : {
50 0 : uint64_t state = AccessibleWrap::NativeState();
51 0 : if (mContent->HasAttr(kNameSpaceID_None, nsGkAtoms::selected))
52 0 : state |= states::SELECTED;
53 :
54 0 : return state;
55 : }
56 :
57 : uint64_t
58 0 : XULColorPickerTileAccessible::NativeInteractiveState() const
59 : {
60 0 : return NativelyUnavailable() ?
61 0 : states::UNAVAILABLE : states::FOCUSABLE | states::SELECTABLE;
62 : }
63 :
64 : ////////////////////////////////////////////////////////////////////////////////
65 : // XULColorPickerTileAccessible: Widgets
66 :
67 : Accessible*
68 0 : XULColorPickerTileAccessible::ContainerWidget() const
69 : {
70 0 : Accessible* parent = Parent();
71 0 : if (parent) {
72 0 : Accessible* grandParent = parent->Parent();
73 0 : if (grandParent && grandParent->IsMenuButton())
74 0 : return grandParent;
75 : }
76 0 : return nullptr;
77 : }
78 :
79 : ////////////////////////////////////////////////////////////////////////////////
80 : // XULColorPickerAccessible
81 : ////////////////////////////////////////////////////////////////////////////////
82 :
83 0 : XULColorPickerAccessible::
84 0 : XULColorPickerAccessible(nsIContent* aContent, DocAccessible* aDoc) :
85 0 : XULColorPickerTileAccessible(aContent, aDoc)
86 : {
87 0 : mGenericTypes |= eMenuButton;
88 0 : }
89 :
90 : ////////////////////////////////////////////////////////////////////////////////
91 : // XULColorPickerAccessible: Accessible
92 :
93 : uint64_t
94 0 : XULColorPickerAccessible::NativeState()
95 : {
96 0 : uint64_t state = AccessibleWrap::NativeState();
97 0 : return state | states::HASPOPUP;
98 : }
99 :
100 : role
101 0 : XULColorPickerAccessible::NativeRole()
102 : {
103 0 : return roles::BUTTONDROPDOWNGRID;
104 : }
105 :
106 : ////////////////////////////////////////////////////////////////////////////////
107 : // XULColorPickerAccessible: Widgets
108 :
109 : bool
110 0 : XULColorPickerAccessible::IsWidget() const
111 : {
112 0 : return true;
113 : }
114 :
115 : bool
116 0 : XULColorPickerAccessible::IsActiveWidget() const
117 : {
118 0 : return FocusMgr()->HasDOMFocus(mContent);
119 : }
120 :
121 : bool
122 0 : XULColorPickerAccessible::AreItemsOperable() const
123 : {
124 0 : Accessible* menuPopup = mChildren.SafeElementAt(0, nullptr);
125 0 : if (menuPopup) {
126 0 : nsMenuPopupFrame* menuPopupFrame = do_QueryFrame(menuPopup->GetFrame());
127 0 : return menuPopupFrame && menuPopupFrame->IsOpen();
128 : }
129 0 : return false;
130 : }
131 :
132 : ////////////////////////////////////////////////////////////////////////////////
133 : // XULColorPickerAccessible: Accessible
134 :
135 : bool
136 0 : XULColorPickerAccessible::IsAcceptableChild(nsIContent* aEl) const
137 : {
138 0 : nsAutoString role;
139 0 : nsCoreUtils::XBLBindingRole(aEl, role);
140 0 : return role.EqualsLiteral("xul:panel") &&
141 0 : aEl->AttrValueIs(kNameSpaceID_None, nsGkAtoms::noautofocus,
142 0 : nsGkAtoms::_true, eCaseMatters);
143 : }
|