diff --git a/AppKit/CPTheme.j b/AppKit/CPTheme.j index 6c207ffc7..61b7f8afc 100644 --- a/AppKit/CPTheme.j +++ b/AppKit/CPTheme.j @@ -389,6 +389,9 @@ ThemeState.prototype.isSubsetOf = function(aState) ThemeState.prototype.without = function(aState) { + if (!aState || aState === [CPNull null]) + return this; + var firstTransform = CPThemeWithoutTransform[this._stateNameString], result; @@ -398,23 +401,19 @@ ThemeState.prototype.without = function(aState) return result; } - if (!aState || aState === [CPNull null]) - result = this; - else + var newStates = {}; + + for (var stateName in this._stateNames) { - var newStates = {}; - for (var stateName in this._stateNames) - { - if (!this._stateNames.hasOwnProperty(stateName)) - continue; + if (!this._stateNames.hasOwnProperty(stateName)) + continue; - if (!aState._stateNames[stateName]) - newStates[stateName] = true; - } - - result = ThemeState._cacheThemeState(new ThemeState(newStates)); + if (!aState._stateNames[stateName]) + newStates[stateName] = true; } + result = ThemeState._cacheThemeState(new ThemeState(newStates)); + if (!firstTransform) firstTransform = CPThemeWithoutTransform[this._stateNameString] = {}; diff --git a/Tests/AppKit/CPViewTest.j b/Tests/AppKit/CPViewTest.j index 7b2897ade..5131a2fc3 100644 --- a/Tests/AppKit/CPViewTest.j +++ b/Tests/AppKit/CPViewTest.j @@ -94,7 +94,7 @@ var methodCalled; [self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted)) equals:String([view themeState]) message:@"The view should be in the combined state of CPThemeStateDisabled and CPThemeStateHighlighted"]; [view unsetThemeState:[view themeState]]; - [view setThemeState:[CPThemeStateSelected, CPThemeStateDisabled]]; + [view setThemeStates:[CPThemeStateSelected, CPThemeStateDisabled]]; [self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateSelected)) equals:String([view themeState]) message:@"setThemeState works with array argument"]; } @@ -117,20 +117,20 @@ var methodCalled; [self assert:String(CPThemeStateNormal) equals:String([view themeState]) message:@"CPView should be able to unset a combined theme state"]; [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateHighlighted, CPThemeStateBordered)]; - [view unsetThemeState:[CPThemeStateBordered, CPThemeStateHighlighted]]; + [view unsetThemeStates:[CPThemeStateBordered, CPThemeStateHighlighted]]; [self assert:String(CPThemeStateDisabled) equals:String([view themeState]) message:@"unsetThemeState works with array argument"]; [view setThemeState:CPThemeStateDisabled]; - [view unsetThemeState:[CPThemeStateDisabled, CPThemeStateHighlighted]]; + [view unsetThemeStates:[CPThemeStateDisabled, CPThemeStateHighlighted]]; [self assert:String(CPThemeStateNormal) equals:String([view themeState]) message:@"CPView should be able to unset a combined theme state that has more theme states than the view currently has"]; [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)]; - var returnValue = [view unsetThemeState:[CPThemeStateDisabled, CPThemeStateHighlighted]]; + var returnValue = [view unsetThemeStates:[CPThemeStateDisabled, CPThemeStateHighlighted]]; [self assert:String(CPThemeStateBordered) equals:String([view themeState]) message:@"CPView should be able to unset a combined theme state that has not entirely overlapping themestates"]; [self assertTrue:returnValue message:@"When unsetThemeState successfully unsets anything, it return YES"]; [view setThemeState:CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)]; - var returnValue = [view unsetThemeState:[CPThemeStateSelected, CPThemeStateHighlighted]]; + var returnValue = [view unsetThemeStates:[CPThemeStateSelected, CPThemeStateHighlighted]]; [self assert:String(CPThemeState(CPThemeStateDisabled, CPThemeStateBordered)) equals:String([view themeState]) message:@"CPView not unset any theme states it does not have"]; [self assertFalse:returnValue message:@"When unsetThemeState doesn't unset anything, it returns NO"];