Changeset 105727 in webkit
- Timestamp:
- Jan 24, 2012 4:25:13 AM (12 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 2 added
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r105726 r105727 1 2012-01-24 Mario Sanchez Prada <msanchez@igalia.com> 2 3 [GTK] Refactor GTK's accessibilitity code to be more modular 4 https://bugs.webkit.org/show_bug.cgi?id=76783 5 6 Reviewed by Martin Robinson. 7 8 New files for the implementation of the AtkSelection interface, 9 containing the related code from WebKitAccessibleWrapperAtk.cpp. 10 11 * accessibility/gtk/WebKitAccessibleInterfaceSelection.cpp: Added. 12 (core): 13 (listObjectForSelection): 14 (optionFromList): 15 (optionFromSelection): 16 (webkitAccessibleSelectionInterfaceInit): 17 (webkitAccessibleSelectionAddSelection): 18 (webkitAccessibleSelectionClearSelection): 19 (webkitAccessibleSelectionRefSelection): 20 (webkitAccessibleSelectionGetSelectionCount): 21 (webkitAccessibleSelectionIsChildSelected): 22 (webkitAccessibleSelectionRemoveSelection): 23 (webkitAccessibleSelectionSelectAllSelection): 24 * accessibility/gtk/WebKitAccessibleInterfaceSelection.h: Added. 25 * accessibility/gtk/WebKitAccessibleWrapperAtk.cpp: Remove code 26 related to the implementation of the AtkSelection interface. 27 28 Add new files to build files. 29 30 * GNUmakefile.list.am: Add WebKitAccessibleInterfaceSelection.[h|cpp]. 31 * WebCore.gypi: Ditto. 32 1 33 2012-01-24 Mario Sanchez Prada <msanchez@igalia.com> 2 34 -
trunk/Source/WebCore/GNUmakefile.list.am
r105726 r105727 4436 4436 Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceImage.cpp \ 4437 4437 Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceImage.h \ 4438 Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceSelection.cpp \ 4439 Source/WebCore/accessibility/gtk/WebKitAccessibleInterfaceSelection.h \ 4438 4440 Source/WebCore/accessibility/gtk/WebKitAccessibleUtil.cpp \ 4439 4441 Source/WebCore/accessibility/gtk/WebKitAccessibleUtil.h \ -
trunk/Source/WebCore/WebCore.gypi
r105726 r105727 1360 1360 'accessibility/gtk/WebKitAccessibleInterfaceImage.cpp', 1361 1361 'accessibility/gtk/WebKitAccessibleInterfaceImage.h', 1362 'accessibility/gtk/WebKitAccessibleInterfaceSelection.cpp', 1363 'accessibility/gtk/WebKitAccessibleInterfaceSelection.h', 1362 1364 'accessibility/gtk/WebKitAccessibleUtil.cpp', 1363 1365 'accessibility/gtk/WebKitAccessibleUtil.h', -
trunk/Source/WebCore/accessibility/gtk/WebKitAccessibleWrapperAtk.cpp
r105726 r105727 71 71 #include "WebKitAccessibleInterfaceHypertext.h" 72 72 #include "WebKitAccessibleInterfaceImage.h" 73 #include "WebKitAccessibleInterfaceSelection.h" 73 74 #include "WebKitAccessibleUtil.h" 74 75 #include "htmlediting.h" … … 113 114 114 115 return core(WEBKIT_ACCESSIBLE(object)); 115 }116 117 static AccessibilityObject* core(AtkSelection* selection)118 {119 return core(ATK_OBJECT(selection));120 116 } 121 117 … … 832 828 } 833 829 834 // Selection (for controls)835 836 static AccessibilityObject* listObjectForSelection(AtkSelection* selection)837 {838 AccessibilityObject* coreSelection = core(selection);839 840 // Only list boxes and menu lists supported so far.841 if (!coreSelection->isListBox() && !coreSelection->isMenuList())842 return 0;843 844 // For list boxes the list object is just itself.845 if (coreSelection->isListBox())846 return coreSelection;847 848 // For menu lists we need to return the first accessible child,849 // with role MenuListPopupRole, since that's the one holding the list850 // of items with role MenuListOptionRole.851 AccessibilityObject::AccessibilityChildrenVector children = coreSelection->children();852 if (!children.size())853 return 0;854 855 AccessibilityObject* listObject = children.at(0).get();856 if (!listObject->isMenuListPopup())857 return 0;858 859 return listObject;860 }861 862 static AccessibilityObject* optionFromList(AtkSelection* selection, gint i)863 {864 AccessibilityObject* coreSelection = core(selection);865 if (!coreSelection || i < 0)866 return 0;867 868 // Need to select the proper list object depending on the type.869 AccessibilityObject* listObject = listObjectForSelection(selection);870 if (!listObject)871 return 0;872 873 AccessibilityObject::AccessibilityChildrenVector options = listObject->children();874 if (i < static_cast<gint>(options.size()))875 return options.at(i).get();876 877 return 0;878 }879 880 static AccessibilityObject* optionFromSelection(AtkSelection* selection, gint i)881 {882 // i is the ith selection as opposed to the ith child.883 884 AccessibilityObject* coreSelection = core(selection);885 if (!coreSelection || !coreSelection->isAccessibilityRenderObject() || i < 0)886 return 0;887 888 AccessibilityObject::AccessibilityChildrenVector selectedItems;889 if (coreSelection->isListBox())890 coreSelection->selectedChildren(selectedItems);891 else if (coreSelection->isMenuList()) {892 RenderObject* renderer = coreSelection->renderer();893 if (!renderer)894 return 0;895 896 HTMLSelectElement* selectNode = toHTMLSelectElement(renderer->node());897 int selectedIndex = selectNode->selectedIndex();898 const Vector<HTMLElement*> listItems = selectNode->listItems();899 900 if (selectedIndex < 0 || selectedIndex >= static_cast<int>(listItems.size()))901 return 0;902 903 return optionFromList(selection, selectedIndex);904 }905 906 if (i < static_cast<gint>(selectedItems.size()))907 return selectedItems.at(i).get();908 909 return 0;910 }911 912 static gboolean webkit_accessible_selection_add_selection(AtkSelection* selection, gint i)913 {914 AccessibilityObject* coreSelection = core(selection);915 if (!coreSelection)916 return false;917 918 AccessibilityObject* option = optionFromList(selection, i);919 if (option && (coreSelection->isListBox() || coreSelection->isMenuList())) {920 option->setSelected(true);921 return option->isSelected();922 }923 924 return false;925 }926 927 static gboolean webkit_accessible_selection_clear_selection(AtkSelection* selection)928 {929 AccessibilityObject* coreSelection = core(selection);930 if (!coreSelection)931 return false;932 933 AccessibilityObject::AccessibilityChildrenVector selectedItems;934 if (coreSelection->isListBox() || coreSelection->isMenuList()) {935 // Set the list of selected items to an empty list; then verify that it worked.936 AccessibilityListBox* listBox = static_cast<AccessibilityListBox*>(coreSelection);937 listBox->setSelectedChildren(selectedItems);938 listBox->selectedChildren(selectedItems);939 return !selectedItems.size();940 }941 return false;942 }943 944 static AtkObject* webkit_accessible_selection_ref_selection(AtkSelection* selection, gint i)945 {946 AccessibilityObject* option = optionFromSelection(selection, i);947 if (option) {948 AtkObject* child = option->wrapper();949 g_object_ref(child);950 return child;951 }952 953 return 0;954 }955 956 static gint webkit_accessible_selection_get_selection_count(AtkSelection* selection)957 {958 AccessibilityObject* coreSelection = core(selection);959 if (!coreSelection || !coreSelection->isAccessibilityRenderObject())960 return 0;961 962 if (coreSelection->isListBox()) {963 AccessibilityObject::AccessibilityChildrenVector selectedItems;964 coreSelection->selectedChildren(selectedItems);965 return static_cast<gint>(selectedItems.size());966 }967 968 if (coreSelection->isMenuList()) {969 RenderObject* renderer = coreSelection->renderer();970 if (!renderer)971 return 0;972 973 int selectedIndex = toHTMLSelectElement(renderer->node())->selectedIndex();974 return selectedIndex >= 0 && selectedIndex < static_cast<int>(toHTMLSelectElement(renderer->node())->listItems().size());975 }976 977 return 0;978 }979 980 static gboolean webkit_accessible_selection_is_child_selected(AtkSelection* selection, gint i)981 {982 AccessibilityObject* coreSelection = core(selection);983 if (!coreSelection)984 return 0;985 986 AccessibilityObject* option = optionFromList(selection, i);987 if (option && (coreSelection->isListBox() || coreSelection->isMenuList()))988 return option->isSelected();989 990 return false;991 }992 993 static gboolean webkit_accessible_selection_remove_selection(AtkSelection* selection, gint i)994 {995 AccessibilityObject* coreSelection = core(selection);996 if (!coreSelection)997 return 0;998 999 // TODO: This is only getting called if i == 0. What is preventing the rest?1000 AccessibilityObject* option = optionFromSelection(selection, i);1001 if (option && (coreSelection->isListBox() || coreSelection->isMenuList())) {1002 option->setSelected(false);1003 return !option->isSelected();1004 }1005 1006 return false;1007 }1008 1009 static gboolean webkit_accessible_selection_select_all_selection(AtkSelection* selection)1010 {1011 AccessibilityObject* coreSelection = core(selection);1012 if (!coreSelection || !coreSelection->isMultiSelectable())1013 return false;1014 1015 AccessibilityObject::AccessibilityChildrenVector children = coreSelection->children();1016 if (coreSelection->isListBox()) {1017 AccessibilityListBox* listBox = static_cast<AccessibilityListBox*>(coreSelection);1018 listBox->setSelectedChildren(children);1019 AccessibilityObject::AccessibilityChildrenVector selectedItems;1020 listBox->selectedChildren(selectedItems);1021 return selectedItems.size() == children.size();1022 }1023 1024 return false;1025 }1026 1027 static void atk_selection_interface_init(AtkSelectionIface* iface)1028 {1029 iface->add_selection = webkit_accessible_selection_add_selection;1030 iface->clear_selection = webkit_accessible_selection_clear_selection;1031 iface->ref_selection = webkit_accessible_selection_ref_selection;1032 iface->get_selection_count = webkit_accessible_selection_get_selection_count;1033 iface->is_child_selected = webkit_accessible_selection_is_child_selected;1034 iface->remove_selection = webkit_accessible_selection_remove_selection;1035 iface->select_all_selection = webkit_accessible_selection_select_all_selection;1036 }1037 1038 830 // Text 1039 831 … … 2087 1879 static const GInterfaceInfo AtkInterfacesInitFunctions[] = { 2088 1880 {reinterpret_cast<GInterfaceInitFunc>(webkitAccessibleActionInterfaceInit), 0, 0}, 2089 {(GInterfaceInitFunc)atk_selection_interface_init, 2090 (GInterfaceFinalizeFunc) 0, 0}, 1881 {reinterpret_cast<GInterfaceInitFunc>(webkitAccessibleSelectionInterfaceInit), 0, 0}, 2091 1882 {reinterpret_cast<GInterfaceInitFunc>(webkitAccessibleEditableTextInterfaceInit), 0, 0}, 2092 1883 {(GInterfaceInitFunc)atk_text_interface_init,
Note: See TracChangeset
for help on using the changeset viewer.