Web lists-archives.com

g_object_class_install_property: G_PARAM_CONSTRUCT | G_PARAM_CONSTRUCT_ONLY not allowed


I am dealing with a scenario where I want to have a property that can only be set and will be set at construction time.
Looking at the documentation, I thought that the appropriate combination of GParamFlags that should be used in this case is:  G_PARAM_CONSTRUCT | G_PARAM_CONSTRUCT_ONLY | G_PARAM_WRITABLE

However, this doesn’t work as I am getting the critical error:

	Glib-GObject-CRITICAL **: g_object_class_install_property: assertion `(pspec->flags & G_PARAM_CONSTRUCT_ONLY) == 0` failed

This can be traced back to the following chunk of code in gobject.c

g_object_class_install_property (GObjectClass *class,
                                 guint         property_id,
                                 GParamSpec   *pspec)
  g_return_if_fail (G_IS_OBJECT_CLASS (class));
  g_return_if_fail (G_IS_PARAM_SPEC (pspec));

    g_error ("Attempt to add property %s::%s to class after it was derived", G_OBJECT_CLASS_NAME (class), pspec->name);

  class->flags |= CLASS_HAS_PROPS_FLAG;

  g_return_if_fail (pspec->flags & (G_PARAM_READABLE | G_PARAM_WRITABLE));
  if (pspec->flags & G_PARAM_WRITABLE)
    g_return_if_fail (class->set_property != NULL);
  if (pspec->flags & G_PARAM_READABLE)
    g_return_if_fail (class->get_property != NULL);
  g_return_if_fail (property_id > 0);
  g_return_if_fail (PARAM_SPEC_PARAM_ID (pspec) == 0);  /* paranoid */
  if (pspec->flags & G_PARAM_CONSTRUCT)
    g_return_if_fail ((pspec->flags & G_PARAM_CONSTRUCT_ONLY) == 0);       # this triggers the early return

Interestingly the next two lines of code appears to deal with exactly my case:

    g_return_if_fail (pspec->flags & G_PARAM_WRITABLE);

Any thoughts on this?

Thanks in advance,


gtk-list mailing list