Copyright | Will Thompson and Iñaki García Etxebarria |
---|---|
License | LGPL-2.1 |
Maintainer | Iñaki García Etxebarria |
Safe Haskell | None |
Language | Haskell2010 |
GIOExtensionPoint
provides a mechanism for modules to extend the
functionality of the library or application that loaded it in an
organized fashion.
An extension point is identified by a name, and it may optionally
require that any implementation must be of a certain type (or derived
thereof). Use iOExtensionPointRegister
to register an
extension point, and iOExtensionPointSetRequiredType
to
set a required type.
A module can implement an extension point by specifying the
[typegObject
.Type] that implements the functionality. Additionally, each
implementation of an extension point has a name, and a priority. Use
iOExtensionPointImplement
to implement an extension point.
c code
GIOExtensionPoint *ep; // Register an extension point ep = g_io_extension_point_register ("my-extension-point"); g_io_extension_point_set_required_type (ep, MY_TYPE_EXAMPLE);
c code
// Implement an extension point G_DEFINE_TYPE (MyExampleImpl, my_example_impl, MY_TYPE_EXAMPLE) g_io_extension_point_implement ("my-extension-point", my_example_impl_get_type (), "my-example", 10);
It is up to the code that registered the extension point how it uses the implementations that have been associated with it. Depending on the use case, it may use all implementations, or only the one with the highest priority, or pick a specific one by name.
To avoid opening all modules just to find out what extension points they implement, GIO makes use of a caching mechanism, see gio-querymodules. You are expected to run this command after installing a GIO module.
The GIO_EXTRA_MODULES
environment variable can be used to
specify additional directories to automatically load modules
from. This environment variable has the same syntax as the
PATH
. If two modules have the same base name in different
directories, then the latter one will be ignored. If additional
directories are specified GIO will load modules from the built-in
directory last.
Synopsis
- newtype IOExtensionPoint = IOExtensionPoint (ManagedPtr IOExtensionPoint)
- iOExtensionPointGetExtensionByName :: (HasCallStack, MonadIO m) => IOExtensionPoint -> Text -> m IOExtension
- iOExtensionPointGetExtensions :: (HasCallStack, MonadIO m) => IOExtensionPoint -> m [IOExtension]
- iOExtensionPointGetRequiredType :: (HasCallStack, MonadIO m) => IOExtensionPoint -> m GType
- iOExtensionPointImplement :: (HasCallStack, MonadIO m) => Text -> GType -> Text -> Int32 -> m IOExtension
- iOExtensionPointLookup :: (HasCallStack, MonadIO m) => Text -> m IOExtensionPoint
- iOExtensionPointRegister :: (HasCallStack, MonadIO m) => Text -> m IOExtensionPoint
- iOExtensionPointSetRequiredType :: (HasCallStack, MonadIO m) => IOExtensionPoint -> GType -> m ()
Exported types
newtype IOExtensionPoint Source #
Memory-managed wrapper type.
Instances
Eq IOExtensionPoint Source # | |
Defined in GI.Gio.Structs.IOExtensionPoint (==) :: IOExtensionPoint -> IOExtensionPoint -> Bool # (/=) :: IOExtensionPoint -> IOExtensionPoint -> Bool # | |
BoxedPtr IOExtensionPoint Source # | |
Defined in GI.Gio.Structs.IOExtensionPoint boxedPtrCopy :: IOExtensionPoint -> IO IOExtensionPoint # boxedPtrFree :: IOExtensionPoint -> IO () # | |
ManagedPtrNewtype IOExtensionPoint Source # | |
Defined in GI.Gio.Structs.IOExtensionPoint |
Methods
Click to display all available methods, including inherited ones
getExtensionByName
iOExtensionPointGetExtensionByName Source #
:: (HasCallStack, MonadIO m) | |
=> IOExtensionPoint |
|
-> Text |
|
-> m IOExtension | Returns: the |
Finds a IOExtension
for an extension point by name.
getExtensions
iOExtensionPointGetExtensions Source #
:: (HasCallStack, MonadIO m) | |
=> IOExtensionPoint |
|
-> m [IOExtension] | Returns: a |
Gets a list of all extensions that implement this extension point. The list is sorted by priority, beginning with the highest priority.
getRequiredType
iOExtensionPointGetRequiredType Source #
:: (HasCallStack, MonadIO m) | |
=> IOExtensionPoint |
|
-> m GType | Returns: the |
Gets the required type for extensionPoint
.
implement
iOExtensionPointImplement Source #
:: (HasCallStack, MonadIO m) | |
=> Text |
|
-> GType |
|
-> Text |
|
-> Int32 |
|
-> m IOExtension | Returns: a |
Registers type
as extension for the extension point with name
extensionPointName
.
If type
has already been registered as an extension for this
extension point, the existing IOExtension
object is returned.
lookup
iOExtensionPointLookup Source #
:: (HasCallStack, MonadIO m) | |
=> Text |
|
-> m IOExtensionPoint | Returns: the |
Looks up an existing extension point.
register
iOExtensionPointRegister Source #
:: (HasCallStack, MonadIO m) | |
=> Text |
|
-> m IOExtensionPoint | Returns: the new |
Registers an extension point.
setRequiredType
iOExtensionPointSetRequiredType Source #
:: (HasCallStack, MonadIO m) | |
=> IOExtensionPoint |
|
-> GType |
|
-> m () |
Sets the required type for extensionPoint
to type
.
All implementations must henceforth have this type.