X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/dfc220831a1fcf5658031c528b784afc43999e38..9968f7b4cd6752ead5744d4895ed392458d83abd:/src/gtk/button.cpp diff --git a/src/gtk/button.cpp b/src/gtk/button.cpp index d1876481e8..fabe9a234f 100644 --- a/src/gtk/button.cpp +++ b/src/gtk/button.cpp @@ -20,12 +20,6 @@ #include "wx/gtk/private.h" -//----------------------------------------------------------------------------- -// classes -//----------------------------------------------------------------------------- - -class wxButton; - //----------------------------------------------------------------------------- // data //----------------------------------------------------------------------------- @@ -52,35 +46,27 @@ static void gtk_button_clicked_callback( GtkWidget *WXUNUSED(widget), wxButton * // "style_set" from m_widget //----------------------------------------------------------------------------- -static gint -gtk_button_style_set_callback( GtkWidget *m_widget, GtkStyle *WXUNUSED(style), wxButton *win ) +extern "C" { +static void +gtk_button_style_set_callback(GtkWidget* widget, GtkStyle*, 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)) + wxWindow* parent = win->GetParent(); + if (parent && parent->m_wxwindow && GTK_WIDGET_CAN_DEFAULT(widget)) { - GtkBorder *default_border = NULL; - gtk_widget_style_get( m_widget, "default_border", &default_border, NULL ); - if (default_border) + GtkBorder* border = NULL; + gtk_widget_style_get(widget, "default_border", &border, NULL); + if (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 - border->left, + win->m_y - border->top, + win->m_width + border->left + border->right, + win->m_height + border->top + border->bottom); + gtk_border_free(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; +} } //----------------------------------------------------------------------------- @@ -114,6 +100,7 @@ bool wxButton::Create(wxWindow *parent, } m_widget = gtk_button_new_with_mnemonic(""); + g_object_ref(m_widget); float x_alignment = 0.5; if (HasFlag(wxBU_LEFT)) @@ -209,8 +196,6 @@ void wxButton::SetLabel( const wxString &lbl ) wxControl::SetLabel(label); - const wxString labelGTK = GTKConvertMnemonics(label); - if (wxIsStockID(m_windowId) && wxIsStockLabel(m_windowId, label)) { const char *stock = wxGetStockGtkID(m_windowId); @@ -222,6 +207,7 @@ void wxButton::SetLabel( const wxString &lbl ) } } + 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); @@ -256,9 +242,11 @@ void wxButton::DoApplyWidgetStyle(GtkRcStyle *style) GtkWidget *box = GTK_BIN(child)->child; if ( GTK_IS_BOX(box) ) { - GList *items = gtk_container_get_children(GTK_CONTAINER(box)); - for ( GList *item = items; item; item = item->next ) - gtk_widget_modify_style(GTK_WIDGET(item->data), style); + for (GList* item = GTK_BOX(box)->children; item; item = item->next) + { + GtkBoxChild* boxChild = static_cast(item->data); + gtk_widget_modify_style(boxChild->widget, style); + } } } }