Return bool from wxWidgetCocoaImpl::doCommandBySelector()

This allows to determine whether the event was handled by wx code and
perform further processing by feeding things back to native code if not.
This commit is contained in:
Stefan Csomor
2021-04-13 17:34:34 +02:00
committed by Vadim Zeitlin
parent d01760ae41
commit 18c45321f4
2 changed files with 11 additions and 6 deletions

View File

@@ -199,7 +199,8 @@ public :
virtual void cursorUpdate(WX_NSEvent event, WXWidget slf, void* _cmd);
virtual void keyEvent(WX_NSEvent event, WXWidget slf, void* _cmd);
virtual void insertText(NSString* text, WXWidget slf, void* _cmd);
virtual void doCommandBySelector(void* sel, WXWidget slf, void* _cmd);
// Returns true if the event was processed by a user-defined event handler.
virtual bool doCommandBySelector(void* sel, WXWidget slf, void* _cmd);
virtual bool acceptsFirstResponder(WXWidget slf, void* _cmd);
virtual bool becomeFirstResponder(WXWidget slf, void* _cmd);
virtual bool resignFirstResponder(WXWidget slf, void* _cmd);

View File

@@ -2129,7 +2129,7 @@ void wxWidgetCocoaImpl::insertText(NSString* text, WXWidget slf, void *_cmd)
}
}
void wxWidgetCocoaImpl::doCommandBySelector(void* sel, WXWidget slf, void* WXUNUSED(_cmd))
bool wxWidgetCocoaImpl::doCommandBySelector(void* sel, WXWidget slf, void* WXUNUSED(_cmd))
{
wxLogTrace(TRACE_KEYS, "Selector %s for %s",
wxDumpSelector((SEL)sel), wxDumpNSView(slf));
@@ -2140,22 +2140,24 @@ void wxWidgetCocoaImpl::doCommandBySelector(void* sel, WXWidget slf, void* WXUNU
// execute and move back in history, since this results in two commands, Ctrl-O was sent twice as a wx key down event.
// we now track the sending of the events to avoid duplicates.
bool handled = false;
if ( IsInNativeKeyDown() && !WasKeyDownSent())
{
// If we have a corresponding key event, send wxEVT_KEY_DOWN now.
// (see also: wxWidgetCocoaImpl::DoHandleKeyEvent)
wxKeyEvent wxevent(wxEVT_KEY_DOWN);
SetupKeyEvent( wxevent, GetLastNativeKeyDownEvent() );
bool result = GetWXPeer()->OSXHandleKeyEvent(wxevent);
handled = GetWXPeer()->OSXHandleKeyEvent(wxevent);
if (!result)
if (!handled)
{
// Generate wxEVT_CHAR if wxEVT_KEY_DOWN is not handled.
wxKeyEvent wxevent2(wxevent) ;
wxevent2.SetEventType(wxEVT_CHAR);
SetupKeyEvent( wxevent2, GetLastNativeKeyDownEvent() );
GetWXPeer()->OSXHandleKeyEvent(wxevent2);
handled = GetWXPeer()->OSXHandleKeyEvent(wxevent2);
}
SetKeyDownSent();
}
@@ -2163,6 +2165,8 @@ void wxWidgetCocoaImpl::doCommandBySelector(void* sel, WXWidget slf, void* WXUNU
{
wxLogTrace(TRACE_KEYS, "Doing nothing in doCommandBySelector:");
}
return handled;
}
bool wxWidgetCocoaImpl::acceptsFirstResponder(WXWidget slf, void *_cmd)