Interface TypePlugin
- All Superinterfaces:
Proxy
- All Known Implementing Classes:
IOModule
,TypeModule
,TypeModule.TypeModuleImpl
,TypePlugin.TypePluginImpl
The GObject type system supports dynamic loading of types. It goes as follows:
1. The type is initially introduced (usually upon loading the module the first time, or by your main application that knows what modules introduces what types), like this:
new_type_id = g_type_register_dynamic (parent_type_id,
"TypeName",
new_type_plugin,
type_flags);
where new_type_plugin
is an implementation of the
GTypePlugin
interface.
2. The type's implementation is referenced, e.g. through
TypeClass.ref(org.gnome.glib.Type)
or through GObjects.typeCreateInstance(org.gnome.glib.Type)
(this is being called by GObject(org.gnome.glib.Type, java.lang.String, java.lang.Object...)
) or through one of the above
done on a type derived from new_type_id
.
3. This causes the type system to load the type's implementation by calling
use()
and completeTypeInfo(org.gnome.glib.Type, org.gnome.gobject.TypeInfo, org.gnome.gobject.TypeValueTable)
on new_type_plugin
.
4. At some point the type's implementation isn't required anymore, e.g. after
TypeClass.unref()
or GObjects.typeFreeInstance(org.gnome.gobject.TypeInstance)
(called when the reference count of an instance drops to zero).
5. This causes the type system to throw away the information retrieved
from completeTypeInfo(org.gnome.glib.Type, org.gnome.gobject.TypeInfo, org.gnome.gobject.TypeValueTable)
and then it calls
unuse()
on new_type_plugin
.
6. Things may repeat from the second step.
So basically, you need to implement a GTypePlugin
type that
carries a use_count, once use_count goes from zero to one, you need
to load the implementation to successfully handle the upcoming
completeTypeInfo(org.gnome.glib.Type, org.gnome.gobject.TypeInfo, org.gnome.gobject.TypeValueTable)
call. Later, maybe after
succeeding use/unuse calls, once use_count drops to zero, you can
unload the implementation again. The type system makes sure to call
use()
and completeTypeInfo(org.gnome.glib.Type, org.gnome.gobject.TypeInfo, org.gnome.gobject.TypeValueTable)
again when the type is needed again.
TypeModule
is an implementation of GTypePlugin
that
already implements most of this except for the actual module loading and
unloading. It even handles multiple registered types per module.
-
Nested Class Summary
Modifier and TypeInterfaceDescriptionstatic class
The TypePluginImpl type represents a native instance of the TypePlugin interface. -
Method Summary
Modifier and TypeMethodDescriptiondefault void
completeInterfaceInfo
(Type instanceType, Type interfaceType, InterfaceInfo info) Calls thecompleteInterfaceInfo
function from theGTypePluginClass
of this TypePlugin.default void
completeTypeInfo
(Type gType, TypeInfo info, TypeValueTable valueTable) Calls thecompleteTypeInfo
function from theGTypePluginClass
of this TypePlugin.static Type
getType()
Get the GType of the TypePlugin classdefault void
unuse()
Calls theunusePlugin
function from theGTypePluginClass
of this TypePlugin.default void
use()
Calls theusePlugin
function from theGTypePluginClass
of this TypePlugin.
-
Method Details
-
getType
-
completeInterfaceInfo
Calls thecompleteInterfaceInfo
function from theGTypePluginClass
of this TypePlugin. There should be no need to use this function outside of the GObject type system itself.- Parameters:
instanceType
- theGType
of an instantiatable type to which the interface is addedinterfaceType
- theGType
of the interface whose info is completedinfo
- theGInterfaceInfo
to fill in
-
completeTypeInfo
Calls thecompleteTypeInfo
function from theGTypePluginClass
of this TypePlugin. There should be no need to use this function outside of the GObject type system itself.- Parameters:
gType
- theGType
whose info is completedinfo
- theGTypeInfo
struct to fill invalueTable
- theGTypeValueTable
to fill in
-
unuse
default void unuse()Calls theunusePlugin
function from theGTypePluginClass
of this TypePlugin. There should be no need to use this function outside of the GObject type system itself. -
use
default void use()Calls theusePlugin
function from theGTypePluginClass
of this TypePlugin. There should be no need to use this function outside of the GObject type system itself.
-