summaryrefslogtreecommitdiffstats
path: root/accessible/ios/AccessibleWrap.mm
diff options
context:
space:
mode:
Diffstat (limited to 'accessible/ios/AccessibleWrap.mm')
-rw-r--r--accessible/ios/AccessibleWrap.mm49
1 files changed, 49 insertions, 0 deletions
diff --git a/accessible/ios/AccessibleWrap.mm b/accessible/ios/AccessibleWrap.mm
new file mode 100644
index 0000000000..576e854c60
--- /dev/null
+++ b/accessible/ios/AccessibleWrap.mm
@@ -0,0 +1,49 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+#include "AccessibleWrap.h"
+#include "LocalAccessible-inl.h"
+
+#import "MUIAccessible.h"
+#import "MUIRootAccessible.h"
+
+using namespace mozilla::a11y;
+
+//-----------------------------------------------------
+// construction
+//-----------------------------------------------------
+AccessibleWrap::AccessibleWrap(nsIContent* aContent, DocAccessible* aDoc)
+ : LocalAccessible(aContent, aDoc),
+ mNativeObject(nil),
+ mNativeInited(false) {}
+
+void AccessibleWrap::Shutdown() {
+ // this ensures we will not try to re-create the native object.
+ mNativeInited = true;
+
+ // we really intend to access the member directly.
+ if (mNativeObject) {
+ [mNativeObject expire];
+ [mNativeObject release];
+ mNativeObject = nil;
+ }
+
+ LocalAccessible::Shutdown();
+}
+
+id AccessibleWrap::GetNativeObject() {
+ if (!mNativeInited && !IsDefunct()) {
+ Class type = IsRoot() ? [MUIRootAccessible class] : [MUIAccessible class];
+ mNativeObject = [[type alloc] initWithAccessible:this];
+ }
+
+ mNativeInited = true;
+
+ return mNativeObject;
+}
+
+void AccessibleWrap::GetNativeInterface(void** aOutInterface) {
+ *aOutInterface = static_cast<void*>(GetNativeObject());
+}