]> git.sesse.net Git - vlc/commitdiff
macosx: improve accessibility support for black ui
authorDavid Fuhrmann <david.fuhrmann@googlemail.com>
Sat, 30 Jun 2012 16:33:31 +0000 (18:33 +0200)
committerDavid Fuhrmann <david.fuhrmann@googlemail.com>
Sat, 30 Jun 2012 16:46:51 +0000 (18:46 +0200)
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.

modules/gui/macosx/MainWindow.h
modules/gui/macosx/MainWindow.m
modules/gui/macosx/MainWindowTitle.h
modules/gui/macosx/MainWindowTitle.m

index b6e12ada640096b91478521632dc107bf1890e40..2cfe39ab17f78b8947f929983c8c66405e5848b5 100644 (file)
 - (void)windowDidEnterFullScreen:(NSNotification *)notification;
 - (void)windowWillExitFullScreen:(NSNotification *)notification;
 
+- (id)detachedTitlebarView;
 @end
 
 @interface VLCDetachedVideoWindow : NSWindow
index 8411784f0d12e9727b60f40f063911eb96c5dc58..6615cd191156082de11d2030425ca3988138a045 100644 (file)
@@ -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
index 68e61c4e4331af15821a8cf246f5f9c7968682ff..f3f8b11dfdac40fc8385b92a056505002e680e78 100644 (file)
 - (void)setWindowButtonOver:(BOOL)b_value;
 - (void)setWindowFullscreenButtonOver:(BOOL)b_value;
 
+- (NSButton*)closeButton;
+- (NSButton*)minimizeButton;
+- (NSButton*)zoomButton;
+
 @end
 
 @interface VLCWindowButtonCell : NSButtonCell
index 39b44c9ae1cb4c84e0ad168575473c4d34d14092..a811c35a34603b3ed0ab24175b7a732c3aeea9d1 100644 (file)
 
     [super mouseDown: event];
 }
+
+- (NSButton*)closeButton
+{
+    return o_red_btn;
+}
+
+- (NSButton*)minimizeButton
+{
+    return o_yellow_btn;
+}
+
+- (NSButton*)zoomButton
+{
+    return o_green_btn;
+}
+
 @end
 
 /*****************************************************************************