static void properties_ok(GtkButton *button, gpointer userdata);
static void properties_apply(GtkButton *button, gpointer userdata);
static void properties_cancel(GtkButton *button, gpointer userdata);
+static void properties_help(GtkButton *button, gpointer userdata);
static void properties_logged_in(const char *event,
void *eventdata,
GtkWidget *widget;
};
-/* The type of a preference is the collection of callbacks needed to get,
- * display and set it */
+/** @brief Type of a track preference
+ *
+ * The type of a preference is the collection of callbacks needed to get,
+ * display and set it.
+ */
struct preftype {
+ /** @brief Kick off the request to fetch the pref from the server. */
void (*kickoff)(struct prefdata *f);
- /* Kick off the request to fetch the pref from the server. */
+ /** @brief Called when the value comes back in; creates the widget. */
void (*completed)(struct prefdata *f);
- /* Called when the value comes back in; creates the widget. */
+ /** @brief Get the edited value from the widget. */
const char *(*get_edited)(struct prefdata *f);
- /* Get the edited value from the widget. */
/** @brief Update the edited value */
void (*set_edited)(struct prefdata *f, const char *value);
+ /** @brief Set the new value and (if necessary) arrange for our display to update. */
void (*set)(struct prefdata *f, const char *value);
- /* Set the new value and (if necessary) arrange for our display to update. */
};
/* A namepart pref */
set_boolean
};
-/* @brief The known prefs for each track */
+/** @brief The known prefs for each track */
static const struct pref {
const char *label; /**< @brief user-level description */
const char *part; /**< @brief protocol-level tag */
/* Buttons that appear at the bottom of the window */
static struct button buttons[] = {
+ {
+ GTK_STOCK_HELP,
+ properties_help,
+ "Go to manual",
+ 0,
+ gtk_box_pack_start,
+ },
{
GTK_STOCK_OK,
properties_ok,
"Apply all changes and close window",
- 0
- },
- {
- GTK_STOCK_APPLY,
- properties_apply,
- "Apply all changes and keep window open",
- 0
+ 0,
+ gtk_box_pack_end,
},
{
GTK_STOCK_CANCEL,
properties_cancel,
"Discard all changes and close window",
- 0
+ 0,
+ gtk_box_pack_end
+ },
+ {
+ GTK_STOCK_APPLY,
+ properties_apply,
+ "Apply all changes and keep window open",
+ 0,
+ gtk_box_pack_end,
},
};
* 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, f);
+ disorder_eclient_part(client, prefdata_completed,
+ f->track, "display", f->p->part, f);
}
static void completed_namepart(struct prefdata *f) {
properties_event = 0;
}
+static void properties_help(GtkButton attribute((unused)) *button,
+ gpointer attribute((unused)) userdata) {
+ popup_help("properties.html");
+}
+
/** @brief Called when we've just logged in
*
* Destroys the current properties window.