// create either a standard button with text label (which may still contain
// an image under GTK+ 2.6+) or a bitmap-only button if we don't have any
// label
- const bool useLabel = !label.empty() || wxIsStockID(id);
+ const bool
+ useLabel = !(style & wxBU_NOTEXT) && (!label.empty() || wxIsStockID(id));
if ( useLabel )
{
m_widget = gtk_button_new_with_mnemonic("");
wxControl::SetLabel(label);
+ // don't use label if it was explicitly disabled
+ if ( HasFlag(wxBU_NOTEXT) )
+ return;
+
if (wxIsStockID(m_windowId) && wxIsStockLabel(m_windowId, label))
{
const char *stock = wxGetStockGtkID(m_windowId);
}
}
+ // this call is necessary if the button had been initially created without
+ // a (text) label -- then we didn't use gtk_button_new_with_mnemonic() and
+ // so "use-underline" GtkButton property remained unset
+ gtk_button_set_use_underline(GTK_BUTTON(m_widget), TRUE);
const wxString labelGTK = GTKConvertMnemonics(label);
gtk_button_set_label(GTK_BUTTON(m_widget), wxGTK_CONV(labelGTK));
gtk_button_set_use_stock(GTK_BUTTON(m_widget), FALSE);
bool wxButton::Enable( bool enable )
{
- bool isEnabled = IsEnabled();
-
- if ( !wxControl::Enable( enable ) )
+ if (!base_type::Enable(enable))
return false;
gtk_widget_set_sensitive(GTK_BIN(m_widget)->child, enable);
- if (!isEnabled && enable)
- {
+ if (enable)
GTKFixSensitivity();
- }
GTKUpdateBitmap();
void wxButton::GTKUpdateBitmap()
{
- State state = GTKGetCurrentState();
+ // if we don't show bitmaps at all, there is nothing to update
+ if ( m_bitmaps[State_Normal].IsOk() )
+ {
+ // if we do show them, this will return a state for which we do have a
+ // valid bitmap
+ State state = GTKGetCurrentState();
- GTKDoShowBitmap(m_bitmaps[state]);
+ GTKDoShowBitmap(m_bitmaps[state]);
+ }
}
void wxButton::GTKDoShowBitmap(const wxBitmap& bitmap)
wxASSERT_MSG( bitmap.IsOk(), "invalid bitmap" );
GtkWidget *image;
- if ( GetLabel().empty() )
+ if ( DontShowLabel() )
{
image = GTK_BIN(m_widget)->child;
}
switch ( which )
{
case State_Normal:
- if ( GetLabel().empty() )
+ if ( DontShowLabel() )
{
// we only have the bitmap in this button, never remove it but
// do invalidate the best size when the bitmap (and presumably
}
gtk_button_set_image_position(GTK_BUTTON(m_widget), gtkpos);
+ InvalidateBestSize();
}
#endif // GTK+ 2.10+
}