From: Vadim Zeitlin Date: Sun, 4 Nov 2012 23:50:50 +0000 (+0000) Subject: Update the button bezel to account for multi-line labels in wxOSX. X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/cabc71dee36b8205d20864129dfbf51a673d536d?ds=sidebyside Update the button bezel to account for multi-line labels in wxOSX. If a button was created using a normal single-line label (including empty one) and then its label was changed to something multi-line later, its size stayed wrong in wxOSX as it still used the fixed size bezel used by normal buttons. Adjust the bezel after each bezel change now to update the size of the button if necessary. Closes #12491. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@72886 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/osx/cocoa/private.h b/include/wx/osx/cocoa/private.h index bc0c046d84..d24e39a1ed 100644 --- a/include/wx/osx/cocoa/private.h +++ b/include/wx/osx/cocoa/private.h @@ -270,7 +270,6 @@ public: void GetLayoutInset(int &left , int &top , int &right, int &bottom) const; void SetAcceleratorFromLabel(const wxString& label); -private: NSButton *GetNSButton() const; }; diff --git a/src/osx/cocoa/button.mm b/src/osx/cocoa/button.mm index 94c6562b7b..16673508c6 100644 --- a/src/osx/cocoa/button.mm +++ b/src/osx/cocoa/button.mm @@ -198,23 +198,6 @@ NSButton *wxButtonCocoaImpl::GetNSButton() const return static_cast(m_osxView); } -// Set the keyboard accelerator key from the label (e.g. "Click &Me") -void wxButton::OSXUpdateAfterLabelChange(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); -} - // Set bezel style depending on the wxBORDER_XXX flags specified by the style // and also accounting for the label (bezels are different for multiline // buttons and normal ones) and the ID (special bezel is used for help button). @@ -276,6 +259,32 @@ SetBezelStyleFromBorderFlags(NSButton *v, } } +// Set the keyboard accelerator key from the label (e.g. "Click &Me") +void wxButton::OSXUpdateAfterLabelChange(const wxString& label) +{ + wxButtonCocoaImpl *impl = static_cast(GetPeer()); + + // Update the bezel style as may be necessary if our new label is multi + // line while the old one wasn't (or vice versa). + SetBezelStyleFromBorderFlags(impl->GetNSButton(), + GetWindowStyle(), + GetId(), + 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; + } + + impl->SetAcceleratorFromLabel(label); +} + wxWidgetImplType* wxWidgetImpl::CreateButton( wxWindowMac* wxpeer, wxWindowMac* WXUNUSED(parent),