From: Richard Kettlewell Date: Fri, 27 Nov 2009 20:16:01 +0000 (+0000) Subject: Add OK and Help buttons to playlists, and Help button to track X-Git-Tag: 5.0~36^2~1 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/commitdiff_plain/ad424400849bde500f1236eb28edd5fb956ca600?hp=a49ece1c2659e81118e2f2f77e6ae480d39327f1 Add OK and Help buttons to playlists, and Help button to track properties. Fiddle with button positioning a bit to get a little more consistent with Gnome HIG. --- diff --git a/disobedience/disobedience.h b/disobedience/disobedience.h index 11da2c3..8ce1601 100644 --- a/disobedience/disobedience.h +++ b/disobedience/disobedience.h @@ -85,6 +85,11 @@ struct button { void (*clicked)(GtkButton *button, gpointer userdata); const char *tip; GtkWidget *widget; + void (*pack)(GtkBox *box, + GtkWidget *child, + gboolean expand, + gboolean fill, + guint padding); }; /* Variables --------------------------------------------------------------- */ @@ -228,7 +233,7 @@ void manage_users(void); /* Help */ -void popup_help(void); +void popup_help(const char *what); /* RTP */ diff --git a/disobedience/help.c b/disobedience/help.c index 5ebe457..5b708e8 100644 --- a/disobedience/help.c +++ b/disobedience/help.c @@ -24,12 +24,14 @@ #include /** @brief Display the manual page */ -void popup_help(void) { +void popup_help(const char *what) { char *path; pid_t pid; int w; - byte_xasprintf(&path, "%s/index.html", dochtmldir); + if(!what) + what = "index.html"; + byte_xasprintf(&path, "%s/%s", dochtmldir, what); if(!(pid = xfork())) { exitfn = _exit; if(!xfork()) { diff --git a/disobedience/login.c b/disobedience/login.c index 36850c1..4031c3a 100644 --- a/disobedience/login.c +++ b/disobedience/login.c @@ -254,13 +254,15 @@ static struct button buttons[] = { "Login", login_ok, "(Re-)connect using these settings", - 0 + 0, + NULL, }, { GTK_STOCK_CLOSE, login_cancel, "Discard changes and close window", - 0 + 0, + NULL, }, }; diff --git a/disobedience/menu.c b/disobedience/menu.c index f04f720..86ea177 100644 --- a/disobedience/menu.c +++ b/disobedience/menu.c @@ -134,7 +134,7 @@ static void manual_popup(gpointer attribute((unused)) callback_data, GtkWidget attribute((unused)) *menu_item) { D(("manual_popup")); - popup_help(); + popup_help(NULL); } /** @brief Called when version arrives, displays about... popup */ diff --git a/disobedience/misc.c b/disobedience/misc.c index 96e1750..41fcd13 100644 --- a/disobedience/misc.c +++ b/disobedience/misc.c @@ -187,7 +187,14 @@ GtkWidget *create_buttons_box(struct button *buttons, gtk_widget_set_style(buttons[n].widget, tool_style); g_signal_connect(G_OBJECT(buttons[n].widget), "clicked", G_CALLBACK(buttons[n].clicked), 0); - gtk_box_pack_start(GTK_BOX(box), buttons[n].widget, FALSE, FALSE, 1); + void (*pack)(GtkBox *box, + GtkWidget *child, + gboolean expand, + gboolean fill, + guint padding); + if(!(pack = buttons[n].pack)) + pack = gtk_box_pack_start; + pack(GTK_BOX(box), buttons[n].widget, FALSE, FALSE, 1); gtk_widget_set_tooltip_text(buttons[n].widget, buttons[n].tip); } return box; diff --git a/disobedience/playlists.c b/disobedience/playlists.c index c4e8e04..1f836ad 100644 --- a/disobedience/playlists.c +++ b/disobedience/playlists.c @@ -129,6 +129,8 @@ static gboolean playlist_picker_button(GtkWidget *widget, static gboolean playlist_editor_keypress(GtkWidget *widget, GdkEventKey *event, gpointer user_data); +static void playlist_editor_ok(GtkButton *button, gpointer userdata); +static void playlist_editor_help(GtkButton *button, gpointer userdata); /** @brief Playlist editing window */ static GtkWidget *playlist_window; @@ -878,13 +880,15 @@ static struct button playlist_picker_buttons[] = { GTK_STOCK_ADD, playlist_picker_add, "Create a new playlist", - 0 + 0, + NULL, }, { GTK_STOCK_REMOVE, playlist_picker_delete, "Delete a playlist", - 0 + 0, + NULL, }, }; #define NPLAYLIST_PICKER_BUTTONS (sizeof playlist_picker_buttons / sizeof *playlist_picker_buttons) @@ -1048,6 +1052,26 @@ static GtkWidget *playlist_editor_public; static GtkWidget *playlist_editor_private; static int playlist_editor_setting_buttons; +/** @brief Buttons for the playlist window */ +static struct button playlist_editor_buttons[] = { + { + GTK_STOCK_OK, + playlist_editor_ok, + "Close window", + 0, + gtk_box_pack_end, + }, + { + GTK_STOCK_HELP, + playlist_editor_help, + "Go to manual", + 0, + gtk_box_pack_end, + }, +}; + +#define NPLAYLIST_EDITOR_BUTTONS (int)(sizeof playlist_editor_buttons / sizeof *playlist_editor_buttons) + static GtkWidget *playlists_editor_create(void) { assert(ql_playlist.view == NULL); /* better not be set up already */ @@ -1072,6 +1096,9 @@ static GtkWidget *playlists_editor_create(void) { gtk_box_pack_start(GTK_BOX(hbox), playlist_editor_private, FALSE/*expand*/, FALSE/*fill*/, 0); playlist_editor_set_buttons(0,0,0); + create_buttons_box(playlist_editor_buttons, + NPLAYLIST_EDITOR_BUTTONS, + hbox); GtkWidget *vbox = gtk_vbox_new(FALSE, 0); GtkWidget *view = init_queuelike(&ql_playlist); @@ -1222,6 +1249,16 @@ static void playlists_editor_received_tracks(void *v, ql_new_queue(&ql_playlist, newq); } +static void playlist_editor_ok(GtkButton attribute((unused)) *button, + gpointer attribute((unused)) userdata) { + gtk_widget_destroy(playlist_window); +} + +static void playlist_editor_help(GtkButton attribute((unused)) *button, + gpointer attribute((unused)) userdata) { + popup_help("playlists.html"); +} + /* Playlist mutation -------------------------------------------------------- */ /** @brief State structure for guarded playlist modification diff --git a/disobedience/properties.c b/disobedience/properties.c index 092e8db..6600cf9 100644 --- a/disobedience/properties.c +++ b/disobedience/properties.c @@ -46,6 +46,7 @@ static void prefdata_completed(void *v, const char *err, const char *value); 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, @@ -125,23 +126,33 @@ static const struct pref { /* 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, }, }; @@ -490,6 +501,11 @@ static void properties_cancel(GtkButton attribute((unused)) *button, 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. diff --git a/disobedience/users.c b/disobedience/users.c index 1d2a169..b078698 100644 --- a/disobedience/users.c +++ b/disobedience/users.c @@ -660,13 +660,15 @@ static struct button users_buttons[] = { GTK_STOCK_ADD, users_add, "Create a new user", - 0 + 0, + NULL, }, { GTK_STOCK_REMOVE, users_delete, "Delete a user", - 0 + 0, + NULL, }, }; #define NUSERS_BUTTONS (sizeof users_buttons / sizeof *users_buttons)