• Thomas Haller's avatar
    libnm: rework setting metadata for property handling · 37938043
    Thomas Haller authored
    NMSetting internally already tracked a list of all proper GObject properties
    and D-Bus-only properties.
    Rework the tracking of the list, so that:
    - instead of attaching the data to the GType of the setting via
      g_type_set_qdata(), it is tracked in a static array indexed by
      NMMetaSettingType. This allows to find the setting-data by simple
      pointer arithmetic, instead of taking a look and iterating (like
      g_type_set_qdata() does).
      Note, that this is still thread safe, because the static table entry is
      initialized in the class-init function with _nm_setting_class_commit().
      And it only accessed by following a NMSettingClass instance, thus
      the class constructor already ran (maybe not for all setting classes,
      but for the particular one that we look up).
      I think this makes initialization of the metadata simpler to
      Previously, in a first phase each class would attach the metadata
      to the GType as setting_property_overrides_quark(). Then during
      nm_setting_class_ensure_properties() it would merge them and
      set as setting_properties_quark(). Now, during the first phase,
      we only incrementally build a properties_override GArray, which
      we finally hand over during nm_setting_class_commit().
    - sort the property infos by name and do binary search.
    Also expose this meta data types as internal API in nm-setting-private.h.
    While not accessed yet, it can prove beneficial, to have direct (internal)
    access to these structures.
    Also, rename NMSettingProperty to NMSettInfoProperty to use a distinct
    naming scheme. We already have 40+ subclasses of NMSetting that are called
    NMSetting*. Likewise, NMMetaSetting* is heavily used already. So, choose a
    new, distinct name.
nm-setting-ip-tunnel.c 23.4 KB