Avoid "Gtk-WARNING **: State doesn't match"

See https://github.com/wxWidgets/wxWidgets/pull/232
(backport of 69a13d973c)
This commit is contained in:
Paul Cornett
2016-02-24 21:20:08 -08:00
parent 0388ce8e25
commit 7afbdcd534
6 changed files with 13 additions and 1 deletions

View File

@@ -251,6 +251,7 @@ wxControl::GetDefaultAttributesFromGTKWidget(GtkWidget* widget,
} }
GtkStyleContext* sc = gtk_widget_get_style_context(widget); GtkStyleContext* sc = gtk_widget_get_style_context(widget);
GdkRGBA c; GdkRGBA c;
gtk_style_context_set_state(sc, stateFlag);
gtk_style_context_get_color(sc, stateFlag, &c); gtk_style_context_get_color(sc, stateFlag, &c);
attr.colFg = wxColour(c); attr.colFg = wxColour(c);
gtk_style_context_get_background_color(sc, stateFlag, &c); gtk_style_context_get_background_color(sc, stateFlag, &c);

View File

@@ -155,33 +155,39 @@ static GtkWidget* ToolTipWidget()
static void bg(GtkWidget* widget, GtkStateFlags state, GdkRGBA& gdkRGBA) static void bg(GtkWidget* widget, GtkStateFlags state, GdkRGBA& gdkRGBA)
{ {
GtkStyleContext* sc = gtk_widget_get_style_context(widget); GtkStyleContext* sc = gtk_widget_get_style_context(widget);
gtk_style_context_set_state(sc, state);
gtk_style_context_get_background_color(sc, state, &gdkRGBA); gtk_style_context_get_background_color(sc, state, &gdkRGBA);
if (gdkRGBA.alpha <= 0) if (gdkRGBA.alpha <= 0)
{ {
widget = gtk_widget_get_parent(GTK_WIDGET(ContainerWidget())); widget = gtk_widget_get_parent(GTK_WIDGET(ContainerWidget()));
sc = gtk_widget_get_style_context(widget); sc = gtk_widget_get_style_context(widget);
gtk_style_context_set_state(sc, state);
gtk_style_context_get_background_color(sc, state, &gdkRGBA); gtk_style_context_get_background_color(sc, state, &gdkRGBA);
} }
} }
static void fg(GtkWidget* widget, GtkStateFlags state, GdkRGBA& gdkRGBA) static void fg(GtkWidget* widget, GtkStateFlags state, GdkRGBA& gdkRGBA)
{ {
GtkStyleContext* sc = gtk_widget_get_style_context(widget); GtkStyleContext* sc = gtk_widget_get_style_context(widget);
gtk_style_context_set_state(sc, state);
gtk_style_context_get_color(sc, state, &gdkRGBA); gtk_style_context_get_color(sc, state, &gdkRGBA);
if (gdkRGBA.alpha <= 0) if (gdkRGBA.alpha <= 0)
{ {
widget = gtk_widget_get_parent(GTK_WIDGET(ContainerWidget())); widget = gtk_widget_get_parent(GTK_WIDGET(ContainerWidget()));
sc = gtk_widget_get_style_context(widget); sc = gtk_widget_get_style_context(widget);
gtk_style_context_set_state(sc, state);
gtk_style_context_get_color(sc, state, &gdkRGBA); gtk_style_context_get_color(sc, state, &gdkRGBA);
} }
} }
static void border(GtkWidget* widget, GtkStateFlags state, GdkRGBA& gdkRGBA) static void border(GtkWidget* widget, GtkStateFlags state, GdkRGBA& gdkRGBA)
{ {
GtkStyleContext* sc = gtk_widget_get_style_context(widget); GtkStyleContext* sc = gtk_widget_get_style_context(widget);
gtk_style_context_set_state(sc, state);
gtk_style_context_get_border_color(sc, state, &gdkRGBA); gtk_style_context_get_border_color(sc, state, &gdkRGBA);
if (gdkRGBA.alpha <= 0) if (gdkRGBA.alpha <= 0)
{ {
widget = gtk_widget_get_parent(GTK_WIDGET(ContainerWidget())); widget = gtk_widget_get_parent(GTK_WIDGET(ContainerWidget()));
sc = gtk_widget_get_style_context(widget); sc = gtk_widget_get_style_context(widget);
gtk_style_context_set_state(sc, state);
gtk_style_context_get_border_color(sc, state, &gdkRGBA); gtk_style_context_get_border_color(sc, state, &gdkRGBA);
} }
} }
@@ -453,6 +459,7 @@ wxFont wxSystemSettingsNative::GetFont( wxSystemFont index )
wxNativeFontInfo info; wxNativeFontInfo info;
#ifdef __WXGTK3__ #ifdef __WXGTK3__
GtkStyleContext* sc = gtk_widget_get_style_context(ButtonWidget()); GtkStyleContext* sc = gtk_widget_get_style_context(ButtonWidget());
gtk_style_context_set_state(sc, GTK_STATE_FLAG_NORMAL);
gtk_style_context_get(sc, GTK_STATE_FLAG_NORMAL, gtk_style_context_get(sc, GTK_STATE_FLAG_NORMAL,
GTK_STYLE_PROPERTY_FONT, &info.description, NULL); GTK_STYLE_PROPERTY_FONT, &info.description, NULL);
#else #else

