BonoboGenericFactory

BonoboGenericFactory — The basic, generic Bonobo object factory implementation

Synopsis




BonoboObject*       (*BonoboFactoryCallback)            (BonoboGenericFactory *factory,
                                                         const char *component_id,
                                                         gpointer closure);
BonoboGenericFactory* bonobo_generic_factory_new        (const char *act_iid,
                                                         BonoboFactoryCallback factory_cb,
                                                         gpointer user_data);
BonoboGenericFactory* bonobo_generic_factory_new_closure
                                                        (const char *act_iid,
                                                         GClosure *factory_closure);
BonoboGenericFactory* bonobo_generic_factory_construct  (BonoboGenericFactory *factory,
                                                         const char *act_iid,
                                                         GClosure *factory_closure);
void                bonobo_generic_factory_construct_noreg
                                                        (BonoboGenericFactory *factory,
                                                         const char *act_iid,
                                                         GClosure *factory_closure);
int                 bonobo_generic_factory_main         (const char *act_iid,
                                                         BonoboFactoryCallback factory_cb,
                                                         gpointer user_data);
int                 bonobo_generic_factory_main_timeout (const char *act_iid,
                                                         BonoboFactoryCallback factory_cb,
                                                         gpointer user_data,
                                                         guint quit_timeout);
#define             BONOBO_FACTORY_INIT                 (descr, version, argcp, argv)
#define             BONOBO_OAF_FACTORY                  (oafiid, descr, version, callback, data)
#define             BONOBO_OAF_FACTORY_MULTI            (oafiid, descr, version, callback, data)
#define             BONOBO_ACTIVATION_FACTORY           (oafiid, descr, version, callback, data)
#define             BONOBO_ACTIVATION_FACTORY_TIMEOUT   (oafiid, descr, version, callback, data, quit_timeout)


Description

The vast majority of Bonobo objects are created by the BonoboGenericFactory implementation. This provides a very simple C sugar wrapper of the GNOME::ObjectFactory IDL interface, used by OAF to instantiate new objects.

Most applications when they start up will register their Bonobo object factory with OAF, this can be done like this:

Example 7. How to register a factory with OAF

BonoboGenericFactory *factory;

factory = bonobo_generic_factory_new (
	"OAFIID:GNOME_MyApp_myId",
	my_factory_function, NULL);
bonobo_running_context_auto_exit_unref (BONOBO_OBJECT (factory));
    


This registers the factory with OAF, associated with your factory's OAFIID ( as specified in the installed .oaf file ). The running_context_auto_exit_unref function is used to ensure that the program exits the gtk main loop when all of the factory's ( or any derived ) objects are destroyed.

When an object that is created by your factory is demanded from OAF the my_factory_function will be called:

Example 8. A simple factory

static BonoboObject *
my_factory_fn (BonoboGenericFactory *this,
               const char           *object_id,
               void                 *data)
{
	BonoboObject *object = NULL;
	
	g_return_val_if_fail (object_id != NULL, NULL);

	if (!strcmp (object_id, "OAFIID:Bonobo_Sample_Clock"))
		object = bonobo_clock_control_new ();
	else
		g_warning ("Unknown OAFIID '%s'", object_id);

	return object;
}
     


This will return the newly constructed object via OAF to the Object requestor.

There is a macro that can be used for simple components to remove the burden of writing the main function and getting the initialization correct, see BONOBO_ACTIVATION_FACTORY.

Details

BonoboFactoryCallback ()

BonoboObject*       (*BonoboFactoryCallback)            (BonoboGenericFactory *factory,
                                                         const char *component_id,
                                                         gpointer closure);

Type of function that is called when it's time for the factory to create a new instance.

factory : the factory that invoked this callback
component_id : OAFIID of the component that should be activated
closure : user data
Returns : the newly created BonoboObject

bonobo_generic_factory_new ()

BonoboGenericFactory* bonobo_generic_factory_new        (const char *act_iid,
                                                         BonoboFactoryCallback factory_cb,
                                                         gpointer user_data);

This is a helper routine that simplifies the creation of factory objects for GNOME objects. The factory function will be invoked by the CORBA server when a request arrives to create a new instance of an object supporting the Bonobo::Generic interface. The factory callback routine is passed the data pointer to provide the creation function with some state information.

act_iid : The GOAD id that this factory implements
factory_cb : A callback which is used to create new BonoboObject instances.
user_data : The closure data to be passed to the factory callback routine.
Returns : A BonoboGenericFactory object that has an activated Bonobo::GenericFactory object that has registered with the GNOME name server.

bonobo_generic_factory_new_closure ()

