diff --git a/include/wx/gtk/button.h b/include/wx/gtk/button.h index b8e8128d71..e6fb1b57d3 100644 --- a/include/wx/gtk/button.h +++ b/include/wx/gtk/button.h @@ -67,6 +67,12 @@ private: // Return the GtkLabel used by this button. GtkLabel *GTKGetLabel() const; +#ifndef __WXGTK3__ + // To mark if special GTK style for buttons with wxBU_EXACTFIT flag + // was already defined. + static bool m_exactFitStyleDefined; +#endif // !__WXGTK3__ + wxDECLARE_DYNAMIC_CLASS(wxButton); }; diff --git a/src/gtk/button.cpp b/src/gtk/button.cpp index 267bd0d61b..194c205ef4 100644 --- a/src/gtk/button.cpp +++ b/src/gtk/button.cpp @@ -70,6 +70,10 @@ wxgtk_button_style_set_callback(GtkWidget* widget, GtkStyle*, wxButton* win) // wxButton //----------------------------------------------------------------------------- +#ifndef __WXGTK3__ +bool wxButton::m_exactFitStyleDefined = false; +#endif // !__WXGTK3__ + bool wxButton::Create(wxWindow *parent, wxWindowID id, const wxString &label, @@ -141,7 +145,20 @@ bool wxButton::Create(wxWindow *parent, #ifdef __WXGTK3__ GTKApplyCssStyle("* { padding:0 }"); #else - GTKApplyWidgetStyle(true); // To enforce call to DoApplyWidgetStyle() + // Define a special button style without inner border + // if it's not yet done. + if ( !m_exactFitStyleDefined ) + { + gtk_rc_parse_string( + "style \"wxButton_wxBU_EXACTFIT_style\"\n" + "{ GtkButton::inner-border = { 0, 0, 0, 0 } }\n" + "widget \"*wxButton_wxBU_EXACTFIT*\" style \"wxButton_wxBU_EXACTFIT_style\"\n" + ); + m_exactFitStyleDefined = true; + } + + // Assign the button to the GTK style without inner border. + gtk_widget_set_name(m_widget, "wxButton_wxBU_EXACTFIT"); #endif // __WXGTK3__ / !__WXGTK3__ } @@ -312,11 +329,6 @@ GtkLabel *wxButton::GTKGetLabel() const void wxButton::DoApplyWidgetStyle(GtkRcStyle *style) { - if ( style && HasFlag(wxBU_EXACTFIT) ) - { - style->xthickness = 0; - style->ythickness = 0; - } GTKApplyStyle(m_widget, style); GtkWidget* child = gtk_bin_get_child(GTK_BIN(m_widget)); GTKApplyStyle(child, style);