From 7264692a0a8cb5887a9946b45ebcd93f6e1f5178 Mon Sep 17 00:00:00 2001 From: Alexander Ljungberg Date: Sun, 2 Sep 2012 23:33:56 +0100 Subject: [PATCH] Optimise `CPSegmentedButton setEnabled:forSegment:`. Don't relayout the segmented button if the enabled state of a segment is not changed. --- AppKit/CPSegmentedControl.j | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/AppKit/CPSegmentedControl.j b/AppKit/CPSegmentedControl.j index 4a28f091f..0399cf050 100644 --- a/AppKit/CPSegmentedControl.j +++ b/AppKit/CPSegmentedControl.j @@ -366,11 +366,14 @@ CPSegmentSwitchTrackingMomentary = 2; @param aSegment the segment to enable/disable @throws CPRangeException if \c aSegment is out of bounds */ -- (void)setEnabled:(BOOL)isEnabled forSegment:(unsigned)aSegment +- (void)setEnabled:(BOOL)shouldBeEnabled forSegment:(unsigned)aSegment { - [_segments[aSegment] setEnabled:isEnabled]; + if ([_segments[aSegment] enabled] === shouldBeEnabled) + return; - if (isEnabled) + [_segments[aSegment] setEnabled:shouldBeEnabled]; + + if (shouldBeEnabled) _themeStates[aSegment] &= ~CPThemeStateDisabled; else _themeStates[aSegment] |= CPThemeStateDisabled;