Re: NSTextField will not become editable in a borderless window
Re: NSTextField will not become editable in a borderless window
- Subject: Re: NSTextField will not become editable in a borderless window
- From: Peter Burtis <email@hidden>
- Date: Thu, 22 May 2008 09:38:33 -0400
Thanks Robert and Graham. FWIW, the one that finally did the trick
was overriding canBecomeKeyWindow to return YES, which makes a lot of
sense in hindsight. For whatever strange reason, nothing else
suggested worked. (This is all happening on a CoreAnimation layer,
BTW, which may well be throwing a few extra curveballs into the mix.)
Now, overriding canBecomeKeyWindow seems to be wreaking havoc with my
mouseEntered and mouseExited code, and the focus ring isn't drawing
anywhere near properly, but those are other bugs for other nights-
turned-mornings. :)
Thanks again for the help,
Peter
Graham Cox:
Me again ;-)
It just occurred to me - have you tried the following overrides in
NSWindow?:
- (BOOL) canBecomeKeyWindow { return YES; }
- (BOOL) acceptsFirstResponder { return YES; }
- (BOOL) becomeFirstResponder { return YES; }
- (BOOL) resignFirstResponder { return YES; }
Borderless windows are set up to return NO in these cases by
default, so these overrides are necessary to force it back into the
land of the living. If the text field now works, but shows the
inactive appearance, THEN try the active hack.
G.
On 22 May 2008, at 10:47 pm, Graham Cox wrote:
Found it just after I posted:
- (BOOL) _hasActiveControls
{
return YES;
}
Also, while this works to show an active *appearance* for buttons,
pop-ups and so on, I've never tried it with text fields. It's a
quick thing to try though. It would be useful for Apple to provide
a properly supported way to do this, to allow "pop-up controls"
though perhaps the new view-in-a-menu-item mechanism will do that
now.
hth,
G.
On 22 May 2008, at 10:40 pm, Graham Cox wrote:
Peter, I've run into something similar and I think it has to do
with the window server not making a window active (i.e. main and
key) if it has the borderless attribute. The workaround I ended up
using was to override a private undocumented NSWindow method which
controls use to query the active state of the window, to always
return YES.
Unfortunately I've dug through a mountain of code but can't find
where I used it. Someone else may remember this trick and help me
out... of course, it's not a great solution but it works from 10.3
through 10.5 so far...
G.
On 22 May 2008, at 10:13 pm, Peter Burtis wrote:
When I add an NSTextField to a borderless window, nothing I do
will make it editable. Specifically, running the code below, the
text field just won't work. (I've tried it with all backing
types, BTW.)
NSWindow *window = [[NSWindow alloc]
initWithContentRect:NSMakeRect(300,300,300,300)
styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered
defer:NO];
NSTextField *field = [[NSTextField alloc] init];
[field setEditable:YES];
[window setContentView:field];
[window makeKeyAndOrderFront:self];
But change the styleMask to NSTitledWindowMask and it works as
expected.
What am I missing? Is it impossible to do this for some reason?
On the subject of NSBorderlessWindowMask, the docs give the
rather opaque guidance, "Useful only for display or caching
purposes," as if a window was useful for anything other than
display. Is there some other, better way to create a completely
custom window?
I'm running 10.5.2, if that matters.
Thanks,
Peter Burtis
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden