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.