libnm: hide NMVpnPluginInfo structs from public API

The NMVpnPluginInfo class is not intended to be subclassed. An API that
allows to be subclassed needs to be designed in a certain manner for
that to be useful. NMVpnPluginInfo does not want to support that.

Only because a user technically could do that (as the structs were
in the public headers), it does not make it supported. Not everything
that is possible in C is guaranteed to work.

Also, of course there exist no users in practice that would rely on this.
So, hide the structs.

Also, this allows to embed the private data in the GObject struct
itself, which is useful for debugging and for performance.
This commit is contained in:
Thomas Haller 2020-03-14 18:01:08 +01:00
parent 67c00353d3
commit 6b07b40c46
2 changed files with 15 additions and 22 deletions

View file

@ -42,14 +42,26 @@ typedef struct {
NMVpnEditorPlugin *editor_plugin;
} NMVpnPluginInfoPrivate;
/**
* NMVpnPluginInfo:
*/
struct _NMVpnPluginInfo {
GObject parent;
NMVpnPluginInfoPrivate _priv;
};
struct _NMVpnPluginInfoClass {
GObjectClass parent;
};
#define NM_VPN_PLUGIN_INFO_GET_PRIVATE(self) _NM_GET_PRIVATE (self, NMVpnPluginInfo, NM_IS_VPN_PLUGIN_INFO)
static void nm_vpn_plugin_info_initable_iface_init (GInitableIface *iface);
G_DEFINE_TYPE_WITH_CODE (NMVpnPluginInfo, nm_vpn_plugin_info, G_TYPE_OBJECT,
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, nm_vpn_plugin_info_initable_iface_init);
)
#define NM_VPN_PLUGIN_INFO_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), NM_TYPE_VPN_PLUGIN_INFO, NMVpnPluginInfoPrivate))
/*****************************************************************************/
static NMVpnPluginInfo *_list_find_by_service (GSList *list,
@ -1261,8 +1273,6 @@ nm_vpn_plugin_info_class_init (NMVpnPluginInfoClass *plugin_class)
{
GObjectClass *object_class = G_OBJECT_CLASS (plugin_class);
g_type_class_add_private (object_class, sizeof (NMVpnPluginInfoPrivate));
object_class->set_property = set_property;
object_class->get_property = get_property;
object_class->dispose = dispose;

View file

@ -29,24 +29,7 @@ G_BEGIN_DECLS
#define NM_VPN_PLUGIN_INFO_KF_GROUP_LIBNM "libnm"
#define NM_VPN_PLUGIN_INFO_KF_GROUP_GNOME "GNOME"
struct _NMVpnPluginInfo;
/**
* NMVpnPluginInfo:
*/
struct _NMVpnPluginInfo {
NM_AVAILABLE_IN_1_2
GObject parent;
};
typedef struct {
NM_AVAILABLE_IN_1_2
GObjectClass parent;
/*< private >*/
NM_AVAILABLE_IN_1_2
gpointer padding[8];
} NMVpnPluginInfoClass NM_AVAILABLE_IN_1_2;
typedef struct _NMVpnPluginInfoClass NMVpnPluginInfoClass;
NM_AVAILABLE_IN_1_2
GType nm_vpn_plugin_info_get_type (void);