vlc | branch: master | David Fuhrmann <[email protected]> | Sat Jun 30 18:33:31 2012 +0200| [73b270549bb441dd2f273f93d492239b459f1513] | committer: David Fuhrmann
macosx: improve accessibility support for black ui The commit adds additional attributes to the black windows in order to correctly link to the close / zoom / maximize buttons. This is needed to get some tools using this api to work, in particular / e.g. jitouch. > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=73b270549bb441dd2f273f93d492239b459f1513 --- modules/gui/macosx/MainWindow.h | 1 + modules/gui/macosx/MainWindow.m | 98 ++++++++++++++++++++++++++++++++++ modules/gui/macosx/MainWindowTitle.h | 4 ++ modules/gui/macosx/MainWindowTitle.m | 16 ++++++ 4 files changed, 119 insertions(+) diff --git a/modules/gui/macosx/MainWindow.h b/modules/gui/macosx/MainWindow.h index b6e12ad..2cfe39a 100644 --- a/modules/gui/macosx/MainWindow.h +++ b/modules/gui/macosx/MainWindow.h @@ -206,6 +206,7 @@ - (void)windowDidEnterFullScreen:(NSNotification *)notification; - (void)windowWillExitFullScreen:(NSNotification *)notification; +- (id)detachedTitlebarView; @end @interface VLCDetachedVideoWindow : NSWindow diff --git a/modules/gui/macosx/MainWindow.m b/modules/gui/macosx/MainWindow.m index 8411784..6615cd1 100644 --- a/modules/gui/macosx/MainWindow.m +++ b/modules/gui/macosx/MainWindow.m @@ -2750,6 +2750,59 @@ static VLCMainWindow *_o_sharedInstance = nil; return nil; } + +#pragma mark - +#pragma mark Accessibility stuff + +- (NSArray *)accessibilityAttributeNames +{ + if( !b_dark_interface ) + return [super accessibilityAttributeNames]; + + static NSMutableArray *attributes = nil; + if ( attributes == nil ) { + attributes = [[super accessibilityAttributeNames] mutableCopy]; + NSArray *appendAttributes = [NSArray arrayWithObjects: NSAccessibilitySubroleAttribute, + NSAccessibilityCloseButtonAttribute, + NSAccessibilityMinimizeButtonAttribute, + NSAccessibilityZoomButtonAttribute, + nil]; + + for( NSString *attribute in appendAttributes ) + { + if( ![attributes containsObject:attribute] ) + [attributes addObject:attribute]; + } + } + return attributes; +} + +- (id)accessibilityAttributeValue: (NSString*)o_attribute_name +{ + if( b_dark_interface ) + { + VLCMainWindowTitleView *o_tbv = o_titlebar_view; + + if( [o_attribute_name isEqualTo: NSAccessibilitySubroleAttribute] ) + return NSAccessibilityStandardWindowSubrole; + + if( [o_attribute_name isEqualTo: NSAccessibilityCloseButtonAttribute] ) + return [[o_tbv closeButton] cell]; + + if( [o_attribute_name isEqualTo: NSAccessibilityMinimizeButtonAttribute] ) + return [[o_tbv minimizeButton] cell]; + + if( [o_attribute_name isEqualTo: NSAccessibilityZoomButtonAttribute] ) + return [[o_tbv zoomButton] cell]; + } + + return [super accessibilityAttributeValue: o_attribute_name]; +} + +- (id)detachedTitlebarView +{ + return o_detached_titlebar_view; +} @end @implementation VLCDetachedVideoWindow @@ -2960,4 +3013,49 @@ static VLCMainWindow *_o_sharedInstance = nil; [self setFrame: maxRect display: YES animate: YES]; } +- (NSArray *)accessibilityAttributeNames +{ + if( !b_dark_interface ) + return [super accessibilityAttributeNames]; + + static NSMutableArray *attributes = nil; + if ( attributes == nil ) { + attributes = [[super accessibilityAttributeNames] mutableCopy]; + NSArray *appendAttributes = [NSArray arrayWithObjects: NSAccessibilitySubroleAttribute, + NSAccessibilityCloseButtonAttribute, + NSAccessibilityMinimizeButtonAttribute, + NSAccessibilityZoomButtonAttribute, + nil]; + + for( NSString *attribute in appendAttributes ) + { + if( ![attributes containsObject:attribute] ) + [attributes addObject:attribute]; + } + } + return attributes; +} + +- (id)accessibilityAttributeValue: (NSString*)o_attribute_name +{ + if( b_dark_interface ) + { + VLCMainWindowTitleView *o_tbv = [[VLCMainWindow sharedInstance] detachedTitlebarView]; + + if( [o_attribute_name isEqualTo: NSAccessibilitySubroleAttribute] ) + return NSAccessibilityStandardWindowSubrole; + + if( [o_attribute_name isEqualTo: NSAccessibilityCloseButtonAttribute] ) + return [[o_tbv closeButton] cell]; + + if( [o_attribute_name isEqualTo: NSAccessibilityMinimizeButtonAttribute] ) + return [[o_tbv minimizeButton] cell]; + + if( [o_attribute_name isEqualTo: NSAccessibilityZoomButtonAttribute] ) + return [[o_tbv zoomButton] cell]; + } + + return [super accessibilityAttributeValue: o_attribute_name]; +} + @end diff --git a/modules/gui/macosx/MainWindowTitle.h b/modules/gui/macosx/MainWindowTitle.h index 68e61c4..f3f8b11 100644 --- a/modules/gui/macosx/MainWindowTitle.h +++ b/modules/gui/macosx/MainWindowTitle.h @@ -56,6 +56,10 @@ - (void)setWindowButtonOver:(BOOL)b_value; - (void)setWindowFullscreenButtonOver:(BOOL)b_value; +- (NSButton*)closeButton; +- (NSButton*)minimizeButton; +- (NSButton*)zoomButton; + @end @interface VLCWindowButtonCell : NSButtonCell diff --git a/modules/gui/macosx/MainWindowTitle.m b/modules/gui/macosx/MainWindowTitle.m index 39b44c9..a811c35 100644 --- a/modules/gui/macosx/MainWindowTitle.m +++ b/modules/gui/macosx/MainWindowTitle.m @@ -257,6 +257,22 @@ [super mouseDown: event]; } + +- (NSButton*)closeButton +{ + return o_red_btn; +} + +- (NSButton*)minimizeButton +{ + return o_yellow_btn; +} + +- (NSButton*)zoomButton +{ + return o_green_btn; +} + @end /***************************************************************************** _______________________________________________ vlc-commits mailing list [email protected] http://mailman.videolan.org/listinfo/vlc-commits
