chiark / gitweb /
Abolish last vesiges of struct callbackdata
authorRichard Kettlewell <rjk@greenend.org.uk>
Sat, 28 Jun 2008 17:32:08 +0000 (18:32 +0100)
committerRichard Kettlewell <rjk@greenend.org.uk>
Sat, 28 Jun 2008 17:32:08 +0000 (18:32 +0100)
disobedience/client.c
disobedience/disobedience.h
disobedience/properties.c

index d81aac2..a8d33a9 100644 (file)
@@ -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 */
index 2c9eb04..91d07de 100644 (file)
@@ -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
index 4d5606c..7c1c816 100644 (file)
@@ -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);