From: Dana Jansens Date: Thu, 11 Feb 2010 15:25:22 +0000 (-0500) Subject: add an optional shutdown function which actions can register X-Git-Url: https://git.dogcows.com/gitweb?a=commitdiff_plain;h=2202f11f239bb33e49c05aa73b51e7418748cb6b;p=chaz%2Fopenbox add an optional shutdown function which actions can register --- diff --git a/openbox/actions.c b/openbox/actions.c index 023fab3a..35d5cc25 100644 --- a/openbox/actions.c +++ b/openbox/actions.c @@ -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; diff --git a/openbox/actions.h b/openbox/actions.h index afcc96b7..a56ece39 100644 --- a/openbox/actions.h +++ b/openbox/actions.h @@ -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);