Skip to content
  • Dan Winship's avatar
    core: fix interface type names · 8e9f7820
    Dan Winship authored
    A GObject interface, like a class, has two different C types
    associated with it; the type of the "class" struct (eg, GObjectClass,
    GFileIface), and the type of instances of that class/interface (eg,
    GObject, GFile).
    
    NetworkManager was doing this wrong though, and using the same C type
    to point to both the interface's class struct and to instances of the
    interface. This ends up not actually breaking anything, since for
    interface types, the instance type is a non-dereferenceable dummy type
    anyway. But it's wrong, since if, eg, NMDeviceFactory is a struct type
    containing members "start", "device_added", etc, then you should not
    be using an NMDeviceFactory* to point to an object that does not
    contain those members.
    
    Fix this by splitting NMDeviceFactory into NMDeviceFactoryInterface
    and NMDeviceFactory; by splitting NMConnectionProvider into
    NMConnectionProviderInterface and NMConnectionProvider; and by
    splitting NMSettingsPlugin into NMSettingsPluginInterface and
    NMSettingsPlugin; and then use the right types in the right places.
    
    As a bonus, this also lets us now use G_DEFINE_INTERFACE.
    8e9f7820