+void wxButton::GTKMouseEnters()
+{
+ m_isCurrent = true;
+
+ GTKUpdateBitmap();
+}
+
+void wxButton::GTKMouseLeaves()
+{
+ m_isCurrent = false;
+
+ GTKUpdateBitmap();
+}
+
+void wxButton::GTKPressed()
+{
+ m_isPressed = true;
+
+ GTKUpdateBitmap();
+}
+
+void wxButton::GTKReleased()
+{
+ m_isPressed = false;
+
+ GTKUpdateBitmap();
+}
+
+void wxButton::GTKOnFocus(wxFocusEvent& event)
+{
+ event.Skip();
+
+ GTKUpdateBitmap();
+}
+
+wxButton::State wxButton::GTKGetCurrentState() const
+{
+ if ( !IsThisEnabled() )
+ return m_bitmaps[State_Disabled].IsOk() ? State_Disabled : State_Normal;
+
+ if ( m_isPressed && m_bitmaps[State_Pressed].IsOk() )
+ return State_Pressed;
+
+ if ( m_isCurrent && m_bitmaps[State_Current].IsOk() )
+ return State_Current;
+
+ if ( HasFocus() && m_bitmaps[State_Focused].IsOk() )
+ return State_Focused;
+
+ return State_Normal;
+}
+
+void wxButton::GTKUpdateBitmap()
+{
+ State state = GTKGetCurrentState();
+
+ GTKDoShowBitmap(m_bitmaps[state]);
+}
+
+void wxButton::GTKDoShowBitmap(const wxBitmap& bitmap)
+{
+ wxASSERT_MSG( bitmap.IsOk(), "invalid bitmap" );
+
+#ifdef __WXGTK26__
+ if ( !gtk_check_version(2,6,0) )
+ {
+ GtkWidget *image = gtk_button_get_image(GTK_BUTTON(m_widget));
+ wxCHECK_RET( image, "must have image widget" );
+
+ gtk_image_set_from_pixbuf(GTK_IMAGE(image), bitmap.GetPixbuf());
+ }
+#endif // __WXGTK26__
+}
+