PerformClose: in a borderless window?

Is there a way for the method to executeClose: working when I use NSBorderlessWindowMask? Which method should I override? (if possible)

+5
source share
3 answers

I redefined some methods and it works. All I want to know now is if I did not take it because of a bad approach :)

- (BOOL)validateMenuItem:(NSMenuItem *)menuItem
{
    return ([menuItem action] == @selector(performClose:) || [menuItem action] == @selector(performZoom:) || [menuItem action] == @selector(performMiniaturize:)) ? YES : [super validateMenuItem:menuItem];
}

- (BOOL)windowShouldClose:(id)sender
{
    return YES;
}

- (void)performClose:(id)sender
{
    if([[self delegate] respondsToSelector:@selector(windowShouldClose:)])
    {
        if(![[self delegate] windowShouldClose:self]) return;
    }
    else if([self respondsToSelector:@selector(windowShouldClose:)])
    {
        if(![self windowShouldClose:self]) return;
    }

    [self close];
}

- (void)performMiniaturize:(id)sender
{
    [self miniaturize:self];
}

- (void)performZoom:(id)sender
{
    [self zoom:self];
}
+10
source

, performClose: . close. windowShouldClose: IBAction. , .

@interface NSWindow (BorderlessClosing)
- (IBAction)performBorderlessClose:(id)sender;
@end

@implementation NSWindow (BorderlessClosing)
- (IBAction)performBorderlessClose:(id)sender {
    if([[self delegate] respondsToSelector:@selector(windowShouldClose:)]) {
        if(![[self delegate] windowShouldClose:self]) return;
    } else if([self respondsToSelector:@selector(windowShouldClose:)]) {
        if(![self windowShouldClose:self]) return;
    }
    [self close];
}
@end
+1

As Kyle said, redefine the window and add

-(BOOL)canBecomeKeyWindow
{
    return YES;
}

And in your WindowController,

 - (IBAction)performClose:(id)sender

should be called when using Close MenuItem.

+1
source

All Articles