> On Jul 7, 2015, at 8:27 AM, Willeke <willeke2...@gmail.com> wrote:
> 
>> Op 6 jul. 2015, om 18:15 heeft Richard Charles <rcharles...@gmail.com> het 
>> volgende geschreven:
>> 
>> Does anyone have any insight into what is going on?
>> 
> The animation of the focus ring isn't finished. If the focus ring is switched 
> off, the text is selected.
> 
> Safari's Address and Search field calls setSelectedRange: of currentEditor in 
> mouseDown:
> 
> - Willeke

Yes Safari’s Address and Search field has the behavior that I am looking for. 
First click selects the entire text field and you also get an animated focus 
ring.

Exactly how to achieve that on OS X 10.10 (with or without a focus ring) is 
another matter. I have parred back my custom NSTextField subclass to just what 
is shown below. A custom NSNumberFormatter is used but I removed it. The only 
other thing going on is the text field is programmatically placed in the super 
view.

====================

Your initial suggestion.

@implementation MyTextField

- (instancetype)initWithFrame:(NSRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self.cell setFocusRingType:NSFocusRingTypeNone];
    }
    return self;
}

- (void)awakeFromNib
{
    [self.cell setFocusRingType:NSFocusRingTypeNone];
}

- (BOOL)becomeFirstResponder
{
    BOOL result = [super becomeFirstResponder];
    if(result) {
        [self performSelector:@selector(selectText:) withObject:self 
afterDelay:0];
    }
    return result;
}

@end

RESULTS: Text is selected but rapidly changes to no selection. No focus ring as 
expected. Intermittent error Bad cursor rect event, flags = 256.

====================

You say that Safari apparently does this.

@implementation MyTextField

- (void)mouseDown:(NSEvent *)event
{
    NSText *editor = self.currentEditor;
    assert(editor && "Current editor is nil!");
    assert(editor.isFieldEditor && "Editor not a field editor!");
    NSRange range = NSMakeRange(0, editor.string.length);
    [editor setSelectedRange:range];
    
    [super mouseDown:event];
}

@end

RESULTS: Text not selected. Focus ring normal. No error message.

====================

Another version of what Safari may do.

@implementation MyTextField

- (void)mouseDown:(NSEvent *)event
{
    [self selectText:self];
    
    [super mouseDown:event];
}

@end

RESULTS: Text is selected but rapidly changes to no selection. Focus ring is 
intermittent. No error message.

====================

So in summary Safari’s Address and Search field has the behavior that I am 
looking for. First click selects the entire text field and you also get an 
animated focus ring. However on OS X 10.10 Yosemite nothing works for me except 
performSelector:withObject:afterDelay: using a non-zero delay value.

--Richard Charles


_______________________________________________

Cocoa-dev mailing list (Cocoa-dev@lists.apple.com)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to