X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/36be7e6a505753eb31ed165084c729c7efa40534..73f1b9f30c98dc525a5b6a540f6f135855d640a0:/disobedience/disobedience.c diff --git a/disobedience/disobedience.c b/disobedience/disobedience.c index 2a39a15..6271560 100644 --- a/disobedience/disobedience.c +++ b/disobedience/disobedience.c @@ -49,6 +49,9 @@ GtkWidget *tabs; /** @brief Main client */ disorder_eclient *client; +/** @brief Log client */ +disorder_eclient *logclient; + /** @brief Last reported state * * This is updated by log_state(). @@ -75,6 +78,12 @@ static int nop_in_flight; /** @brief Global tooltip group */ GtkTooltips *tips; +/** @brief Linked list of functions to call when we reset login parameters */ +static struct reset_callback_node { + struct reset_callback_node *next; + reset_callback *callback; +} *resets; + /* Window creation --------------------------------------------------------- */ /* Note that all the client operations kicked off from here will only complete @@ -345,9 +354,28 @@ static void version(void) { exit(0); } +/* reset state */ +void reset(void) { + struct reset_callback_node *r; + + /* reset the clients */ + disorder_eclient_close(client); + disorder_eclient_close(logclient); + for(r = resets; r; r = r->next) + r->callback(); +} + +/** @brief Register a reset callback */ +void register_reset(reset_callback *callback) { + struct reset_callback_node *const r = xmalloc(sizeof *r); + + r->next = resets; + r->callback = callback; + resets = r; +} + int main(int argc, char **argv) { int n; - disorder_eclient *logclient; mem_init(); /* garbage-collect PCRE's memory */ @@ -401,6 +429,7 @@ int main(int argc, char **argv) { maybe_send_nop, 0/*data*/, 0/*notify*/); + register_reset(properties_reset); /* Start monitoring the log */ disorder_eclient_log(logclient, &log_callbacks, 0); D(("enter main loop"));