GTK3:如何在使用gtk_css_provider_load_from_data()后将窗口小部件的背景颜色重置为默认状态

时间:2017-12-02 11:28:20

标签: css gtk3

我曾经通过gtk_widget_override_background_color设置和重置小部件的背景颜色。此功能现已弃用,因此我想切换到使用GtkCssProvider

我知道我可以使用例如

更改输入字段的背景颜色
GtkCssProvider *provider = gtk_css_provider_new ();
gtk_css_provider_load_from_data (provider,
".entry { background: #927373}", -1, NULL);
gtk_style_context_add_provider (gtk_widget_get_style_context (entry_field),
GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);

这很好用。但是,和以前一样,在某些情况下我想将背景颜色恢复为默认状态。 使用

provider = gtk_css_provider_get_default ();
gtk_style_context_add_provider (gtk_widget_get_style_context (entry_field),
GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);

没有任何效果,并且使用

gtk_css_provider_load_from_data (provider,
".entry { background: #none}", -1, NULL);

不是正确的方法,因为小部件中有默认的背景颜色(例如白色(取决于主题),使用背景后:#none它将是灰色的。)

如何在不使用弃用功能的情况下重置为默认颜色?

1 个答案:

答案 0 :(得分:2)

我通过添加和删除类解决了这个问题:

GtkStyleContext *context = gtk_widget_get_style_context (entry);

<强>中加入:

gtk_style_context_add_class (context, "newclass");
gtk_css_provider_load_from_data (provider, 
".entry.newclass { background: #927373}", -1, NULL);

<强>除去:

gtk_style_context_remove_class (context, "newclass");