因为版本gtk v3.16后gtk_style_context_get_background_color被删除了,所以我想读出以下样式属性:GTK_STYLE_PROPERTY_BACKGROUND_COLOR
我的代码看起来很像:
GdkRGBA *color;
...
GValue value = G_VALUE_INIT;
gtk_style_context_get_property (context,GTK_STYLE_PROPERTY_BACKGROUND_COLOR, state, &value);
color = g_value_get_object (&value);
但似乎我做错了。在运行时我只得到以下GLib-GObject-CRITICAL:
(thunar:6564):GLib-GObject-CRITICAL **:g_value_get_object:断言 ' G_VALUE_HOLDS_OBJECT(值)'失败
那么我如何使用持有更复杂数据类型的gtk属性呢?
编辑: 这里现在适合我的完整解决方案:
GtkStateFlags state;
GdkRGBA *color;
GtkStyleContext *context = gtk_widget_get_style_context (widget);
// get the color
gtk_style_context_get (context, GTK_STATE_FLAG_SELECTED, GTK_STYLE_PROPERTY_BACKGROUND_COLOR, &color, NULL);
// do something with the color
gdk_cairo_set_source_rgba (cr, color);
// dont forget to free it afterwards !! (Otherwise segfaults may occur)
gdk_rgba_free (color);
答案 0 :(得分:2)
您可以完全跳过GValue:
GdkRGBA *c;
gtk_style_context_get (context,
GTK_STYLE_PROPERTY_BACKGROUND_COLOR, &c,
NULL);
// ...
gdk_rgba_free (c);