X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/c0e6c0513862fc9a33e5800526058193b7492d8b..9348da2fc0395dfe8704cb7e618f7b129f054865:/src/gtk/control.cpp diff --git a/src/gtk/control.cpp b/src/gtk/control.cpp index 41f5cc4ea1..5f2f191171 100644 --- a/src/gtk/control.cpp +++ b/src/gtk/control.cpp @@ -66,6 +66,7 @@ void wxControl::SetLabel( const wxString &label ) } m_label << *pc; } + InvalidateBestSize(); } wxString wxControl::GetLabel() const @@ -85,7 +86,9 @@ wxSize wxControl::DoGetBestSize() const (* GTK_WIDGET_CLASS( GTK_OBJECT_GET_CLASS(m_widget) )->size_request ) (m_widget, &req ); - return wxSize(req.width, req.height); + wxSize best(req.width, req.height); + CacheBestSize(best); + return best; } @@ -100,7 +103,6 @@ void wxControl::PostCreation(const wxSize& size) // GetBestSize is called. gtk_widget_ensure_style(m_widget); - InheritAttributes(); ApplyWidgetStyle(); SetInitialBestSize(size); } @@ -201,7 +203,7 @@ wxControl::GetDefaultAttributesFromGTKWidget(GtkWidget* widget, if ( style && style->font_desc ) { wxNativeFontInfo info; - info.description = style->font_desc; + info.description = pango_font_description_copy(style->font_desc); attr.font = wxFont(info); } else @@ -229,41 +231,50 @@ wxControl::GetDefaultAttributesFromGTKWidget(GtkWidget* widget, //static wxVisualAttributes -wxControl::GetDefaultAttributesFromGTKWidget(GtkWidget* (*widget_new)(void), +wxControl::GetDefaultAttributesFromGTKWidget(wxGtkWidgetNew_t widget_new, bool useBase, int state) { wxVisualAttributes attr; + // NB: we need toplevel window so that GTK+ can find the right style + GtkWidget *wnd = gtk_window_new(GTK_WINDOW_TOPLEVEL); GtkWidget* widget = widget_new(); + gtk_container_add(GTK_CONTAINER(wnd), widget); attr = GetDefaultAttributesFromGTKWidget(widget, useBase, state); - gtk_widget_destroy(widget); + gtk_widget_destroy(wnd); return attr; } //static wxVisualAttributes -wxControl::GetDefaultAttributesFromGTKWidget(GtkWidget* (*widget_new)(const gchar*), +wxControl::GetDefaultAttributesFromGTKWidget(wxGtkWidgetNewFromStr_t widget_new, bool useBase, int state) { wxVisualAttributes attr; + // NB: we need toplevel window so that GTK+ can find the right style + GtkWidget *wnd = gtk_window_new(GTK_WINDOW_TOPLEVEL); GtkWidget* widget = widget_new(""); + gtk_container_add(GTK_CONTAINER(wnd), widget); attr = GetDefaultAttributesFromGTKWidget(widget, useBase, state); - gtk_widget_destroy(widget); + gtk_widget_destroy(wnd); return attr; } //static wxVisualAttributes -wxControl::GetDefaultAttributesFromGTKWidget(GtkWidget* (*widget_new)(GtkAdjustment*), +wxControl::GetDefaultAttributesFromGTKWidget(wxGtkWidgetNewFromAdj_t widget_new, bool useBase, int state) { wxVisualAttributes attr; + // NB: we need toplevel window so that GTK+ can find the right style + GtkWidget *wnd = gtk_window_new(GTK_WINDOW_TOPLEVEL); GtkWidget* widget = widget_new(NULL); + gtk_container_add(GTK_CONTAINER(wnd), widget); attr = GetDefaultAttributesFromGTKWidget(widget, useBase, state); - gtk_widget_destroy(widget); + gtk_widget_destroy(wnd); return attr; }