Add G_IMPLEMENT_INTERFACE_DYNAMIC

Convenience macro to easy interface addition for dynamic types.

https://bugzilla.gnome.org/show_bug.cgi?id=508157
This commit is contained in:
Alexander Larsson 2009-11-24 09:53:15 +01:00
parent b3156508c4
commit 7d51c96e5e
2 changed files with 25 additions and 3 deletions

View File

@ -202,6 +202,7 @@ g_type_module_register_flags
G_DEFINE_DYNAMIC_TYPE G_DEFINE_DYNAMIC_TYPE
G_DEFINE_DYNAMIC_TYPE_EXTENDED G_DEFINE_DYNAMIC_TYPE_EXTENDED
G_IMPLEMENT_INTERFACE_DYNAMIC
<SUBSECTION Standard> <SUBSECTION Standard>
G_TYPE_MODULE G_TYPE_MODULE

View File

@ -119,8 +119,8 @@ struct _GTypeModuleClass
* gtk_gadget, * gtk_gadget,
* GTK_TYPE_THING, * GTK_TYPE_THING,
* 0, * 0,
* G_IMPLEMENT_INTERFACE (TYPE_GIZMO, * G_IMPLEMENT_INTERFACE_DYNAMIC (TYPE_GIZMO,
* gtk_gadget_gizmo_init)); * gtk_gadget_gizmo_init));
* ]| * ]|
* expands to * expands to
* |[ * |[
@ -167,7 +167,7 @@ struct _GTypeModuleClass
* const GInterfaceInfo g_implement_interface_info = { * const GInterfaceInfo g_implement_interface_info = {
* (GInterfaceInitFunc) gtk_gadget_gizmo_init * (GInterfaceInitFunc) gtk_gadget_gizmo_init
* }; * };
* g_type_add_interface_static (g_define_type_id, TYPE_GIZMO, &g_implement_interface_info); * g_type_module_add_interface (type_module, g_define_type_id, TYPE_GIZMO, &g_implement_interface_info);
* } * }
* } * }
* ]| * ]|
@ -215,6 +215,27 @@ type_name##_register_type (GTypeModule *type_module) \
{ CODE ; } \ { CODE ; } \
} }
/**
* G_IMPLEMENT_INTERFACE_DYNAMIC:
* @TYPE_IFACE: The #GType of the interface to add
* @iface_init: The interface init function
*
* A convenience macro to ease interface addition in the @_C_ section
* of G_DEFINE_DYNAMIC_TYPE_EXTENDED(). See G_DEFINE_DYNAMIC_TYPE_EXTENDED()
* for an example.
*
* Note that this macro can only be used together with the
* G_DEFINE_DYNAMIC_TYPE_EXTENDED macros, since it depends on variable
* names from that macro.
*
* Since: 2.24
*/
#define G_IMPLEMENT_INTERFACE_DYNAMIC(TYPE_IFACE, iface_init) { \
const GInterfaceInfo g_implement_interface_info = { \
iface_init, NULL, NULL \
}; \
g_type_module_add_interface (type_module, g_define_type_id, TYPE_IFACE, &g_implement_interface_info); \
}
GType g_type_module_get_type (void) G_GNUC_CONST; GType g_type_module_get_type (void) G_GNUC_CONST;
gboolean g_type_module_use (GTypeModule *module); gboolean g_type_module_use (GTypeModule *module);