Skip to content

Instantly share code, notes, and snippets.

@saikat
Created October 22, 2009 04:47
Show Gist options
  • Save saikat/215735 to your computer and use it in GitHub Desktop.
Save saikat/215735 to your computer and use it in GitHub Desktop.
@import <AppKit/CPWindow.j>
var IsChangingFirstResponder = NO,
CurrentFirstResponder = nil;
@implementation MBWindow : CPWindow
{ }
// TODO this is a huge hack to basically get text view to work and not exit when
// you click on its scroll bar
- (id)firstResponderCandidate
{
return CurrentFirstResponder;
}
// Modified to allow resignFirstResponder set first responders within, and the last first responder
// that gets set is the one that gets used
- (void)makeFirstResponder:(CPResponder)aResponder
{
CurrentFirstResponder = aResponder;
if (IsChangingFirstResponder)
return NO;
else
IsChangingFirstResponder = YES;
if (_firstResponder == CurrentFirstResponder) {
IsChangingFirstResponder = NO;
return YES;
}
if(![_firstResponder resignFirstResponder]) {
IsChangingFirstResponder = NO;
return NO;
}
if(!CurrentFirstResponder || ![CurrentFirstResponder acceptsFirstResponder] || ![CurrentFirstResponder becomeFirstResponder]) {
_firstResponder = self;
IsChangingFirstResponder = NO;
return NO;
}
_firstResponder = CurrentFirstResponder;
IsChangingFirstResponder = NO;
return YES;
}
- (void)sendEvent:(CPEvent)anEvent
{
var type = [anEvent type],
point = [anEvent locationInWindow],
currentFirstResponder = [self firstResponder];
[super sendEvent:anEvent];
if (type == CPLeftMouseDown &&
[currentFirstResponder class] == [CPTextViewScroller class] &&
[[self firstResponder] class] == [CPTextViewScroller class]) {
if ([_leftMouseDownView class] !== [CPTextViewScroller class])
[self makeFirstResponder:_leftMouseDownView];
}
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment