| Copyright | Will Thompson and Iñaki García Etxebarria |
|---|---|
| License | LGPL-2.1 |
| Maintainer | Iñaki García Etxebarria |
| Safe Haskell | Safe-Inferred |
| Language | Haskell2010 |
GI.GObject.Interfaces.TypePlugin
Description
An interface that handles the lifecycle of dynamically loaded types.
The GObject type system supports dynamic loading of types. It goes as follows:
- 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:
``
c new_type_id = g_type_register_dynamic (parent_type_id, "TypeName", new_type_plugin, type_flags);`wherenew_type_pluginis an implementation of theGTypePlugin@ interface. - The type's implementation is referenced, e.g. through
[func@GObject.TypeClass.ref] or through [func@GObject.type_create_instance]
(this is being called by [ctor@GObject.Object.new]) or through one of the above
done on a type derived from
new_type_id. - This causes the type system to load the type's implementation by calling
[method@GObject.TypePlugin.use] and [method@GObject.TypePlugin.complete_type_info]
on
new_type_plugin. - At some point the type's implementation isn't required anymore, e.g. after [method@GObject.TypeClass.unref] or [func@GObject.type_free_instance] (called when the reference count of an instance drops to zero).
- This causes the type system to throw away the information retrieved
from [method@GObject.TypePlugin.complete_type_info] and then it calls
[method@GObject.TypePlugin.unuse] on
new_type_plugin. - 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
[method@GObject.TypePlugin.complete_type_info] 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
[method@GObject.TypePlugin.use] and [method@GObject.TypePlugin.complete_type_info]
again when the type is needed again.
- class@GObject.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.
Synopsis
- newtype TypePlugin = TypePlugin (ManagedPtr TypePlugin)
- class (ManagedPtrNewtype o, IsDescendantOf TypePlugin o) => IsTypePlugin o
- typePluginCompleteInterfaceInfo :: (HasCallStack, MonadIO m, IsTypePlugin a) => a -> GType -> GType -> InterfaceInfo -> m ()
- typePluginCompleteTypeInfo :: (HasCallStack, MonadIO m, IsTypePlugin a) => a -> GType -> TypeInfo -> TypeValueTable -> m ()
- typePluginUnuse :: (HasCallStack, MonadIO m, IsTypePlugin a) => a -> m ()
- typePluginUse :: (HasCallStack, MonadIO m, IsTypePlugin a) => a -> m ()
Exported types
newtype TypePlugin Source #
Memory-managed wrapper type.
Constructors
| TypePlugin (ManagedPtr TypePlugin) |
Instances
| Eq TypePlugin Source # | |
Defined in GI.GObject.Interfaces.TypePlugin | |
| BoxedPtr TypePlugin Source # | |
Defined in GI.GObject.Interfaces.TypePlugin | |
| ManagedPtrNewtype TypePlugin Source # | |
Defined in GI.GObject.Interfaces.TypePlugin Methods toManagedPtr :: TypePlugin -> ManagedPtr TypePlugin | |
class (ManagedPtrNewtype o, IsDescendantOf TypePlugin o) => IsTypePlugin o Source #
Type class for types which implement TypePlugin.
Instances
| (ManagedPtrNewtype o, IsDescendantOf TypePlugin o) => IsTypePlugin o Source # | |
Defined in GI.GObject.Interfaces.TypePlugin | |
Methods
Click to display all available methods, including inherited ones
completeInterfaceInfo
typePluginCompleteInterfaceInfo Source #
Arguments
| :: (HasCallStack, MonadIO m, IsTypePlugin a) | |
| => a |
|
| -> GType |
|
| -> GType |
|
| -> InterfaceInfo |
|
| -> m () |
Calls the completeInterfaceInfo function from the
GTypePluginClass of plugin. There should be no need to use this
function outside of the GObject type system itself.
completeTypeInfo
typePluginCompleteTypeInfo Source #
Arguments
| :: (HasCallStack, MonadIO m, IsTypePlugin a) | |
| => a |
|
| -> GType |
|
| -> TypeInfo |
|
| -> TypeValueTable |
|
| -> m () |
Calls the completeTypeInfo function from the GTypePluginClass of plugin.
There should be no need to use this function outside of the GObject
type system itself.
unuse
Arguments
| :: (HasCallStack, MonadIO m, IsTypePlugin a) | |
| => a |
|
| -> m () |
Calls the unusePlugin function from the GTypePluginClass of
plugin. There should be no need to use this function outside of
the GObject type system itself.
use
Arguments
| :: (HasCallStack, MonadIO m, IsTypePlugin a) | |
| => a |
|
| -> m () |
Calls the usePlugin function from the GTypePluginClass of
plugin. There should be no need to use this function outside of
the GObject type system itself.