Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(301)

Unified Diff: ui/accessibility/platform/ax_platform_node_auralinux.cc

Issue 1005293002: Re-land: Resurrect Aura Linux accessibility. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: ui/accessibility/platform/ax_platform_node_auralinux.cc
diff --git a/ui/accessibility/platform/ax_platform_node_auralinux.cc b/ui/accessibility/platform/ax_platform_node_auralinux.cc
new file mode 100644
index 0000000000000000000000000000000000000000..b675dc4a42ea1c277cb4c241eba563f7a2c39f04
--- /dev/null
+++ b/ui/accessibility/platform/ax_platform_node_auralinux.cc
@@ -0,0 +1,283 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "ui/accessibility/platform/ax_platform_node_auralinux.h"
+
+#include "base/command_line.h"
+#include "base/strings/sys_string_conversions.h"
+#include "ui/accessibility/ax_node_data.h"
+#include "ui/accessibility/platform/atk_util_auralinux.h"
+#include "ui/accessibility/platform/ax_platform_node_delegate.h"
+
+//
+// ax_platform_node_auralinux AtkObject definition and implementation.
+//
+
+G_BEGIN_DECLS
+
+#define AX_PLATFORM_NODE_AURALINUX_TYPE (ax_platform_node_auralinux_get_type())
+#define AX_PLATFORM_NODE_AURALINUX(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST( \
+ (obj), AX_PLATFORM_NODE_AURALINUX_TYPE, AXPlatformNodeAuraLinuxObject))
+#define AX_PLATFORM_NODE_AURALINUX_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST( \
+ (klass), AX_PLATFORM_NODE_AURALINUX_TYPE, AXPlatformNodeAuraLinuxClass))
+#define IS_AX_PLATFORM_NODE_AURALINUX(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj), AX_PLATFORM_NODE_AURALINUX_TYPE))
+#define IS_AX_PLATFORM_NODE_AURALINUX_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass), AX_PLATFORM_NODE_AURALINUX_TYPE))
+#define AX_PLATFORM_NODE_AURALINUX_GET_CLASS(obj) \
+ (G_TYPE_INSTANCE_GET_CLASS( \
+ (obj), AX_PLATFORM_NODE_AURALINUX_TYPE, AXPlatformNodeAuraLinuxClass))
+
+typedef struct _AXPlatformNodeAuraLinuxObject AXPlatformNodeAuraLinuxObject;
+typedef struct _AXPlatformNodeAuraLinuxClass AXPlatformNodeAuraLinuxClass;
+
+struct _AXPlatformNodeAuraLinuxObject {
+ AtkObject parent;
+ ui::AXPlatformNodeAuraLinux* m_object;
+};
+
+struct _AXPlatformNodeAuraLinuxClass {
+ AtkObjectClass parent_class;
+};
+
+GType ax_platform_node_auralinux_get_type();
+
+static ui::AXPlatformNodeAuraLinux* ToAXPlatformNodeAuraLinux(
+ AXPlatformNodeAuraLinuxObject* atk_object) {
+ if (!atk_object)
+ return nullptr;
+
+ return atk_object->m_object;
+}
+
+static ui::AXPlatformNodeAuraLinux* AtkObjectToAXPlatformNodeAuraLinux(
+ AtkObject* atk_object) {
+ if (!atk_object)
+ return nullptr;
+
+ if (IS_AX_PLATFORM_NODE_AURALINUX(atk_object))
+ return ToAXPlatformNodeAuraLinux(AX_PLATFORM_NODE_AURALINUX(atk_object));
+
+ return nullptr;
+}
+
+static const gchar* ax_platform_node_auralinux_get_name(AtkObject* atk_object) {
+ ui::AXPlatformNodeAuraLinux* obj =
+ AtkObjectToAXPlatformNodeAuraLinux(atk_object);
+ if (!obj)
+ return nullptr;
+
+ return obj->GetStringAttribute(ui::AX_ATTR_NAME).c_str();
+}
+
+static const gchar* ax_platform_node_auralinux_get_description(
+ AtkObject* atk_object) {
+ ui::AXPlatformNodeAuraLinux* obj =
+ AtkObjectToAXPlatformNodeAuraLinux(atk_object);
+ if (!obj)
+ return nullptr;
+
+ return obj->GetStringAttribute(
+ ui::AX_ATTR_DESCRIPTION).c_str();
+}
+
+static AtkObject* ax_platform_node_auralinux_get_parent(AtkObject* atk_object) {
+ ui::AXPlatformNodeAuraLinux* obj =
+ AtkObjectToAXPlatformNodeAuraLinux(atk_object);
+ if (!obj)
+ return nullptr;
+
+ return obj->GetParent();
+}
+
+static gint ax_platform_node_auralinux_get_n_children(AtkObject* atk_object) {
+ ui::AXPlatformNodeAuraLinux* obj =
+ AtkObjectToAXPlatformNodeAuraLinux(atk_object);
+ if (!obj)
+ return 0;
+
+ return obj->GetChildCount();
+}
+
+static AtkObject* ax_platform_node_auralinux_ref_child(
+ AtkObject* atk_object, gint index) {
+ ui::AXPlatformNodeAuraLinux* obj =
+ AtkObjectToAXPlatformNodeAuraLinux(atk_object);
+ if (!obj)
+ return nullptr;
+
+ AtkObject* result = obj->ChildAtIndex(index);
+ if (result)
+ g_object_ref(result);
+ return result;
+}
+
+static AtkRole ax_platform_node_auralinux_get_role(AtkObject* atk_object) {
+ ui::AXPlatformNodeAuraLinux* obj =
+ AtkObjectToAXPlatformNodeAuraLinux(atk_object);
+ if (!obj)
+ return ATK_ROLE_INVALID;
+ return obj->GetAtkRole();
+}
+
+//
+// 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) {
+ ATK_OBJECT_CLASS(ax_platform_node_auralinux_parent_class)->initialize(
+ atk_object, data);
+ }
+
+ AX_PLATFORM_NODE_AURALINUX(atk_object)->m_object =
+ reinterpret_cast<ui::AXPlatformNodeAuraLinux*>(data);
+}
+
+static void ax_platform_node_auralinux_finalize(GObject* atk_object) {
+ G_OBJECT_CLASS(ax_platform_node_auralinux_parent_class)->finalize(atk_object);
+}
+
+static void ax_platform_node_auralinux_class_init(AtkObjectClass* klass) {
+ GObjectClass* gobject_class = G_OBJECT_CLASS(klass);
+ ax_platform_node_auralinux_parent_class = g_type_class_peek_parent(klass);
+
+ gobject_class->finalize = ax_platform_node_auralinux_finalize;
+ klass->initialize = ax_platform_node_auralinux_init;
+ klass->get_name = ax_platform_node_auralinux_get_name;
+ klass->get_description = ax_platform_node_auralinux_get_description;
+ klass->get_parent = ax_platform_node_auralinux_get_parent;
+ 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;
+}
+
+GType ax_platform_node_auralinux_get_type() {
+ static volatile gsize type_volatile = 0;
+
+ if (g_once_init_enter(&type_volatile)) {
+ static const GTypeInfo tinfo = {
+ sizeof(AXPlatformNodeAuraLinuxClass),
+ (GBaseInitFunc) 0,
+ (GBaseFinalizeFunc) 0,
+ (GClassInitFunc) ax_platform_node_auralinux_class_init,
+ (GClassFinalizeFunc) 0,
+ 0, /* class data */
+ sizeof(AXPlatformNodeAuraLinuxObject), /* instance size */
+ 0, /* nb preallocs */
+ (GInstanceInitFunc) 0,
+ 0 /* value table */
+ };
+
+ GType type = g_type_register_static(
+ ATK_TYPE_OBJECT, "AXPlatformNodeAuraLinux", &tinfo, GTypeFlags(0));
+ g_once_init_leave(&type_volatile, type);
+ }
+
+ return type_volatile;
+}
+
+AXPlatformNodeAuraLinuxObject* ax_platform_node_auralinux_new(
+ ui::AXPlatformNodeAuraLinux* obj) {
+ #if !GLIB_CHECK_VERSION(2, 36, 0)
+ static bool first_time = true;
+ if (first_time) {
+ g_type_init();
+ first_time = false;
+ }
+ #endif
+
+ GType type = AX_PLATFORM_NODE_AURALINUX_TYPE;
+ AtkObject* atk_object = static_cast<AtkObject*>(g_object_new(type, 0));
+ atk_object_initialize(atk_object, obj);
+ return AX_PLATFORM_NODE_AURALINUX(atk_object);
+}
+
+void ax_platform_node_auralinux_detach(
+ AXPlatformNodeAuraLinuxObject* atk_object) {
+ atk_object->m_object = nullptr;
+}
+
+G_END_DECLS
+
+//
+// AXPlatformNodeAuraLinux implementation.
+//
+
+namespace ui {
+
+// static
+AXPlatformNode* AXPlatformNode::Create(AXPlatformNodeDelegate* delegate) {
+ AXPlatformNodeAuraLinux* node = new AXPlatformNodeAuraLinux();
+ node->Init(delegate);
+ return node;
+}
+
+// static
+AXPlatformNode* AXPlatformNodeAuraLinux::application_ = nullptr;
+
+// static
+void AXPlatformNodeAuraLinux::SetApplication(AXPlatformNode* application) {
+ application_ = application;
+ AtkUtilAuraLinux::GetInstance();
+}
+
+AtkRole AXPlatformNodeAuraLinux::GetAtkRole() {
+ switch (GetData().role) {
+ case ui::AX_ROLE_APPLICATION:
+ return ATK_ROLE_APPLICATION;
+ case ui::AX_ROLE_BUTTON:
+ return ATK_ROLE_PUSH_BUTTON;
+ case ui::AX_ROLE_CHECK_BOX:
+ return ATK_ROLE_CHECK_BOX;
+ case ui::AX_ROLE_COMBO_BOX:
+ return ATK_ROLE_COMBO_BOX;
+ case ui::AX_ROLE_STATIC_TEXT:
+ return ATK_ROLE_TEXT;
+ case ui::AX_ROLE_TEXT_FIELD:
+ return ATK_ROLE_ENTRY;
+ case ui::AX_ROLE_WINDOW:
+ return ATK_ROLE_WINDOW;
+ default:
+ return ATK_ROLE_UNKNOWN;
+ }
+}
+
+AXPlatformNodeAuraLinux::AXPlatformNodeAuraLinux()
+ : atk_object_(nullptr) {
+}
+
+AXPlatformNodeAuraLinux::~AXPlatformNodeAuraLinux() {
+ g_object_unref(atk_object_);
+}
+
+void AXPlatformNodeAuraLinux::Init(AXPlatformNodeDelegate* delegate) {
+ // Initialize ATK.
+ AXPlatformNodeBase::Init(delegate);
+ atk_object_ = ATK_OBJECT(ax_platform_node_auralinux_new(this));
+}
+
+void AXPlatformNodeAuraLinux::Destroy() {
+ delegate_ = nullptr;
+ delete this;
+}
+
+gfx::NativeViewAccessible AXPlatformNodeAuraLinux::GetNativeViewAccessible() {
+ return atk_object_;
+}
+
+void AXPlatformNodeAuraLinux::NotifyAccessibilityEvent(ui::AXEvent event_type) {
+}
+
+int AXPlatformNodeAuraLinux::GetIndexInParent() {
+ return 0;
+}
+
+} // namespace ui

Powered by Google App Engine
This is Rietveld 408576698