Re: Re[2]: Mac shortcut keys issue. Keys being sent to parent frame window.
Tony Kennedy <[email protected]> Tue, 1 Apr 2025 09:45:35 -0700 (PDT)
| Newsgroups | gmane.comp.lib.wxwindows.general |
|---|---|
| Message-ID | <[email protected]> |
Sure (as soon as I work out how to do it). One of the staff here is going to use the build with the modified code for a few days to see if there are any knock on effects. Tony. On Tuesday, 1 April 2025 at 16:05:01 UTC+1 Igor Korot wrote: > Hi, Tony, > > > > On Tue, Apr 1, 2025, 8:42 AM Tony Kennedy <[email protected]> wrote: > >> ok, now I think I've got something that works. Previous attempt >> registered double key presses in certain controls. >> >> Two functions have been changed, wxWidgetCocoaImpl::keyEvent in >> window.mm and - (void)sendEvent:(NSEvent *)anEvent in utils.mm (images >> below show the differences). >> >> In the existing wxWidgetCocoaImpl::keyEvent function (window.mm), when a >> key event happens, it's sent to the menu first. If I re-order the function >> to what is below (let the control have a go first), copy/paste work. >> >> Are there any Mac specialists here that can comment on this change? >> > > Can you make a PR with your changes? > > Thank you. > > >> Thanks in advance, >> >> Tony. >> >> >> >> --------------------------Replacement function sendEvent in >> utils.mm--------------------------------- >> - (void)sendEvent:(NSEvent *)anEvent >> { >> if ([anEvent type] == NSKeyUp && ([anEvent modifierFlags] & >> NSCommandKeyMask)) >> [[self keyWindow] sendEvent:anEvent]; >> else if ([anEvent type] == NSKeyDown && ([anEvent modifierFlags] & >> NSCommandKeyMask)) >> [[self keyWindow] sendEvent:anEvent]; >> else >> [super sendEvent:anEvent]; >> } >> >> --------------------------Replacement function >> wxWidgetCocoaImpl::keyEvent in window.mm--------------------------------- >> void wxWidgetCocoaImpl::keyEvent(WX_NSEvent event, WXWidget slf, void >> *_cmd) >> { >> wxLogTrace(TRACE_KEYS, "Got %s for %s", >> wxDumpSelector((SEL)_cmd), wxDumpNSView(slf)); >> >> if ( !m_wxPeer->IsEnabled() ) >> return; >> >> bool bTryPopagateToMenu = false; >> >> if ( [event type] == NSKeyDown ) >> { >> bTryPopagateToMenu = true; >> BeginNativeKeyDownEvent(event); >> } >> >> bool bEventHandled = true;//false; >> if ( GetFocusedViewInWindow([slf window]) != slf || m_hasEditor || >> (bEventHandled = !DoHandleKeyEvent(event)) ) >> { >> wxOSX_EventHandlerPtr superimpl = (wxOSX_EventHandlerPtr) [[slf >> superclass] instanceMethodForSelector:(SEL)_cmd]; >> superimpl(slf, (SEL)_cmd, event); >> } >> >> if ( [event type] == NSKeyDown ) >> { >> EndNativeKeyDownEvent(); >> } >> >> if (bTryPopagateToMenu == true && bEventHandled == false) >> { >> if ( [[[NSApplication sharedApplication] mainMenu] >> performKeyEquivalent:event] ) >> { >> wxLogTrace(TRACE_KEYS, "%s processed as key equivalent by the >> menu", >> wxDumpSelector((SEL)_cmd)); >> return; >> } >> } >> } >> >> >> >> >> >> >> >> On Tuesday, 1 April 2025 at 12:48:30 UTC+1 Tony Kennedy wrote: >> >>> Ahh, this doesn't quite work, so please ignore (for now). >>> >>> On Tuesday, 1 April 2025 at 12:32:39 UTC+1 Tony Kennedy wrote: >>> >>>> I've done a little experimentation on this today and seemed to have got >>>> something working. *But I'm really worried about any knock on effects.* >>>> >>>> Two functions have been changed, wxWidgetCocoaImpl::keyEvent in >>>> window.mm and - (void)sendEvent:(NSEvent *)anEvent in utils.mm (images >>>> below show the differences). >>>> >>>> In the wxWidgetCocoaImpl::keyEvent function (window.mm I think), for >>>> a key down event, it's sent to the menu first. If I re-order the function >>>> to what is below (let the control have a go first), copy/paste work. >>>> >>>> Are there any Mac specialists here that can comment on this change? >>>> >>>> Thanks in advance, >>>> >>>> Tony. >>>> >>>> On Wednesday, 26 March 2025 at 21:20:24 UTC Vadim Zeitlin wrote: >>>> >>>>> On Tue, 25 Mar 2025 09:52:10 -0700 (PDT) Tony Kennedy wrote: >>>>> >>>>> TK> No problem. I'm not familiar with objective C at all and not even >>>>> sure if >>>>> TK> the code below is objective C or Swift. >>>>> >>>>> It's Objective-C++ (as indicated by .mm extension, rather than the >>>>> standard .m for Objective-C), we don't use Swift. >>>>> >>>>> TK> I'm trying to trace things. In utils.m, I found the sendEvent >>>>> function. And >>>>> TK> in it, there is a test for NSKeyUp, and the Apple docs say that >>>>> it's >>>>> TK> depreciated. It also says there is an AppKit bug. >>>>> TK> >>>>> TK> https://developer.apple.com/documentation/appkit/nskeyup >>>>> TK> >>>>> TK> I tried replacing NSKeyUp with NSEvent.EventType.keyUp >>>>> TK> < >>>>> https://developer.apple.com/documentation/appkit/nsevent/eventtype/keyup>, >>>>> >>>>> TK> but it refuses to compile so I'm stuck. >>>>> >>>>> What was the intention behind this change? NSKeyUp is perfectly >>>>> fine... >>>>> >>>>> Perhaps it would be worth removing this "if" (or even this entire >>>>> function) entirely -- maybe it's indeed why you get the events in a >>>>> wrong >>>>> window (although I'm not sure, as I'd expect the key window to be the >>>>> palette window). >>>>> >>>>> Regards, >>>>> VZ >>>>> >>>>> -- >>>>> TT-Solutions: wxWidgets consultancy and technical support >>>>> https://www.tt-solutions.com/ >>>>> >>>> -- >> Please read https://www.wxwidgets.org/support/mlhowto.htm before posting. >> --- >> You received this message because you are subscribed to the Google Groups >> "wx-users" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion visit >> https://groups.google.com/d/msgid/wx-users/9c046e54-3652-4ae6-91d7-3ef3d5cb02bcn%40googlegroups.com >> <https://groups.google.com/d/msgid/wx-users/9c046e54-3652-4ae6-91d7-3ef3d5cb02bcn%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- Please read https://www.wxwidgets.org/support/mlhowto.htm before posting. --- You received this message because you are subscribed to the Google Groups "wx-users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion visit https://groups.google.com/d/msgid/wx-users/f4f821f3-18dc-4c35-8b41-0ab246f40dfan%40googlegroups.com.