• Emmanuele Bassi's avatar
    Allow binding GdkContentFormatsBuilder · 2cbe094b
    Emmanuele Bassi authored
    GdkContentFormatsBuilder is currently not introspectable, as it does not
    have a GType. We can turn it into a boxed type, but we need to implement
    memory management for it.
    
    The current gdk_content_formats_builder_free() function returns a newly
    constructed value, so we cannot use it as a GBoxedFreeFunc; additionally
    copying a GdkContentFormatsBuilder contents would make it a bit odd, as
    you could get multiple identical GdkContentFormats out of the copies.
    
    A simple approach is to model the GdkContentFormatsBuilder API to follow
    the GBytes one: use reference counting for memory management, and have
    a function to release a reference, return a GdkContentFormats, and reset
    the GdkContentFormatsBuilder state.
    
    For language bindings, we can provide a get_formats() function that
    returns the GdkContentFormats instance and resets the builder instance,
    leaving the reference count untouched.
    
    For C convenience we can keep gdk_content_formats_builder_free(), and
    make it a wrapper around gdk_content_formats_builder_get_formats(), with
    the guarantee that it'll free the builder instance regardless of its
    current reference count.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=793097
    https://blogs.gnome.org/otte/2018/02/03/builders/
    2cbe094b