+ if (!button->m_hasVMT) return;
+ if (g_blockEventsOnDrag) return;
+
+ button->EndSelect();
+}
+}
+
+//-----------------------------------------------------------------------------
+// wxBitmapButton
+//-----------------------------------------------------------------------------
+
+IMPLEMENT_DYNAMIC_CLASS(wxBitmapButton,wxButton)
+
+void wxBitmapButton::Init()
+{
+ m_hasFocus =
+ m_isSelected = false;
+}
+
+bool wxBitmapButton::Create( wxWindow *parent,
+ wxWindowID id,
+ const wxBitmap& bitmap,
+ const wxPoint& pos,
+ const wxSize& size,
+ long style,
+ const wxValidator& validator,
+ const wxString &name )
+{
+ m_needParent = true;
+ m_acceptsFocus = true;
+
+ if (!PreCreation( parent, pos, size ) ||
+ !CreateBase( parent, id, pos, size, style, validator, name ))
+ {
+ wxFAIL_MSG( wxT("wxBitmapButton creation failed") );
+ return false;
+ }
+
+ m_bmpNormal = bitmap;
+
+ m_widget = gtk_button_new();
+
+ if (style & wxNO_BORDER)
+ gtk_button_set_relief( GTK_BUTTON(m_widget), GTK_RELIEF_NONE );
+
+ if (m_bmpNormal.Ok())
+ {
+ OnSetBitmap();
+ }
+
+ g_signal_connect_after (m_widget, "clicked",
+ G_CALLBACK (gtk_bmpbutton_clicked_callback),
+ this);
+
+ g_signal_connect (m_widget, "enter",
+ G_CALLBACK (gtk_bmpbutton_enter_callback), this);
+ g_signal_connect (m_widget, "leave",
+ G_CALLBACK (gtk_bmpbutton_leave_callback), this);
+ g_signal_connect (m_widget, "pressed",
+ G_CALLBACK (gtk_bmpbutton_press_callback), this);
+ g_signal_connect (m_widget, "released",
+ G_CALLBACK (gtk_bmpbutton_release_callback), this);
+
+ m_parent->DoAddChild( this );
+
+ PostCreation(size);
+
+ return true;
+}
+
+void wxBitmapButton::SetDefault()
+{
+ GTK_WIDGET_SET_FLAGS( m_widget, GTK_CAN_DEFAULT );
+ gtk_widget_grab_default( m_widget );
+
+ SetSize( m_x, m_y, m_width, m_height );