diff options
author | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
---|---|---|
committer | Lorry Tar Creator <lorry-tar-importer@lorry> | 2017-06-27 06:07:23 +0000 |
commit | 1bf1084f2b10c3b47fd1a588d85d21ed0eb41d0c (patch) | |
tree | 46dcd36c86e7fbc6e5df36deb463b33e9967a6f7 /Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceSelection.cpp | |
parent | 32761a6cee1d0dee366b885b7b9c777e67885688 (diff) | |
download | WebKitGtk-tarball-master.tar.gz |
webkitgtk-2.16.5HEADwebkitgtk-2.16.5master
Diffstat (limited to 'Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceSelection.cpp')
-rw-r--r-- | Source/WebCore/accessibility/atk/WebKitAccessibleInterfaceSelection.cpp | 90 |
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(); } |