| Top |
| Bonobo_Unknown | (*BonoboMonikerSimpleResolveFn) () |
| BonoboMoniker * | bonobo_moniker_simple_construct () |
| BonoboMoniker * | bonobo_moniker_simple_new () |
| BonoboMoniker * | bonobo_moniker_simple_new_closure () |
BonoboMonikerSimple makes writing monikers really extremely easy. To implement a moniker you only have to write 1 function. To register create the moniker object you have to use only 1 call. It can't get much simpler. If you want to use monikers instead of implementing them, you probably want to see bonobo-moniker-util instead.
Few people need to implement monikers, but if they do, this is how they should do it:
Example 15. A cut down file: moniker implementation
Bonobo_Unknown
bonobo_moniker_file_resolve (BonoboMoniker *moniker,
const Bonobo_ResolveOptions *options,
const CORBA_char *requested_interface,
CORBA_Environment *ev)
{
const char *fname = bonobo_moniker_get_name (moniker);
Bonobo_Unknown retval;
g_warning ("Fname '%s'", fname);
if (!strcmp (requested_interface, "IDL:Bonobo/Stream:1.0")) {
BonoboStream *stream;
stream = bonobo_stream_open ("fs", fname,
Bonobo_Storage_READ, 0664);
if (!stream) {
g_warning ("Failed to open stream '%s'", fname);
CORBA_exception_set (ev, CORBA_USER_EXCEPTION,
ex_Bonobo_Moniker_InterfaceNotFound, NULL);
return CORBA_OBJECT_NIL;
}
return CORBA_Object_duplicate (BONOBO_OBJREF (stream), ev);
}
return CORBA_OBJECT_NIL;
}
After implementing the resolve function, you need to create the new moniker
in your standard factory:
Example 16. 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_Moniker_File"))
return BONOBO_OBJECT (bonobo_moniker_simple_new (
"file:", bonobo_moniker_file_resolve));
else
return NULL;
}
Bonobo_Unknown (*BonoboMonikerSimpleResolveFn) (BonoboMoniker *moniker,const Bonobo_ResolveOptions *options,const CORBA_char *requested_interface,CORBA_Environment *ev);
Type of callback function that implements a simple moniker resolution.
BonoboMoniker * bonobo_moniker_simple_construct (BonoboMonikerSimple *moniker,const char *name,GClosure *resolve_closure);
Constructs a simple moniker
BonoboMoniker * bonobo_moniker_simple_new (const char *name,BonoboMonikerSimpleResolveFn resolve_fn);
Create a new instance of a simplified moniker.
BonoboMoniker * bonobo_moniker_simple_new_closure (const char *name,GClosure *resolve_closure);
Create a new instance of a simplified moniker.
Instead of the Bonobo_ResolveOptions struct, the closure takes its contents as two arguments: BONOBO_TYPE_RESOLVE_FLAG and G_TYPE_LONG.