X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/b38dc31ffa6eb372727a7b0e65001a1c3d107fcb..8fe8b421fc1e5bb71e7ce3e2272d747ac6df079c:/src/osx/button_osx.cpp diff --git a/src/osx/button_osx.cpp b/src/osx/button_osx.cpp index b61d296384..ceedc162b4 100644 --- a/src/osx/button_osx.cpp +++ b/src/osx/button_osx.cpp @@ -17,12 +17,31 @@ #include "wx/panel.h" #include "wx/toplevel.h" #include "wx/dcclient.h" + #include "wx/stattext.h" #endif #include "wx/stockitem.h" #include "wx/osx/private.h" +namespace +{ + +// Returns true only if the id is wxID_HELP and the label is "Help" or empty. +bool IsHelpButtonWithStandardLabel(wxWindowID id, const wxString& label) +{ + if ( id != wxID_HELP ) + return false; + + if ( label.empty() ) + return true; + + const wxString labelText = wxStaticText::GetLabelText(label); + return labelText == "Help" || labelText == _("Help"); +} + +} // anonymous namespace + IMPLEMENT_DYNAMIC_CLASS(wxButton, wxControl) BEGIN_EVENT_TABLE(wxButton, wxControl) @@ -32,7 +51,7 @@ END_EVENT_TABLE() bool wxButton::Create(wxWindow *parent, wxWindowID id, - const wxString& lbl, + const wxString& labelOrig, const wxPoint& pos, const wxSize& size, long style, @@ -54,9 +73,15 @@ bool wxButton::Create(wxWindow *parent, validator, name); } - wxString label(lbl); - if (label.empty() && wxIsStockID(id) && !(id == wxID_HELP)) - label = wxGetStockLabel(id); + wxString label; + + // Ignore the standard label for help buttons if possible, they use "?" + // label under Mac which looks better. + if ( !IsHelpButtonWithStandardLabel(id, labelOrig) ) + { + label = labelOrig.empty() && wxIsStockID(id) ? wxGetStockLabel(id) + : labelOrig; + } m_macIsUserPane = false ; @@ -75,7 +100,13 @@ bool wxButton::Create(wxWindow *parent, void wxButton::SetLabel(const wxString& label) { - if ( GetId() == wxID_HELP || HasFlag(wxBU_NOTEXT) ) + if ( IsHelpButtonWithStandardLabel(GetId(), label) ) + { + // ignore the standard label for the help buttons, it's not used + return; + } + + if ( HasFlag(wxBU_NOTEXT) ) { // just store the label internally but don't really use it for the // button @@ -104,11 +135,13 @@ void wxButton::DoSetBitmap(const wxBitmap& bitmap, State which) if ( bi ) bi->SetPressedBitmap(bitmap); } + InvalidateBestSize(); } void wxButton::DoSetBitmapPosition(wxDirection dir) { m_peer->SetBitmapPosition(dir); + InvalidateBestSize(); } wxWindow *wxButton::SetDefault()