add an optional shutdown function which actions can register

This commit is contained in:
Dana Jansens 2010-02-11 10:25:22 -05:00
parent c168faee63
commit 2202f11f23
2 changed files with 24 additions and 1 deletions

View file

@ -49,6 +49,7 @@ struct _ObActionsDefinition {
} setup;
ObActionsDataFreeFunc free;
ObActionsRunFunc run;
ObActionsShutdownFunc shutdown;
};
struct _ObActionsAct {
@ -79,7 +80,9 @@ void actions_shutdown(gboolean reconfig)
/* free all the registered actions */
while (registered) {
actions_definition_unref(registered->data);
ObActionsDefinition *d = registered->data;
if (d->shutdown) d->shutdown();
actions_definition_unref(d);
registered = g_slist_delete_link(registered, registered);
}
}
@ -135,6 +138,22 @@ gboolean actions_register(const gchar *name,
return def != NULL;
}
gboolean actions_set_shutdown(const gchar *name,
ObActionsShutdownFunc shutdown)
{
GSList *it;
ObActionsDefinition *def;
for (it = registered; it; it = g_slist_next(it)) {
def = it->data;
if (!g_ascii_strcasecmp(name, def->name)) {
def->shutdown = shutdown;
return TRUE;
}
}
return FALSE;
}
static void actions_definition_ref(ObActionsDefinition *def)
{
++def->ref;

View file

@ -35,6 +35,7 @@ typedef void (*ObActionsDataFreeFunc)(gpointer options);
typedef gboolean (*ObActionsRunFunc)(ObActionsData *data,
gpointer options);
typedef gpointer (*ObActionsDataSetupFunc)(xmlNodePtr node);
typedef void (*ObActionsShutdownFunc)(void);
/* functions for interactive actions */
/* return TRUE if the action is going to be interactive, or false to change
@ -77,6 +78,9 @@ gboolean actions_register(const gchar *name,
ObActionsDataFreeFunc free,
ObActionsRunFunc run);
gboolean actions_set_shutdown(const gchar *name,
ObActionsShutdownFunc shutdown);
ObActionsAct* actions_parse(xmlNodePtr node);
ObActionsAct* actions_parse_string(const gchar *name);