Key view loop fixes/improvements

- Removed unnecessary code at beginning of CPTextField -becomeFirstResponder that might have been a hack to get around a bug I fixed.
- Fixed race condition in setTimeout closure in CPTextField -becomeFirstResponder.
- CPWindow -setInitialFirstResponder now works reliably and follows Cocoa behavior in that if -makeFirstResponder is called with something other than the window before the window is first shown, it will override the initial first responder.
- Like Cocoa, until the first responder is set during window load, the first responder is the window by default, not the content view.
- Optimized search for any view that has a previous/next key view set.
- Sheets can become key windows again.
- CPWindow -recalculateKeyViewLoop now just marks the loop as dirty, per Cocoa docs.
- CPWindow -autorecalculatesKeyViewLoop now behaves per Cocoa, it only has an effect when views are added or removed.
- If the first responder does not have a valid previous/next key view, it does not resign to nil, per Cocoa behavior.
- Code optimization and cleanup.
- Test app (KeyViewLoopTest) that demonstrates various scenarios.
This commit is contained in:
Aparajita Fishman committed 2013-01-09 18:02:07 +07:00
1 parent 45ad5375a2
commit 782f47a30b
15 files changed
+2855 -111

No files matched your search

@@ -0,0 +1,44 @@
/*
* AppController.j
* KeyViewLoopTest
*
* Created by You on January 7, 2013.
* Copyright 2013, Your Company All rights reserved.
*/
@import <Foundation/CPObject.j>
@implementation AppController : CPObject
{
@outlet CPWindow customNoInitial;
}
- (void)applicationDidFinishLaunching:(CPNotification)aNotification
{
[customNoInitial makeKeyAndOrderFront:self];
}
@end
@implementation MyWindow : CPWindow
- (@action)addField:(id)sender
{
var field = [CPTextField textFieldWithStringValue:@"" placeholder:@"" width:96];
[field setFrameOrigin:CGPointMake(43, 135)];
[[self contentView] addSubview:field];
[sender setEnabled:NO];
[self makeFirstResponder:[[self contentView] viewWithTag:1]];
}
- (@action)recalc:(id)sender
{
[self recalculateKeyViewLoop];
[self makeFirstResponder:[[self contentView] viewWithTag:1]];
}
@end