| Libbonobo Reference Manual |
|---|
BonoboMonikerExtender — A way to extend arbitary monikers
#define BONOBO_MONIKER_EXTENDER_TYPE struct BonoboMonikerExtender;Bonobo_Unknown (*BonoboMonikerExtenderFn) (BonoboMonikerExtender *extender, constBonobo_Moniker parent, constBonobo_ResolveOptions *options, constCORBA_char *display_name, constCORBA_char *requested_interface,CORBA_Environment *ev); typedef BonoboMonikerExtenderClass; BonoboMonikerExtender* bonobo_moniker_extender_new (BonoboMonikerExtenderFn resolve,gpointer data);Bonobo_MonikerExtender bonobo_moniker_find_extender (constgchar *name, constgchar *interface,CORBA_Environment *opt_ev);Bonobo_Unknown bonobo_moniker_use_extender (constgchar *extender_oafiid, BonoboMoniker *moniker, constBonobo_ResolveOptions *options, constCORBA_char *requested_interface,CORBA_Environment *opt_ev);
Example 4. Explicit Stream extender usage example
Bonobo_Unknown
example_moniker_resolve (BonoboMoniker *moniker,
const Bonobo_ResolveOptions *options,
const CORBA_char *requested_interface,
CORBA_Environment *ev)
{
if (!strcmp (requested_interface, "IDL:Bonobo/Stream:1.0"))
return handle_stream (moniker, options, ev);
else
return bonobo_moniker_use_extender (
"OAFIID:Bonobo_MonikerExtender_stream",
moniker, options, requested_interface, ev);
}
Example 5. Oaf information for an extender
<oaf_attribute name="bonobo:moniker_extender" type="stringv">
<item value="file:"/>
</oaf_attribute>
Example 6. Oaf information for an extender
Bonobo_Unknown
example_extender_resolve (BonoboMonikerExtender *extender,
const Bonobo_Moniker m,
const Bonobo_ResolveOptions *options,
const CORBA_char *display_name,
const CORBA_char *requested_interface,
CORBA_Environment *ev)
{
... resolve 'm' against an interface we know it supports ...
... then use that interface to provide requested_interface ...
}
Example 7. Creating a new simple moniker
static BonoboObject *
bonobo_std_moniker_factory (BonoboGenericFactory *this,
const char *object_id,
void *data)
{
g_return_val_if_fail (object_id != NULL, NULL);
if (!strcmp (object_id, "OAFIID:Bonobo_MonikerExtender_file"))
return BONOBO_OBJECT (bonobo_moniker_extender_new (
example_extender_resolve, NULL));
else
return NULL;
}
#define BONOBO_MONIKER_EXTENDER_TYPE BONOBO_TYPE_MONIKER_EXTENDER /* deprecated, you should use BONOBO_TYPE_MONIKER_EXTENDER */
struct BonoboMonikerExtender {
BonoboObject object;
BonoboMonikerExtenderFn resolve;
gpointer data;
};
Bonobo_Unknown (*BonoboMonikerExtenderFn) (BonoboMonikerExtender *extender, constBonobo_Moniker parent, constBonobo_ResolveOptions *options, constCORBA_char *display_name, constCORBA_char *requested_interface,CORBA_Environment *ev);
| extender : | |
| parent : | |
| options : | |
| display_name : | |
| requested_interface : | |
| ev : | |
| Returns : |
typedef struct {
BonoboObjectClass parent_class;
POA_Bonobo_MonikerExtender__epv epv;
BonoboMonikerExtenderFn resolve;
} BonoboMonikerExtenderClass;
BonoboMonikerExtender* bonobo_moniker_extender_new (BonoboMonikerExtenderFn resolve,gpointer data);
This creates a new moniker extender.
| resolve : | the resolve function that will be used to do the extension |
| data : | user data to be passed back to the resolve function. |
| Returns : | the extender object |
Bonobo_MonikerExtender bonobo_moniker_find_extender (constgchar *name, constgchar *interface,CORBA_Environment *opt_ev);
This routine tries to locate an extender for our moniker by examining a registry of extenders that map new interfaces to certain moniker names.
| name : | the name of the moniker we want to extend eg. 'file:' |
| interface : | the interface we want to resolve to |
| opt_ev : | an optional corba exception environment. |
| Returns : | an appropriate extender or CORBA_OBJECT_NIL. |
Bonobo_Unknown bonobo_moniker_use_extender (constgchar *extender_oafiid, BonoboMoniker *moniker, constBonobo_ResolveOptions *options, constCORBA_char *requested_interface,CORBA_Environment *opt_ev);
Locates a known extender via. OAFIID; eg. OAFIID:Bonobo_Moniker_Extender_file
| extender_oafiid : | The IID of the extender to use |
| moniker : | the moniker to extend |
| options : | resolve options |
| requested_interface : | the requested interface |
| opt_ev : | optional corba environment |
| Returns : | the resolved result or CORBA_OBJECT_NIL. |
| << bonobo-moniker-util | BonoboItemHandler >> |