@interface HMSourceListColoredView () @property (strong, nonatomic) NSColor *backgroundColor; @property (nonatomic, getter=isObservingKeyState) BOOL observingKeyState; @end @implementation HMSourceListColoredView - (instancetype)initWithFrame:(NSRect)frameRect { self = [super initWithFrame:frameRect]; if(floor(NSAppKitVersionNumber) >= NSAppKitVersionNumber10_10) { NSVisualEffectView *view = [[NSVisualEffectView alloc] initWithFrame:self.frame]; view.autoresizingMask = self.autoresizingMask; return (HMSourceListColoredView *)view; } return self; } - (void)dealloc { if (self.isObservingKeyState) { [[NSNotificationCenter defaultCenter] removeObserver:self name:NSWindowDidBecomeKeyNotification object:[self window]]; [[NSNotificationCenter defaultCenter] removeObserver:self name:NSWindowDidResignKeyNotification object:[self window]]; } } - (void)viewDidMoveToWindow { NSLog(@"Enter %s", __PRETTY_FUNCTION__); NSTableView *tableView = [[NSTableView alloc] init]; [tableView setSelectionHighlightStyle:NSTableViewSelectionHighlightStyleSourceList]; _backgroundColor = [tableView backgroundColor]; [self addWindowKeyStateObservers]; } - (void)addWindowKeyStateObservers { if (!self.isObservingKeyState) { [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(redisplay) name:NSWindowDidBecomeKeyNotification object:[self window]]; [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(redisplay) name:NSWindowDidResignKeyNotification object:[self window]]; } self.observingKeyState = YES; } - (void)redisplay { [self setNeedsDisplay:YES]; } - (void)drawRect:(NSRect)dirtyRect { [_backgroundColor setFill]; NSRectFill(dirtyRect); } @end