Browse Source

NSViewComponentPeer: Ensure inner views that receive key equivalents reset keyDown state correctly

v7.0.9
reuk 2 years ago
parent
commit
cf7c865432
No known key found for this signature in database GPG Key ID: FCB43929F012EE5C
1 changed files with 25 additions and 0 deletions
  1. +25
    -0
      modules/juce_gui_basics/native/juce_NSViewComponentPeer_mac.mm

+ 25
- 0
modules/juce_gui_basics/native/juce_NSViewComponentPeer_mac.mm View File

@@ -2235,8 +2235,33 @@ struct JuceNSViewClass : public NSViewComponentPeerWrapper<ObjCClass<NSView>>
addMethod (@selector (performKeyEquivalent:), [] (id self, SEL s, NSEvent* ev) -> BOOL
{
if (auto* owner = getOwner (self))
{
const auto ref = owner->safeComponent;
if (owner->sendEventToInputContextOrComponent (ev))
{
if (ref == nullptr)
return YES;
const auto isFirstResponder = [&]
{
if (auto* v = owner->view)
if (auto* w = v.window)
return w.firstResponder == self;
return false;
}();
// If the view isn't the first responder, but the view has successfully
// performed the key equivalent, then the key event must have been passed down
// the view hierarchy to this point. In that case, the view won't be sent a
// matching keyUp event, so we simulate it here.
if (! isFirstResponder)
owner->redirectKeyUp (ev);
return YES;
}
}
return sendSuperclassMessage<BOOL> (self, s, ev);
});


Loading…
Cancel
Save