diff options
author | shreeram.k <shreeram.k@samsung.com> | 2015-03-22 21:29:59 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-03-23 04:30:29 +0000 |
commit | bf7014cb8f24b69f601206e114edccbdda2f2f5f (patch) | |
tree | e9442bdbc27d6e8d0527ec27c0a5ee845c4c4817 | |
parent | 496873f41543e6564ea0511d318cbbfbafde6f19 (diff) | |
download | chromium_src-bf7014cb8f24b69f601206e114edccbdda2f2f5f.zip chromium_src-bf7014cb8f24b69f601206e114edccbdda2f2f5f.tar.gz chromium_src-bf7014cb8f24b69f601206e114edccbdda2f2f5f.tar.bz2 |
Implementing ATK state mapping for Chrome UI.
This CL includes implementation of ATK state mapping for chrome UI.
Also, some roles has been added in this CL.
BUG=463671
Review URL: https://codereview.chromium.org/1021933003
Cr-Commit-Position: refs/heads/master@{#321734}
-rw-r--r-- | ui/accessibility/platform/ax_platform_node_auralinux.cc | 55 | ||||
-rw-r--r-- | ui/accessibility/platform/ax_platform_node_auralinux.h | 1 |
2 files changed, 54 insertions, 2 deletions
diff --git a/ui/accessibility/platform/ax_platform_node_auralinux.cc b/ui/accessibility/platform/ax_platform_node_auralinux.cc index 3fed9e8..ad55def 100644 --- a/ui/accessibility/platform/ax_platform_node_auralinux.cc +++ b/ui/accessibility/platform/ax_platform_node_auralinux.cc @@ -45,6 +45,8 @@ struct _AXPlatformNodeAuraLinuxClass { GType ax_platform_node_auralinux_get_type(); +static gpointer ax_platform_node_auralinux_parent_class = nullptr; + static ui::AXPlatformNodeAuraLinux* ToAXPlatformNodeAuraLinux( AXPlatformNodeAuraLinuxObject* atk_object) { if (!atk_object) @@ -123,13 +125,28 @@ static AtkRole ax_platform_node_auralinux_get_role(AtkObject* atk_object) { return obj->GetAtkRole(); } +static AtkStateSet* ax_platform_node_auralinux_ref_state_set( + AtkObject* atk_object) { + ui::AXPlatformNodeAuraLinux* obj = + AtkObjectToAXPlatformNodeAuraLinux(atk_object); + AtkStateSet* state_set = + ATK_OBJECT_CLASS(ax_platform_node_auralinux_parent_class)-> + ref_state_set(atk_object); + + if (!obj) { + atk_state_set_add_state(state_set, ATK_STATE_DEFUNCT); + return state_set; + } + obj->GetAtkState(state_set); + + return state_set; +} + // // The rest of the AXPlatformNodeAuraLinux code, not specific to one // of the Atk* interfaces. // -static gpointer ax_platform_node_auralinux_parent_class = nullptr; - static void ax_platform_node_auralinux_init(AtkObject* atk_object, gpointer data) { if (ATK_OBJECT_CLASS(ax_platform_node_auralinux_parent_class)->initialize) { @@ -157,6 +174,7 @@ static void ax_platform_node_auralinux_class_init(AtkObjectClass* klass) { klass->get_n_children = ax_platform_node_auralinux_get_n_children; klass->ref_child = ax_platform_node_auralinux_ref_child; klass->get_role = ax_platform_node_auralinux_get_role; + klass->ref_state_set = ax_platform_node_auralinux_ref_state_set; } GType ax_platform_node_auralinux_get_type() { @@ -241,10 +259,18 @@ AtkRole AXPlatformNodeAuraLinux::GetAtkRole() { return ATK_ROLE_CHECK_BOX; case ui::AX_ROLE_COMBO_BOX: return ATK_ROLE_COMBO_BOX; + case ui::AX_ROLE_DIALOG: + return ATK_ROLE_DIALOG; case ui::AX_ROLE_GROUP: return ATK_ROLE_PANEL; + case ui::AX_ROLE_IMAGE: + return ATK_ROLE_IMAGE; case ui::AX_ROLE_MENU_ITEM: return ATK_ROLE_MENU_ITEM; + case ui::AX_ROLE_SCROLL_BAR: + return ATK_ROLE_SCROLL_BAR; + case ui::AX_ROLE_SLIDER: + return ATK_ROLE_SLIDER; case ui::AX_ROLE_SPLITTER: return ATK_ROLE_SEPARATOR; case ui::AX_ROLE_STATIC_TEXT: @@ -264,6 +290,31 @@ AtkRole AXPlatformNodeAuraLinux::GetAtkRole() { } } +void AXPlatformNodeAuraLinux::GetAtkState(AtkStateSet* state_set) { + uint32 state = GetData().state; + + if (state & (1 << ui::AX_STATE_CHECKED)) + atk_state_set_add_state(state_set, ATK_STATE_CHECKED); + if (state & (1 << ui::AX_STATE_DEFAULT)) + atk_state_set_add_state(state_set, ATK_STATE_DEFAULT); + if (state & (1 << ui::AX_STATE_EDITABLE)) + atk_state_set_add_state(state_set, ATK_STATE_EDITABLE); + if (state & (1 << ui::AX_STATE_ENABLED)) + atk_state_set_add_state(state_set, ATK_STATE_ENABLED); + if (state & (1 << ui::AX_STATE_EXPANDED)) + atk_state_set_add_state(state_set, ATK_STATE_EXPANDED); + if (state & (1 << ui::AX_STATE_FOCUSABLE)) + atk_state_set_add_state(state_set, ATK_STATE_FOCUSABLE); + if (state & (1 << ui::AX_STATE_FOCUSED)) + atk_state_set_add_state(state_set, ATK_STATE_FOCUSED); + if (state & (1 << ui::AX_STATE_PRESSED)) + atk_state_set_add_state(state_set, ATK_STATE_PRESSED); + if (state & (1 << ui::AX_STATE_SELECTABLE)) + atk_state_set_add_state(state_set, ATK_STATE_SELECTABLE); + if (state & (1 << ui::AX_STATE_SELECTED)) + atk_state_set_add_state(state_set, ATK_STATE_SELECTED); +} + AXPlatformNodeAuraLinux::AXPlatformNodeAuraLinux() : atk_object_(nullptr) { } diff --git a/ui/accessibility/platform/ax_platform_node_auralinux.h b/ui/accessibility/platform/ax_platform_node_auralinux.h index eea1427..030a66a 100644 --- a/ui/accessibility/platform/ax_platform_node_auralinux.h +++ b/ui/accessibility/platform/ax_platform_node_auralinux.h @@ -23,6 +23,7 @@ class AXPlatformNodeAuraLinux : public AXPlatformNodeBase { static AXPlatformNode* application() { return application_; } AtkRole GetAtkRole(); + void GetAtkState(AtkStateSet* state_set); // AXPlatformNode overrides. void Destroy() override; |