diff --git a/accessible/src/mac/Makefile.in b/accessible/src/mac/Makefile.in index 34125820066..5ab96daec8c 100644 --- a/accessible/src/mac/Makefile.in +++ b/accessible/src/mac/Makefile.in @@ -75,7 +75,6 @@ EXPORTS = \ nsApplicationAccessibleWrap.h \ mozDocAccessible.h \ mozAccessible.h \ - mozAccessibleWrapper.h \ mozAccessibleProtocol.h \ mozActionElements.h \ mozTextAccessible.h \ diff --git a/accessible/src/mac/mozAccessibleWrapper.h b/accessible/src/mac/mozAccessibleWrapper.h deleted file mode 100644 index 676fbdcde6d..00000000000 --- a/accessible/src/mac/mozAccessibleWrapper.h +++ /dev/null @@ -1,91 +0,0 @@ -/* -*- Mode: Objective-C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ -/* ***** BEGIN LICENSE BLOCK ***** - * Version: MPL 1.1/GPL 2.0/LGPL 2.1 - * - * The contents of this file are subject to the Mozilla Public License Version - * 1.1 (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * http://www.mozilla.org/MPL/ - * - * Software distributed under the License is distributed on an "AS IS" basis, - * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License - * for the specific language governing rights and limitations under the - * License. - * - * The Original Code is mozilla.org code. - * - * The Initial Developer of the Original Code is - * Mozilla Foundation. - * Portions created by the Initial Developer are Copyright (C) 2006 - * the Initial Developer. All Rights Reserved. - * - * Contributor(s): - * Original Author: HÃ¥kan Waara - * - * Alternatively, the contents of this file may be used under the terms of - * either of the GNU General Public License Version 2 or later (the "GPL"), - * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), - * in which case the provisions of the GPL or the LGPL are applicable instead - * of those above. If you wish to allow use of your version of this file only - * under the terms of either the GPL or the LGPL, and not to allow others to - * use your version of this file under the terms of the MPL, indicate your - * decision by deleting the provisions above and replace them with the notice - * and other provisions required by the GPL or the LGPL. If you do not delete - * the provisions above, a recipient may use your version of this file under - * the terms of any one of the MPL, the GPL or the LGPL. - * - * ***** END LICENSE BLOCK ***** */ - -#include "nsAccessibleWrap.h" - -#include "nsObjCExceptions.h" - -#import "mozAccessible.h" - -/* Wrapper class. - - This is needed because C++-only headers such as nsAccessibleWrap.h must not depend - on Objective-C and Cocoa. Classes in accessible/src/base depend on them, and other modules in turn - depend on them, so in the end all of Mozilla would end up having to link against Cocoa and be renamed .mm :-) - - In order to have a mozAccessible object wrapped, the user passes itself (nsAccessible*) and the subclass of - mozAccessible that should be instantiated. - - In the header file, the AccessibleWrapper is used as the member, and is forward-declared (because this header - cannot be #included directly. -*/ - -struct AccessibleWrapper { - mozAccessible *object; - AccessibleWrapper (nsAccessibleWrap *parent, Class classType) { - NS_OBJC_BEGIN_TRY_ABORT_BLOCK; - - object = (mozAccessible*)[[classType alloc] initWithAccessible:parent]; - - NS_OBJC_END_TRY_ABORT_BLOCK; - } - - ~AccessibleWrapper () { - NS_OBJC_BEGIN_TRY_ABORT_BLOCK; - - // if some third-party still holds on to the object, it's important that it is marked - // as expired, so it can't do any harm (e.g., walk into an expired hierarchy of nodes). - [object expire]; - - [object release]; - - NS_OBJC_END_TRY_ABORT_BLOCK; - } - - mozAccessible* getNativeObject () { - return object; - } - - bool isIgnored () { - NS_OBJC_BEGIN_TRY_ABORT_BLOCK_RETURN; - - return (bool)[object accessibilityIsIgnored]; - - NS_OBJC_END_TRY_ABORT_BLOCK_RETURN(false); - } -}; diff --git a/accessible/src/mac/nsAccessibleWrap.h b/accessible/src/mac/nsAccessibleWrap.h index 4f9a705b7de..3bd14d5bdac 100644 --- a/accessible/src/mac/nsAccessibleWrap.h +++ b/accessible/src/mac/nsAccessibleWrap.h @@ -55,7 +55,9 @@ #include "nsTArray.h" #include "nsAutoPtr.h" -struct AccessibleWrapper; +#if defined(__OBJC__) +@class mozAccessible; +#endif class nsAccessibleWrap : public nsAccessible { @@ -100,8 +102,14 @@ class nsAccessibleWrap : public nsAccessible */ bool AncestorIsFlat(); - // Wrapper around our native object. - AccessibleWrapper *mNativeWrapper; + /** + * mozAccessible object. If we are in Objective-C, we use the actual Obj-C class. + */ +#if defined(__OBJC__) + mozAccessible* mNativeObject; +#else + id mNativeObject; +#endif }; // Define unsupported wrap classes here diff --git a/accessible/src/mac/nsAccessibleWrap.mm b/accessible/src/mac/nsAccessibleWrap.mm index b04444dfc89..c6e655887a5 100644 --- a/accessible/src/mac/nsAccessibleWrap.mm +++ b/accessible/src/mac/nsAccessibleWrap.mm @@ -41,46 +41,49 @@ #import "nsRoleMap.h" -#import "mozAccessibleWrapper.h" #import "mozAccessible.h" #import "mozActionElements.h" #import "mozTextAccessible.h" nsAccessibleWrap:: nsAccessibleWrap(nsIContent *aContent, nsIWeakReference *aShell) : - nsAccessible(aContent, aShell), mNativeWrapper(nsnull) + nsAccessible(aContent, aShell), mNativeObject(nil) { } nsAccessibleWrap::~nsAccessibleWrap() { - if (mNativeWrapper) { - delete mNativeWrapper; - mNativeWrapper = nsnull; - } } bool nsAccessibleWrap::Init () { + NS_OBJC_BEGIN_TRY_ABORT_BLOCK_NIL; + if (!nsAccessible::Init()) return false; - if (!mNativeWrapper && !AncestorIsFlat()) { + if (!mNativeObject && !AncestorIsFlat()) { // Create our native object using the class type specified in GetNativeType(). - mNativeWrapper = new AccessibleWrapper (this, GetNativeType()); - if (!mNativeWrapper) + mNativeObject = [[GetNativeType() alloc] initWithAccessible:this]; + if(!mNativeObject) return false; } return true; + + NS_OBJC_END_TRY_ABORT_BLOCK_RETURN(false); } NS_IMETHODIMP nsAccessibleWrap::GetNativeInterface (void **aOutInterface) { - if (mNativeWrapper) { - *aOutInterface = (void**)mNativeWrapper->getNativeObject(); + NS_ENSURE_ARG_POINTER(aOutInterface); + + *aOutInterface = nsnull; + + if (mNativeObject) { + *aOutInterface = static_cast(mNativeObject); return NS_OK; } return NS_ERROR_FAILURE; @@ -141,9 +144,10 @@ nsAccessibleWrap::GetNativeType () void nsAccessibleWrap::Shutdown () { - if (mNativeWrapper) { - delete mNativeWrapper; - mNativeWrapper = nsnull; + if (mNativeObject) { + [mNativeObject expire]; + [mNativeObject release]; + mNativeObject = nil; } nsAccessible::Shutdown(); @@ -201,10 +205,9 @@ nsAccessibleWrap::InvalidateChildren() { NS_OBJC_BEGIN_TRY_ABORT_BLOCK; - if (mNativeWrapper) { - mozAccessible *object = mNativeWrapper->getNativeObject(); - [object invalidateChildren]; - } + if (mNativeObject) + [mNativeObject invalidateChildren]; + nsAccessible::InvalidateChildren(); NS_OBJC_END_TRY_ABORT_BLOCK; @@ -215,7 +218,11 @@ nsAccessibleWrap::InvalidateChildren() bool nsAccessibleWrap::IsIgnored() { - return (mNativeWrapper == nsnull) || mNativeWrapper->isIgnored(); + NS_OBJC_BEGIN_TRY_ABORT_BLOCK_RETURN; + + return (mNativeObject == nil) || [mNativeObject accessibilityIsIgnored]; + + NS_OBJC_END_TRY_ABORT_BLOCK_RETURN(false); } void diff --git a/accessible/src/mac/nsDocAccessibleWrap.mm b/accessible/src/mac/nsDocAccessibleWrap.mm index e1854e3cd92..237ad94083a 100644 --- a/accessible/src/mac/nsDocAccessibleWrap.mm +++ b/accessible/src/mac/nsDocAccessibleWrap.mm @@ -37,7 +37,7 @@ #include "nsDocAccessibleWrap.h" -#import "mozAccessibleWrapper.h" +#import "mozAccessible.h" nsDocAccessibleWrap:: nsDocAccessibleWrap(nsIDocument *aDocument, nsIContent *aRootContent, @@ -56,12 +56,10 @@ nsDocAccessibleWrap::Init () if (!nsDocAccessible::Init()) return false; - NS_ASSERTION(!mNativeWrapper, "nsDocAccessibleWrap::Init() called more than once!"); - - if (!mNativeWrapper) { + if (!mNativeObject) { // Create our native object using the class type specified in GetNativeType(). - mNativeWrapper = new AccessibleWrapper (this, GetNativeType()); - if (!mNativeWrapper) + mNativeObject = [[GetNativeType() alloc] initWithAccessible:this]; + if (!mNativeObject) return false; } diff --git a/accessible/src/mac/nsRootAccessibleWrap.mm b/accessible/src/mac/nsRootAccessibleWrap.mm index b4bc62f07c1..23eaa5cb182 100644 --- a/accessible/src/mac/nsRootAccessibleWrap.mm +++ b/accessible/src/mac/nsRootAccessibleWrap.mm @@ -45,9 +45,6 @@ #include "nsIWidget.h" #include "nsIViewManager.h" -#import "mozAccessibleWrapper.h" - - nsRootAccessibleWrap:: nsRootAccessibleWrap(nsIDocument *aDocument, nsIContent *aRootContent, nsIWeakReference *aShell) :