diff --git a/include/wx/osx/cocoa/private.h b/include/wx/osx/cocoa/private.h index d35a452254..bd4657b146 100644 --- a/include/wx/osx/cocoa/private.h +++ b/include/wx/osx/cocoa/private.h @@ -375,6 +375,7 @@ public: typedef void (*wxOSX_EventHandlerPtr)(NSView* self, SEL _cmd, NSEvent *event); typedef BOOL (*wxOSX_PerformKeyEventHandlerPtr)(NSView* self, SEL _cmd, NSEvent *event); typedef BOOL (*wxOSX_FocusHandlerPtr)(NSView* self, SEL _cmd); + typedef void (*wxOSX_DoCommandBySelectorPtr)(NSView* self, SEL _cmd, SEL _sel); typedef NSDragOperation (*wxOSX_DraggingEnteredOrUpdatedHandlerPtr)(NSView *self, SEL _cmd, void *sender); typedef void (*wxOSX_DraggingExitedHandlerPtr)(NSView *self, SEL _cmd, void *sender); typedef BOOL (*wxOSX_PerformDragOperationHandlerPtr)(NSView *self, SEL _cmd, void *sender); diff --git a/src/osx/cocoa/dataview.mm b/src/osx/cocoa/dataview.mm index b0517f5797..1859b289d2 100644 --- a/src/osx/cocoa/dataview.mm +++ b/src/osx/cocoa/dataview.mm @@ -2005,12 +2005,23 @@ bool wxCocoaDataViewControl::doCommandBySelector(void* sel, WXWidget slf, void* { bool handled = wxWidgetCocoaImpl::doCommandBySelector(sel, slf, _cmd); // if this special key has not been handled - if ( !handled && IsInNativeKeyDown() ) + if ( !handled ) { - // send the original key event back to the native implementation to get proper default handling like eg for arrow keys - wxOSX_EventHandlerPtr superimpl = (wxOSX_EventHandlerPtr) [[slf superclass] instanceMethodForSelector:@selector(keyDown:)]; - superimpl(slf, @selector(keyDown:), GetLastNativeKeyDownEvent()); + if ( IsInNativeKeyDown() ) + { + // send the original key event back to the native implementation to get proper default handling like eg for arrow keys + wxOSX_EventHandlerPtr superimpl = (wxOSX_EventHandlerPtr) [[slf superclass] instanceMethodForSelector:@selector(keyDown:)]; + superimpl(slf, @selector(keyDown:), GetLastNativeKeyDownEvent()); + } + else + { + const auto superimpl = (wxOSX_DoCommandBySelectorPtr) + [[slf superclass] instanceMethodForSelector:@selector(doCommandBySelector:)]; + if ( superimpl ) + superimpl(slf, @selector(doCommandBySelector:), (SEL)sel); + } } + return handled; }