Fixed key loop calculation, might as well use _initialFirstResponder instance variable instead of accessor

This commit is contained in:
Aparajita Fishman
2012-06-28 10:01:07 -07:00
parent c52315cd8d
commit 7747bbffcf
+22 -13
View File
@@ -822,7 +822,7 @@ CPTexturedBackgroundWindowMask
#endif
if (_firstResponder === self || !_firstResponder)
[self makeFirstResponder:[self initialFirstResponder]];
[self makeFirstResponder:_initialFirstResponder];
if (!CPApp._keyWindow)
[self makeKeyWindow];
@@ -962,7 +962,7 @@ CPTexturedBackgroundWindowMask
// During init the initial first responder is set to the contentView
// if it hasn't changed in the mean time we need to update that reference
// to the new contentView
if ([self initialFirstResponder] === _contentView)
if (_initialFirstResponder === _contentView)
[self setInitialFirstResponder:aView];
_contentView = aView;
@@ -1299,21 +1299,24 @@ CPTexturedBackgroundWindowMask
- (void)setInitialFirstResponder:(CPView)aView
{
// Before an initial first responder is set, be sure to calculate the key loop
[self _setupFirstResponder:aView];
_initialFirstResponder = aView;
}
- (void)_setupFirstResponder
- (void)_setupFirstResponder:(CPView)anInitialFirstResponder
{
/*
If:
- The key loop is dirty
- The key loop does not auto-recalculate
- The first responder is the window
- The initial first responder is the content view
- No view within the window has become first responder
- No initial first responder has been set
Then calculate the key view loop and set the first responder
to the first view in the loop, since we should
to the first view in the loop if no initial responder has been set, since we should
always have an initial first responder and a key loop by default.
*/
if (_keyViewLoopIsDirty &&
@@ -1323,10 +1326,15 @@ CPTexturedBackgroundWindowMask
{
[self recalculateKeyViewLoop];
// Make the first key view of the content view the first responder
var firstKeyView = [[self contentView] nextValidKeyView];
if (anInitialFirstResponder)
[self makeFirstResponder:anInitialFirstResponder];
else
{
// Make the first key view of the content view the first responder
var firstKeyView = [[self contentView] nextValidKeyView];
[self makeFirstResponder:firstKeyView];
[self makeFirstResponder:firstKeyView];
}
}
}
@@ -1684,7 +1692,7 @@ CPTexturedBackgroundWindowMask
if (_firstResponder !== self && [_firstResponder respondsToSelector:@selector(becomeKeyWindow)])
[_firstResponder becomeKeyWindow];
[self _setupFirstResponder];
[self _setupFirstResponder:nil];
[[CPNotificationCenter defaultCenter]
postNotificationName:CPWindowDidBecomeKeyNotification
@@ -2554,7 +2562,7 @@ CPTexturedBackgroundWindowMask
if (!nextValidKeyView)
{
var initialFirstResponder = [self initialFirstResponder];
var initialFirstResponder = _initialFirstResponder;
if ([initialFirstResponder acceptsFirstResponder])
nextValidKeyView = initialFirstResponder;
@@ -2577,7 +2585,7 @@ CPTexturedBackgroundWindowMask
if (!previousValidKeyView)
{
var initialFirstResponder = [self initialFirstResponder];
var initialFirstResponder = _initialFirstResponder;
if ([initialFirstResponder acceptsFirstResponder])
previousValidKeyView = initialFirstResponder;
@@ -2699,7 +2707,8 @@ var allViews = function(aWindow)
[views addObjectsFromArray:[[aWindow contentView] subviews]];
for (var index = 0; index < views.length; ++index)
// Start from index 1 because index 0 is the contentView and its subviews have already been added
for (var index = 1; index < views.length; ++index)
views = views.concat([views[index] subviews]);
return views;