从GValue中获取对象

时间:2017-11-18 22:58:48

标签: c gtk3

因为版本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);

1 个答案:

答案 0 :(得分:2)

您可以完全跳过GValue:

GdkRGBA *c;
gtk_style_context_get (context,
                       GTK_STYLE_PROPERTY_BACKGROUND_COLOR, &c,
                       NULL);
// ...
gdk_rgba_free (c);