+2005-01-28 David Harrison <harrison@apple.com>
+
+ Reviewed by Darin.
+
+ <rdar://problem/3584942> AX: Safari Accessibility parent-child mismatch
+
+ Use AppKit SPI _accessibilityParentForSubview to return KWQAccObject parent of AppKit AX object.
+
+ * kwq/KWQAccObject.mm:
+ (-[KWQAccObject _accessibilityParentForSubview:]):
+ New.
+
2005-01-27 Adele Amchan <adele@apple.com>
fixed by Darin, reviewed by me.
#import "KWQAssertions.h"
#import "KWQFoundationExtras.h"
#import "KWQWidget.h"
+#import "WebCoreBridge.h"
#import "dom_docimpl.h"
#import "dom_elementimpl.h"
#import "visible_units.h"
#import "html_miscimpl.h"
#import "qptrstack.h"
+#import "DOMInternal.h"
using DOM::DocumentImpl;
using DOM::ElementImpl;
return obj->document()->getAccObjectCache()->accObject(obj);
}
+// _accessibilityParentForSubview is called by AppKit when moving up the tree
+// we override it so that we can return our KWQAccObject parent of an AppKit AX object
+- (id)_accessibilityParentForSubview:(NSView *)subview
+{
+ ASSERT(m_renderer && m_renderer->document());
+
+ KHTMLPart* docPart = m_renderer->document()->part();
+ if (!docPart)
+ return nil;
+
+ // check for nested WebArea (WebFrameView does not support elementForView)
+ if (m_renderer->isCanvas() && ([subview superview] == docPart->view()->getDocumentView()))
+ return [self accessibilityIsIgnored] == false ? self : [self parentObjectUnignored];
+
+ // check for view that supports elementForView
+ DOMElement *domElement = [KWQ(docPart)->bridge() elementForView:subview];
+ if (!domElement)
+ return nil;
+
+ RenderObject *renderer = [domElement _elementImpl]->renderer();
+ if (!renderer)
+ return nil;
+
+ KWQAccObject* obj = renderer->document()->getAccObjectCache()->accObject(renderer);
+ return [obj parentObjectUnignored];
+}
+
- (id)accessibilityFocusedUIElement
{
// NOTE: BUG support nested WebAreas