Skip to content
  • Jehan's avatar
    libgimp: use G_DECLARE_DERIVABLE_TYPE and G_DECLARE_FINAL_TYPE for… · 32310f5e
    Jehan authored
    … the public API.
    
    This was initially proposed by Niels De Graef in !101, and though I
    still think this is much less practical for day-to-day development, it
    is actually much nicer for the public part of the API. So let's use
    these only in public libgimp* API only, not in core.
    
    I actually already started to use these for some of the libgimpwidgets
    classes and am now moving libgimp main classes to these macros.
    
    * It doesn't expose the priv member (which is completely useless for
      plug-in developers, only to be used for core development).
    * It forces us to never have any variable members in the public API
      (which we were doing fine so far in newest API, but it's nice to be
      enforced with these macros).
    * When using G_DECLARE_FINAL_TYPE in particular, it adds flexibility as
      we can change the structure size and the members order as these are
      not exposed. And if some day, we make the class derivable with some
      signals to handle, only then will we expose the class with some
      _gimp_reserved* padding (instead of from the start when none is
      needed). Therefore we will allow for further extension far in the
      future.
    
    Moreover most of these libgimp classes were so far not using any private
    values, so we were declaring a `priv` member with a bogus contents just
    "in case we needed it in future" (as we couldn't change the struct
    size). So even the easiness of having a priv member was very relative
    for this public API so far (unlike in core code where we actually have
    much more complex interactions and using priv data all the time).
    32310f5e