BonoboGenericFactory* bonobo_generic_factory_new_closure
                                                        (const char *act_iid,
                                                         GClosure *factory_closure);

This is a helper routine that simplifies the creation of factory objects for GNOME objects. The factory_closure closure will be invoked by the CORBA server when a request arrives to create a new instance of an object supporting the Bonobo::Generic interface. The factory callback routine is passed the data pointer to provide the creation function with some state information.

act_iid : The GOAD id that this factory implements
factory_closure : A closure which is used to create new BonoboObject instances.
Returns : A BonoboGenericFactory object that has an activated Bonobo::GenericFactory object that has registered with the GNOME name server.

bonobo_generic_factory_construct ()

BonoboGenericFactory* bonobo_generic_factory_construct  (BonoboGenericFactory *factory,
                                                         const char *act_iid,
                                                         GClosure *factory_closure);

Initializes c_factory with and registers the new factory with the name server.

factory : The object to be initialized.
act_iid : The Bonobo activation id that the new factory will implement. Bonobo::GenericFactory interface and which will be used to construct this BonoboGenericFactory Gtk object.
factory_closure : A Multi object factory closure.
Returns : The initialized BonoboGenericFactory object or NULL if already registered.

bonobo_generic_factory_construct_noreg ()

void                bonobo_generic_factory_construct_noreg
                                                        (BonoboGenericFactory *factory,
                                                         const char *act_iid,
                                                         GClosure *factory_closure);

Initializes c_factory with the supplied closure and iid.

factory : The object to be initialized.
act_iid : The GOAD id that the new factory will implement.
factory_closure : A Multi object factory closure.

bonobo_generic_factory_main ()

int                 bonobo_generic_factory_main         (const char *act_iid,
                                                         BonoboFactoryCallback factory_cb,
                                                         gpointer user_data);

A Generic 'main' routine so we don't stick a load of code inside a public macro. See also bonobo_generic_factory_main_timeout().

act_iid : the oaf iid of the factory
factory_cb : the factory callback
user_data : a user data pointer
Returns : 0 on success, 1 on failure.

bonobo_generic_factory_main_timeout ()

int                 bonobo_generic_factory_main_timeout (const char *act_iid,
                                                         BonoboFactoryCallback factory_cb,
                                                         gpointer user_data,
                                                         guint quit_timeout);

A Generic 'main' routine so we don't stick a load of code inside a public macro.

act_iid : the oaf iid of the factory
factory_cb : the factory callback
user_data : a user data pointer
quit_timeout : ammount of time to wait (miliseconds) after all objects have been released before quitting the main loop.
Returns : 0 on success, 1 on failure.

BONOBO_FACTORY_INIT()

#define             BONOBO_FACTORY_INIT(descr, version, argcp, argv)

Macro that expands to the code need to initialize an exe factory. Should be placed at the beginning of the main() function.

descr : factory description string
version : version string
argcp : pointer to main()'s argc
argv : main()'s argv

BONOBO_OAF_FACTORY()

#define             BONOBO_OAF_FACTORY(oafiid, descr, version, callback, data)

Deprecated; see BONOBO_ACTIVATION_FACTORY().

oafiid :
descr :
version :
callback :
data :

BONOBO_OAF_FACTORY_MULTI()

#define             BONOBO_OAF_FACTORY_MULTI(oafiid, descr, version, callback, data)

Deprecated; see BONOBO_ACTIVATION_FACTORY().

oafiid :
descr :
version :
callback :
data :

BONOBO_ACTIVATION_FACTORY()

#define             BONOBO_ACTIVATION_FACTORY(oafiid, descr, version, callback, data)

Macro that includes all boiler-plate code necessary to create an exe type factory, including a main() function and a generic factory.

oafiid : The factory's OAFIID
descr : Description of the factory
version : Version string of the factory program
callback : Function (BonoboFactoryCallback) responsible for intantiating components
data : Additional data to be passed to the callback

BONOBO_ACTIVATION_FACTORY_TIMEOUT()

#define             BONOBO_ACTIVATION_FACTORY_TIMEOUT(oafiid, descr, version, callback, data, quit_timeout)

Like BONOBO_ACTIVATION_FACTORY(), but has an extra quit_timeout argument.

oafiid : The factory's OAFIID
descr : Description of the factory
version : Version string of the factory program
callback : Function (BonoboFactoryCallback) responsible for intantiating components
data : Additional data to be passed to the callback
quit_timeout : Ammount of time to wait (in milliseconds) before deciding to quit the factory. A larger value prevents frequent respawning of a new factory process when there are many consecutive one-time requests, so that your factory appears to start faster after the first time.