+//-----------------------------------------------------------------------------
+// data
+//-----------------------------------------------------------------------------
+
+extern bool g_blockEventsOnDrag;
+
+//-----------------------------------------------------------------------------
+// "clicked"
+//-----------------------------------------------------------------------------
+
+extern "C" {
+static void gtk_button_clicked_callback( GtkWidget *WXUNUSED(widget), wxButton *button )
+{
+ if (!button->m_hasVMT) return;
+ if (g_blockEventsOnDrag) return;
+
+ wxCommandEvent event(wxEVT_COMMAND_BUTTON_CLICKED, button->GetId());
+ event.SetEventObject(button);
+ button->GetEventHandler()->ProcessEvent(event);
+}
+}
+
+//-----------------------------------------------------------------------------
+// "style_set" from m_widget
+//-----------------------------------------------------------------------------
+
+static gint
+gtk_button_style_set_callback( GtkWidget *m_widget, GtkStyle *WXUNUSED(style), wxButton *win )
+{
+ int left_border = 0;
+ int right_border = 0;
+ int top_border = 0;
+ int bottom_border = 0;
+
+ /* the default button has a border around it */
+ if (GTK_WIDGET_CAN_DEFAULT(m_widget))
+ {
+ GtkBorder *default_border = NULL;
+ gtk_widget_style_get( m_widget, "default_border", &default_border, NULL );
+ if (default_border)
+ {
+ left_border += default_border->left;
+ right_border += default_border->right;
+ top_border += default_border->top;
+ bottom_border += default_border->bottom;
+ gtk_border_free( default_border );
+ }
+ win->MoveWindow(
+ win->m_x - left_border,
+ win->m_y - top_border,
+ win->m_width + left_border + right_border,
+ win->m_height + top_border + bottom_border);
+ }
+
+ return FALSE;
+}
+