X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Factions.c;h=945233e63fae1f71ba5f826e539012dd298354cd;hb=096dad0c6c027100494ede811b33cb8558d32e25;hp=023fab3ab5c96291ce0508c4527bc035cdfd0c07;hpb=b06b684589a618a2481ccc2745d5e03abb6bd5e0;p=chaz%2Fopenbox diff --git a/openbox/actions.c b/openbox/actions.c index 023fab3a..945233e6 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); } } @@ -104,6 +107,7 @@ ObActionsDefinition* do_register(const gchar *name, def->name = g_strdup(name); def->free = free; def->run = run; + def->shutdown = NULL; registered = g_slist_prepend(registered, def); return def; @@ -135,6 +139,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; @@ -378,6 +398,7 @@ gboolean actions_interactive_input_event(XEvent *e) gboolean used = FALSE; if (interactive_act) { if (!interactive_act->i_input(interactive_initial_state, e, + grab_input_context(), interactive_act->options, &used)) { used = TRUE; /* if it cancelled the action then it has to of