summaryrefslogtreecommitdiff
path: root/Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceSelection.cpp
diff options
context:
space:
mode:
authorLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
committerLorry Tar Creator <lorry-tar-importer@lorry>2017-06-27 06:07:23 +0000
commit1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch)
tree46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceSelection.cpp
parent32761a6cee1d0dee366b885b7b9c777e67885688 (diff)
downloadWebKitGtk-tarball-master.tar.gz
Diffstat (limited to 'Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceSelection.cpp')
-rw-r--r--Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceSelection.cpp90
1 files changed, 36 insertions, 54 deletions
diff --git a/Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceSelection.cpp b/Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceSelection.cpp
index cb7a3ccff..ec7f8caa5 100644
--- a/Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceSelection.cpp
+++ b/Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceSelection.cpp
@@ -45,7 +45,7 @@ using namespace WebCore;
static AccessibilityObject* core(AtkSelection* selection)
{
if (!WEBKIT_IS_ACCESSIBLE(selection))
- return 0;
+ return nullptr;
return webkitAccessibleGetAccessibilityObject(WEBKIT_ACCESSIBLE(selection));
}
@@ -56,7 +56,7 @@ static AccessibilityObject* listObjectForSelection(AtkSelection* selection)
// Only list boxes and menu lists supported so far.
if (!coreSelection->isListBox() && !coreSelection->isMenuList())
- return 0;
+ return nullptr;
// For list boxes the list object is just itself.
if (coreSelection->isListBox())
@@ -67,11 +67,11 @@ static AccessibilityObject* listObjectForSelection(AtkSelection* selection)
// of items with role MenuListOptionRole.
const AccessibilityObject::AccessibilityChildrenVector& children = coreSelection->children();
if (!children.size())
- return 0;
+ return nullptr;
AccessibilityObject* listObject = children.at(0).get();
if (!listObject->isMenuListPopup())
- return 0;
+ return nullptr;
return listObject;
}
@@ -80,50 +80,37 @@ static AccessibilityObject* optionFromList(AtkSelection* selection, gint index)
{
AccessibilityObject* coreSelection = core(selection);
if (!coreSelection || index < 0)
- return 0;
+ return nullptr;
// Need to select the proper list object depending on the type.
AccessibilityObject* listObject = listObjectForSelection(selection);
if (!listObject)
- return 0;
+ return nullptr;
const AccessibilityObject::AccessibilityChildrenVector& options = listObject->children();
if (index < static_cast<gint>(options.size()))
return options.at(index).get();
- return 0;
+ return nullptr;
}
static AccessibilityObject* optionFromSelection(AtkSelection* selection, gint index)
{
- // i is the ith selection as opposed to the ith child.
-
AccessibilityObject* coreSelection = core(selection);
if (!coreSelection || !coreSelection->isAccessibilityRenderObject() || index < 0)
- return 0;
-
- AccessibilityObject::AccessibilityChildrenVector selectedItems;
- if (coreSelection->isListBox())
- coreSelection->selectedChildren(selectedItems);
- else if (coreSelection->isMenuList()) {
- RenderObject* renderer = coreSelection->renderer();
- if (!renderer)
- return 0;
-
- HTMLSelectElement* selectNode = toHTMLSelectElement(renderer->node());
- int selectedIndex = selectNode->selectedIndex();
- const Vector<HTMLElement*> listItems = selectNode->listItems();
-
- if (selectedIndex < 0 || selectedIndex >= static_cast<int>(listItems.size()))
- return 0;
-
- return optionFromList(selection, selectedIndex);
- }
-
- if (index < static_cast<gint>(selectedItems.size()))
- return selectedItems.at(index).get();
+ return nullptr;
+
+ // This method provides the functionality expected by atk_selection_ref_selection().
+ // According to the ATK documentation for this method, the index is "a gint specifying
+ // the index in the selection set. (e.g. the ith selection as opposed to the ith child)."
+ // There is different API, namely atk_object_ref_accessible_child(), when the ith child
+ // from the set of all children is sought.
+ AccessibilityObject::AccessibilityChildrenVector options;
+ coreSelection->selectedChildren(options);
+ if (index < static_cast<gint>(options.size()))
+ return options.at(index).get();
- return 0;
+ return nullptr;
}
static gboolean webkitAccessibleSelectionAddSelection(AtkSelection* selection, gint index)
@@ -154,20 +141,20 @@ static gboolean webkitAccessibleSelectionClearSelection(AtkSelection* selection)
return FALSE;
AccessibilityObject::AccessibilityChildrenVector selectedItems;
- if (coreSelection->isListBox() || coreSelection->isMenuList()) {
+ if (is<AccessibilityListBox>(*coreSelection)) {
// Set the list of selected items to an empty list; then verify that it worked.
- AccessibilityListBox* listBox = toAccessibilityListBox(coreSelection);
- listBox->setSelectedChildren(selectedItems);
- listBox->selectedChildren(selectedItems);
- return !selectedItems.size();
+ auto& listBox = downcast<AccessibilityListBox>(*coreSelection);
+ listBox.setSelectedChildren(selectedItems);
+ listBox.selectedChildren(selectedItems);
+ return selectedItems.isEmpty();
}
return FALSE;
}
static AtkObject* webkitAccessibleSelectionRefSelection(AtkSelection* selection, gint index)
{
- g_return_val_if_fail(ATK_SELECTION(selection), 0);
- returnValIfWebKitAccessibleIsInvalid(WEBKIT_ACCESSIBLE(selection), 0);
+ g_return_val_if_fail(ATK_SELECTION(selection), nullptr);
+ returnValIfWebKitAccessibleIsInvalid(WEBKIT_ACCESSIBLE(selection), nullptr);
AccessibilityObject* option = optionFromSelection(selection, index);
if (option) {
@@ -176,7 +163,7 @@ static AtkObject* webkitAccessibleSelectionRefSelection(AtkSelection* selection,
return child;
}
- return 0;
+ return nullptr;
}
static gint webkitAccessibleSelectionGetSelectionCount(AtkSelection* selection)
@@ -188,22 +175,18 @@ static gint webkitAccessibleSelectionGetSelectionCount(AtkSelection* selection)
if (!coreSelection || !coreSelection->isAccessibilityRenderObject())
return 0;
- if (coreSelection->isListBox()) {
- AccessibilityObject::AccessibilityChildrenVector selectedItems;
- coreSelection->selectedChildren(selectedItems);
- return static_cast<gint>(selectedItems.size());
- }
-
if (coreSelection->isMenuList()) {
RenderObject* renderer = coreSelection->renderer();
if (!renderer)
return 0;
- int selectedIndex = toHTMLSelectElement(renderer->node())->selectedIndex();
- return selectedIndex >= 0 && selectedIndex < static_cast<int>(toHTMLSelectElement(renderer->node())->listItems().size());
+ int selectedIndex = downcast<HTMLSelectElement>(renderer->node())->selectedIndex();
+ return selectedIndex >= 0 && selectedIndex < static_cast<int>(downcast<HTMLSelectElement>(renderer->node())->listItems().size());
}
- return 0;
+ AccessibilityObject::AccessibilityChildrenVector selectedItems;
+ coreSelection->selectedChildren(selectedItems);
+ return static_cast<gint>(selectedItems.size());
}
static gboolean webkitAccessibleSelectionIsChildSelected(AtkSelection* selection, gint index)
@@ -231,7 +214,6 @@ static gboolean webkitAccessibleSelectionRemoveSelection(AtkSelection* selection
if (!coreSelection)
return FALSE;
- // TODO: This is only getting called if i == 0. What is preventing the rest?
AccessibilityObject* option = optionFromSelection(selection, index);
if (option && (coreSelection->isListBox() || coreSelection->isMenuList())) {
option->setSelected(false);
@@ -250,12 +232,12 @@ static gboolean webkitAccessibleSelectionSelectAllSelection(AtkSelection* select
if (!coreSelection || !coreSelection->isMultiSelectable())
return FALSE;
- if (coreSelection->isListBox()) {
+ if (is<AccessibilityListBox>(*coreSelection)) {
const AccessibilityObject::AccessibilityChildrenVector& children = coreSelection->children();
- AccessibilityListBox* listBox = toAccessibilityListBox(coreSelection);
- listBox->setSelectedChildren(children);
+ AccessibilityListBox& listBox = downcast<AccessibilityListBox>(*coreSelection);
+ listBox.setSelectedChildren(children);
AccessibilityObject::AccessibilityChildrenVector selectedItems;
- listBox->selectedChildren(selectedItems);
+ listBox.selectedChildren(selectedItems);
return selectedItems.size() == children.size();
}