View-based NSOutlineView doesn't support Accessibility properly
| Originator: | peter.maurer |
|
| Number: | rdar://12045566 |
Date Originated: | 2012-08-07 |
| Status: | Open |
Resolved: | |
| Product: | Mac OS X |
Product Version: | 10.8 |
| Classification: | Other Bug |
Reproducible: | Always |
SUMMARY:
Setting individual row heights via [NSOutlineViewDelegate outlineView:heightOfRowByItem:] and then exposing the NSOutlineView in question to Accessibility requests results into [NSTableView preparedCellAtColumn:row:] being sent, which isn't supposed to be sent to view-based table/outline views.
STEPS TO REPRODUCE:
1) Install and run the attached ModifiedTableViewPlayground project. (This is based on Apple's TableViewPlayground sample project, with an added [NSOutlineViewDelegate outlineView:heightOfRowByItem:] implementation in ATComplexOutlineController, and a deliberate division by zero crasher in [TestOutlineView preparedCellAtColumn:row:] to highlight the problem.
2) Run Accessibility Inspector.
3) Move the mouse around over the "Complex OutlineView" window's outline view hierarchy, while watching system.log in Console.app.
EXPECTED RESULTS:
No ominous log messages.
ACTUAL RESULTS:
After hovering the mouse over a folder cell, I eventually get this message in Console:
06.08.12 01:20:59,638 TableViewPlayground[20356]: View Based NSTableView error: preparedCellAtColumn:row: was called. Please log a bug with the backtrace from this log, or stop using the method.
And the deliberate crash I added (see above) yields the following backtrace:
0 com.apple.demo.TableViewPlayground 0x0000000100fe543b -[TestOutlineView preparedCellAtColumn:row:] + 59 (ATComplexOutlineController.m:59)
1 com.apple.AppKit 0x00007fff85082c43 -[NSTableViewCellProxy cellForProxy] + 153
2 com.apple.AppKit 0x00007fff85082c77 -[NSTableViewCellProxy realElement] + 41
3 com.apple.AppKit 0x00007fff84db675c -[NSAccessibilityProxy accessibilityHitTest:] + 38
4 com.apple.AppKit 0x00007fff851d1f60 -[NSOutlineColumnMockGroup accessibilityHitTest:] + 472
5 com.apple.AppKit 0x00007fff84fcb51d -[NSOutlineRow accessibilityHitTest:] + 301
6 com.apple.AppKit 0x00007fff85081db1 -[NSTableView(NSTableViewAccessibility) accessibilityHitTest:] + 317
7 com.apple.AppKit 0x00007fff8515c96a -[NSWindow(NSWindowAccessibility) accessibilityHitTest:] + 305
8 com.apple.AppKit 0x00007fff84dcdc3d -[NSApplication(NSApplicationAccessibility) accessibilityHitTest:] + 252
9 com.apple.AppKit 0x00007fff84db038b CopyElementAtPosition + 127
10 com.apple.HIServices 0x00007fff8b039625 _AXXMIGCopyElementAtPosition + 143
11 com.apple.HIServices 0x00007fff8b03fd53 _XCopyElementAtPosition + 265
12 com.apple.HIServices 0x00007fff8b01df9e mshMIGPerform + 443
13 com.apple.CoreFoundation 0x00007fff84136a19 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 41
14 com.apple.CoreFoundation 0x00007fff84136759 __CFRunLoopDoSource1 + 153
15 com.apple.CoreFoundation 0x00007fff841698bf __CFRunLoopRun + 1775
16 com.apple.CoreFoundation 0x00007fff84168dd2 CFRunLoopRunSpecific + 290
17 com.apple.HIToolbox 0x00007fff8c576774 RunCurrentEventLoopInMode + 209
18 com.apple.HIToolbox 0x00007fff8c576512 ReceiveNextEventCommon + 356
19 com.apple.HIToolbox 0x00007fff8c5763a3 BlockUntilNextEventMatchingListInMode + 62
20 com.apple.AppKit 0x00007fff84b7cfa3 _DPSNextEvent + 685
21 com.apple.AppKit 0x00007fff84b7c862 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 128
22 com.apple.AppKit 0x00007fff84b73c03 -[NSApplication run] + 517
23 com.apple.AppKit 0x00007fff84b18656 NSApplicationMain + 869
24 com.apple.demo.TableViewPlayground 0x0000000100fdcbb2 main + 34 (main.m:53)
25 libdyld.dylib 0x00007fff82b517e1 start + 1
REGRESSION:
-
NOTES:
Looks like NSTableView's -accessibilityHitTest: implementation fails to take the difference between being view-based or cell-based into account.
SAMPLE CODE:
http://manytricks.com/sandbox/codesamples/radar/modifiedtableviewplayground.zip
Duplicates
Comments
ag9zfm9wZW5yYWRhci1ocmRyDQsSBVJhZGFyGKH1cQw
Please note:
Reports posted here will not necessarily be seen by Apple.
All problems should be submitted at bugreport.apple.com before they are posted here.
Please only post information for Radars that you have filed yourself, and please do
not include Apple confidential information in your posts. Thank you!