1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-10 23:44:24 +00:00

macOS: Propagate focus loss message when resigning key window status and only grab focus if window can become the key window

This commit is contained in:
ed 2021-01-27 17:21:58 +00:00
parent 891d86fe6b
commit f43784dc5b

View file

@ -1068,6 +1068,11 @@ public:
grabFocus(); grabFocus();
} }
void resignKeyWindow()
{
viewFocusLoss();
}
bool windowShouldClose() bool windowShouldClose()
{ {
if (! isValidPeer (this)) if (! isValidPeer (this))
@ -1432,7 +1437,7 @@ public:
void grabFocus() override void grabFocus() override
{ {
if (window != nil) if (window != nil && [window canBecomeKeyWindow])
{ {
[window makeKeyWindow]; [window makeKeyWindow];
[window makeFirstResponder: view]; [window makeFirstResponder: view];
@ -2064,6 +2069,7 @@ struct JuceNSWindowClass : public ObjCClass<NSWindow>
addMethod (@selector (canBecomeKeyWindow), canBecomeKeyWindow, "c@:"); addMethod (@selector (canBecomeKeyWindow), canBecomeKeyWindow, "c@:");
addMethod (@selector (canBecomeMainWindow), canBecomeMainWindow, "c@:"); addMethod (@selector (canBecomeMainWindow), canBecomeMainWindow, "c@:");
addMethod (@selector (becomeKeyWindow), becomeKeyWindow, "v@:"); addMethod (@selector (becomeKeyWindow), becomeKeyWindow, "v@:");
addMethod (@selector (resignKeyWindow), resignKeyWindow, "v@:");
addMethod (@selector (windowShouldClose:), windowShouldClose, "c@:@"); addMethod (@selector (windowShouldClose:), windowShouldClose, "c@:@");
addMethod (@selector (constrainFrameRect:toScreen:), constrainFrameRect, @encode (NSRect), "@:", @encode (NSRect), "@"); addMethod (@selector (constrainFrameRect:toScreen:), constrainFrameRect, @encode (NSRect), "@:", @encode (NSRect), "@");
addMethod (@selector (windowWillResize:toSize:), windowWillResize, @encode (NSSize), "@:@", @encode (NSSize)); addMethod (@selector (windowWillResize:toSize:), windowWillResize, @encode (NSSize), "@:@", @encode (NSSize));
@ -2125,6 +2131,14 @@ private:
} }
} }
static void resignKeyWindow (id self, SEL)
{
sendSuperclassMessage<void> (self, @selector (resignKeyWindow));
if (auto* owner = getOwner (self))
owner->resignKeyWindow();
}
static BOOL windowShouldClose (id self, SEL, id /*window*/) static BOOL windowShouldClose (id self, SEL, id /*window*/)
{ {
auto* owner = getOwner (self); auto* owner = getOwner (self);