Set the mnemonic as "key equivalent".
Closes #12917.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72809
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
- Don't send any events from wxSpinCtrl::SetRange() even if the value changed.
- Display system drag images during drag and drop if available (PeterO).
- Don't send any events from wxSpinCtrl::SetRange() even if the value changed.
- Display system drag images during drag and drop if available (PeterO).
- Fix pages range in the print dialog (Auria).
- Fix pages range in the print dialog (Auria).
-- Implement image support in wxNotebook for wxOSX/Cocoa (Malcolm MacLeod).
+- Implement image support in wxNotebook (Malcolm MacLeod).
+- Add support for button mnemonics (joostn).
2.9.4: (released 2012-07-09)
2.9.4: (released 2012-07-09)
virtual bool OSXHandleClicked( double timestampsec );
virtual bool OSXHandleClicked( double timestampsec );
+#if wxOSX_USE_COCOA
+ void OSXSetAcceleratorFromLabel(const wxString& label);
+#endif
+
protected:
DECLARE_DYNAMIC_CLASS(wxButton)
};
protected:
DECLARE_DYNAMIC_CLASS(wxButton)
};
}
wxAnyButton::SetLabel(label);
}
wxAnyButton::SetLabel(label);
+#if wxOSX_USE_COCOA
+ OSXSetAcceleratorFromLabel(label);
+#endif
}
wxWindow *wxButton::SetDefault()
}
wxWindow *wxButton::SetDefault()
#endif
#include "wx/button.h"
#endif
#include "wx/button.h"
+#include "wx/toplevel.h"
#include "wx/osx/private.h"
#include "wx/osx/private.h"
+
+ 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:@""];
+ }
+ }
+// 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<wxButtonCocoaImpl*>(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
extern "C" void SetBezelStyleFromBorderFlags(NSButton *v, long style);
// set bezel style depending on the wxBORDER_XXX flags specified by the style
[v setButtonType:NSMomentaryPushInButton];
[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 )
}
void wxWidgetCocoaImpl::SetDefaultButton( bool isDefault )
if ( [m_osxView isKindOfClass:[NSButton class]] )
{
if ( isDefault )
if ( [m_osxView isKindOfClass:[NSButton class]] )
{
if ( isDefault )
[(NSButton*)m_osxView setKeyEquivalent: @"\r" ];
[(NSButton*)m_osxView setKeyEquivalent: @"\r" ];
+ [(NSButton*)m_osxView setKeyEquivalentModifierMask: 0];
+ }
else
[(NSButton*)m_osxView setKeyEquivalent: @"" ];
}
else
[(NSButton*)m_osxView setKeyEquivalent: @"" ];
}