X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b8702c673a43e398df644670f4f343cb43df50d0..efafcdca4aceec5409c1e07354f2026fc9c27a01:/src/osx/cocoa/button.mm diff --git a/src/osx/cocoa/button.mm b/src/osx/cocoa/button.mm index 3e4288ba8e..7e68cc0d79 100644 --- a/src/osx/cocoa/button.mm +++ b/src/osx/cocoa/button.mm @@ -11,11 +11,13 @@ #include "wx/wxprec.h" -#include "wx/button.h" - #ifndef WX_PRECOMP +#include "wx/object.h" #endif +#include "wx/button.h" +#include "wx/toplevel.h" + #include "wx/osx/private.h" #if wxUSE_MARKUP @@ -169,6 +171,23 @@ public: } } } + + void SetAcceleratorFromLabel(const wxString& label) + { + const int accelPos = wxControl::FindAccelIndex(label); + if ( accelPos != wxNOT_FOUND ) + { + wxString accelstring(label[accelPos + 1]); // Skip '&' itself + accelstring.MakeLower(); + wxCFStringRef cfText(accelstring); + [GetNSButton() setKeyEquivalent:cfText.AsNSString()]; + [GetNSButton() setKeyEquivalentModifierMask:NSCommandKeyMask]; + } + else + { + [GetNSButton() setKeyEquivalent:@""]; + } + } private: @@ -182,6 +201,23 @@ private: } // anonymous namespace +// Set the keyboard accelerator key from the label (e.g. "Click &Me") +void wxButton::OSXSetAcceleratorFromLabel(const wxString& label) +{ + // Skip setting the accelerator for the default buttons as this would + // overwrite the default "Enter" which should be preserved. + wxTopLevelWindow * const + tlw = wxDynamicCast(wxGetTopLevelParent(this), wxTopLevelWindow); + if ( tlw ) + { + if ( tlw->GetDefaultItem() == this ) + return; + } + + wxButtonCocoaImpl *impl = static_cast(GetPeer()); + impl->SetAcceleratorFromLabel(label); +} + extern "C" void SetBezelStyleFromBorderFlags(NSButton *v, long style); // set bezel style depending on the wxBORDER_XXX flags specified by the style @@ -263,9 +299,11 @@ wxWidgetImplType* wxWidgetImpl::CreateButton( wxWindowMac* wxpeer, } } - + [v setButtonType:NSMomentaryPushInButton]; - return new wxButtonCocoaImpl( wxpeer, v ); + wxButtonCocoaImpl* const impl = new wxButtonCocoaImpl( wxpeer, v ); + impl->SetAcceleratorFromLabel(label); + return impl; } void wxWidgetCocoaImpl::SetDefaultButton( bool isDefault ) @@ -273,7 +311,10 @@ void wxWidgetCocoaImpl::SetDefaultButton( bool isDefault ) if ( [m_osxView isKindOfClass:[NSButton class]] ) { if ( isDefault ) + { [(NSButton*)m_osxView setKeyEquivalent: @"\r" ]; + [(NSButton*)m_osxView setKeyEquivalentModifierMask: 0]; + } else [(NSButton*)m_osxView setKeyEquivalent: @"" ]; }