View File

@@ -196,7 +196,7 @@ wxSize wxSpinButton::DoGetBestSize() const
#ifdef __WXGTK3__ #ifdef __WXGTK3__
GtkStyleContext* sc = gtk_widget_get_style_context(m_widget); GtkStyleContext* sc = gtk_widget_get_style_context(m_widget);
GtkBorder pad = { 0, 0, 0, 0 }; GtkBorder pad = { 0, 0, 0, 0 };
gtk_style_context_get_padding(sc, GtkStateFlags(0), &pad); gtk_style_context_get_padding(sc, gtk_style_context_get_state(sc), &pad);
best.x -= pad.left + pad.right; best.x -= pad.left + pad.right;
#else #else
gtk_widget_ensure_style(m_widget); gtk_widget_ensure_style(m_widget);

View File

@@ -1828,6 +1828,7 @@ void wxTextCtrl::DoApplyWidgetStyle(GtkRcStyle *style)
gtk_style_context_save(context); gtk_style_context_save(context);
gtk_style_context_add_class(context, GTK_STYLE_CLASS_VIEW); gtk_style_context_add_class(context, GTK_STYLE_CLASS_VIEW);
} }
gtk_style_context_set_state(context, selectedFocused);
gtk_style_context_get_color(context, selectedFocused, &fg_orig); gtk_style_context_get_color(context, selectedFocused, &fg_orig);
gtk_style_context_get_background_color(context, selectedFocused, &bg_orig); gtk_style_context_get_background_color(context, selectedFocused, &bg_orig);
if (IsMultiLine()) if (IsMultiLine())

View File

@@ -452,6 +452,7 @@ void wxPizza::get_border(GtkBorder& border)
else else
sc = gtk_widget_get_style_context(wxGTKPrivate::GetEntryWidget()); sc = gtk_widget_get_style_context(wxGTKPrivate::GetEntryWidget());
gtk_style_context_set_state(sc, GTK_STATE_FLAG_NORMAL);
gtk_style_context_get_border(sc, GTK_STATE_FLAG_NORMAL, &border); gtk_style_context_get_border(sc, GTK_STATE_FLAG_NORMAL, &border);
#else // !__WXGTK3__ #else // !__WXGTK3__
GtkStyle* style; GtkStyle* style;

View File

@@ -304,6 +304,7 @@ draw_border(GtkWidget* widget, GdkEventExpose* gdk_event, wxWindow* win)
#ifdef __WXGTK3__ #ifdef __WXGTK3__
GtkStyleContext* sc = gtk_widget_get_style_context(win->m_wxwindow); GtkStyleContext* sc = gtk_widget_get_style_context(win->m_wxwindow);
GdkRGBA c; GdkRGBA c;
gtk_style_context_set_state(sc, GTK_STATE_FLAG_NORMAL);
gtk_style_context_get_border_color(sc, GTK_STATE_FLAG_NORMAL, &c); gtk_style_context_get_border_color(sc, GTK_STATE_FLAG_NORMAL, &c);
gdk_cairo_set_source_rgba(cr, &c); gdk_cairo_set_source_rgba(cr, &c);
cairo_set_line_width(cr, 1); cairo_set_line_width(cr, 1);
@@ -4443,6 +4444,7 @@ void wxWindowGTK::GTKApplyStyle(GtkWidget* widget, GtkRcStyle* WXUNUSED_IN_GTK3(
cairo_pattern_t* pattern = NULL; cairo_pattern_t* pattern = NULL;
if (m_backgroundColour.IsOk()) if (m_backgroundColour.IsOk())
{ {
gtk_style_context_set_state(context, GTK_STATE_FLAG_NORMAL);
gtk_style_context_get(context, gtk_style_context_get(context,
GTK_STATE_FLAG_NORMAL, "background-image", &pattern, NULL); GTK_STATE_FLAG_NORMAL, "background-image", &pattern, NULL);
} }