From: Richard Kettlewell Date: Sat, 28 Jun 2008 17:32:08 +0000 (+0100) Subject: Abolish last vesiges of struct callbackdata X-Git-Tag: 4.2~11^2~2 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/commitdiff_plain/baaccf85fc7ff0b65ca062faffc5091f0a0acc62 Abolish last vesiges of struct callbackdata --- diff --git a/disobedience/client.c b/disobedience/client.c index d81aac2..a8d33a9 100644 --- a/disobedience/client.c +++ b/disobedience/client.c @@ -129,16 +129,11 @@ static void gtkclient_comms_error(void attribute((unused)) *u, * original command and if none is supplied we pop up an error box. */ static void gtkclient_protocol_error(void attribute((unused)) *u, - void *v, + void attribute((unused)) *v, int code, const char *msg) { - struct callbackdata *cbd = v; - D(("gtkclient_protocol_error %s", msg)); - if(cbd && cbd->onerror) - cbd->onerror(cbd, code, msg); - else - popup_protocol_error(code, msg); + popup_protocol_error(code, msg); } /** @brief Report callback from eclient */ diff --git a/disobedience/disobedience.h b/disobedience/disobedience.h index 2c9eb04..91d07de 100644 --- a/disobedience/disobedience.h +++ b/disobedience/disobedience.h @@ -61,28 +61,6 @@ struct queuelike; struct choosenode; struct progress_window; -/** @brief Callback data structure - * - * This program is extremely heavily callback-driven. Rather than have - * numerous different callback structures we have a single one which can be - * interpreted adequately both by success and error handlers. - */ -struct callbackdata { - void (*onerror)(struct callbackdata *cbd, - int code, - const char *msg); /* called on error */ - union { - const char *key; /* gtkqueue.c op_part_lookup */ - struct choosenode *choosenode; /* gtkchoose.c got_files/got_dirs */ - struct queuelike *ql; /* gtkqueue.c queuelike_completed */ - struct prefdata *f; /* properties.c */ - const char *user; /* users.c */ - struct { - const char *user, *email; /* users.c */ - } edituser; - } u; -}; - /** @brief Per-tab callbacks * * Some of the options in the main menu depend on which tab is displayed, so we diff --git a/disobedience/properties.c b/disobedience/properties.c index 4d5606c..7c1c816 100644 --- a/disobedience/properties.c +++ b/disobedience/properties.c @@ -44,12 +44,6 @@ static void set_edited_boolean(struct prefdata *f, const char *value); static void set_boolean(struct prefdata *f, const char *value); static void prefdata_completed(void *v, const char *err, const char *value); -static void prefdata_onerror(struct callbackdata *cbd, - int code, - const char *msg); -static struct callbackdata *make_callbackdata(struct prefdata *f); -static void prefdata_completed_common(struct prefdata *f, - const char *value); static void properties_ok(GtkButton *button, gpointer userdata); static void properties_apply(GtkButton *button, gpointer userdata); @@ -329,8 +323,8 @@ static void kickoff_namepart(struct prefdata *f) { * wanted was the underlying preference, but in fact it should always match * and will supply a sane default without having to know how to parse tracks * names (which implies knowing collection roots). */ - disorder_eclient_namepart(client, prefdata_completed, f->track, "display", f->p->part, - make_callbackdata(f)); + disorder_eclient_namepart(client, prefdata_completed, + f->track, "display", f->p->part, f); } static void completed_namepart(struct prefdata *f) { @@ -375,8 +369,7 @@ static void set_namepart_completed(void *v, const char *err) { /* String preferences ------------------------------------------------------ */ static void kickoff_string(struct prefdata *f) { - disorder_eclient_get(client, prefdata_completed, f->track, f->p->part, - make_callbackdata(f)); + disorder_eclient_get(client, prefdata_completed, f->track, f->p->part, f); } static void completed_string(struct prefdata *f) { @@ -408,8 +401,7 @@ static void set_string(struct prefdata *f, const char *value) { /* Boolean preferences ----------------------------------------------------- */ static void kickoff_boolean(struct prefdata *f) { - disorder_eclient_get(client, prefdata_completed, f->track, f->p->part, - make_callbackdata(f)); + disorder_eclient_get(client, prefdata_completed, f->track, f->p->part, f); } static void completed_boolean(struct prefdata *f) { @@ -442,34 +434,11 @@ static void set_boolean(struct prefdata *f, const char *value) { /* Querying preferences ---------------------------------------------------- */ -/* Make a suitable callbackdata */ -static struct callbackdata *make_callbackdata(struct prefdata *f) { - struct callbackdata *cbd = xmalloc(sizeof *cbd); - - cbd->onerror = prefdata_onerror; - cbd->u.f = f; - return cbd; -} - -/* No pref was set */ -static void prefdata_onerror(struct callbackdata *cbd, - int attribute((unused)) code, - const char attribute((unused)) *msg) { - prefdata_completed_common(cbd->u.f, 0); -} - -/* Got the value of a pref */ static void prefdata_completed(void *v, const char *err, const char *value) { - if(err) { - } else { - struct callbackdata *cbd = v; - - prefdata_completed_common(cbd->u.f, value); - } -} + struct prefdata *const f = v; -static void prefdata_completed_common(struct prefdata *f, - const char *value) { + if(err) + popup_protocol_error(0, err); f->value = value; f->p->type->completed(f); f->p->type->set_edited(f, f->value);