From c5394cea63ef184f59da26ae4feb4f55c9d9bf01 Mon Sep 17 00:00:00 2001 From: Stefan Csomor Date: Sat, 25 Jul 2020 19:19:57 +0200 Subject: [PATCH] Fix handling of standard edit commands in context menu under Mac Feed back standard commands like copy, paste into wxMenItem if possible. This way commands that don't exist in the global menubar can still be fed back eg when originating from a context menu. See #18738. --- src/osx/cocoa/nonownedwnd.mm | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/src/osx/cocoa/nonownedwnd.mm b/src/osx/cocoa/nonownedwnd.mm index d9702e6682..35c86fcf3b 100644 --- a/src/osx/cocoa/nonownedwnd.mm +++ b/src/osx/cocoa/nonownedwnd.mm @@ -335,8 +335,20 @@ extern int wxOSXGetIdFromSelector(SEL action ); return self; } -- (BOOL) triggerMenu:(SEL) action +- (BOOL) triggerMenu:(SEL) action sender:(id)sender { + // feed back into menu item, if it is ours + if ( [sender isKindOfClass:wxNSMenuItem.class] ) + { + wxNSMenuItem* nsMenuItem = (wxNSMenuItem*) sender; + wxMenuItemImpl* impl = [nsMenuItem implementation]; + if ( impl ) + { + wxMenuItem* menuitem = impl->GetWXPeer(); + return menuitem->GetMenu()->HandleCommandProcess(menuitem); + } + } + // otherwise feed back command into common menubar wxMenuBar* mbar = wxMenuBar::MacGetInstalledMenuBar(); if ( mbar ) { @@ -369,43 +381,43 @@ extern int wxOSXGetIdFromSelector(SEL action ); - (void)undo:(id)sender { wxUnusedVar(sender); - [self triggerMenu:_cmd]; + [self triggerMenu:_cmd sender:sender]; } - (void)redo:(id)sender { wxUnusedVar(sender); - [self triggerMenu:_cmd]; + [self triggerMenu:_cmd sender:sender]; } - (void)cut:(id)sender { wxUnusedVar(sender); - [self triggerMenu:_cmd]; + [self triggerMenu:_cmd sender:sender]; } - (void)copy:(id)sender { wxUnusedVar(sender); - [self triggerMenu:_cmd]; + [self triggerMenu:_cmd sender:sender]; } - (void)paste:(id)sender { wxUnusedVar(sender); - [self triggerMenu:_cmd]; + [self triggerMenu:_cmd sender:sender]; } - (void)delete:(id)sender { wxUnusedVar(sender); - [self triggerMenu:_cmd]; + [self triggerMenu:_cmd sender:sender]; } - (void)selectAll:(id)sender { wxUnusedVar(sender); - [self triggerMenu:_cmd]; + [self triggerMenu:_cmd sender:sender]; } - (void)windowDidMiniaturize:(NSNotification *)notification