add an optional shutdown function which actions can register
This commit is contained in:
parent
c168faee63
commit
2202f11f23
2 changed files with 24 additions and 1 deletions
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in a new issue