From: Richard Kettlewell Date: Sat, 9 Aug 2008 13:28:53 +0000 (+0100) Subject: Move playlist menu code to playlists.c X-Git-Tag: 5.0~86^2~4^2~1^2~2 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/commitdiff_plain/f9b20469107a0d4b6f707cbbdd9a17a7e2c4bf82 Move playlist menu code to playlists.c --- diff --git a/disobedience/disobedience.h b/disobedience/disobedience.h index bd7b60c..3d9d1d2 100644 --- a/disobedience/disobedience.h +++ b/disobedience/disobedience.h @@ -255,8 +255,13 @@ void popup_settings(void); /* Playlists */ void playlists_init(void); +void edit_playlists(gpointer callback_data, + guint callback_action, + GtkWidget *menu_item); extern char **playlists; extern int nplaylists; +extern GtkWidget *playlists_widget; +extern GtkWidget *playlists_menu; #endif /* DISOBEDIENCE_H */ diff --git a/disobedience/menu.c b/disobedience/menu.c index 63d89be..d2f190d 100644 --- a/disobedience/menu.c +++ b/disobedience/menu.c @@ -26,8 +26,8 @@ static GtkWidget *selectall_widget; static GtkWidget *selectnone_widget; static GtkWidget *properties_widget; -static GtkWidget *playlists_widget; -static GtkWidget *playlists_menu; +GtkWidget *playlists_widget; +GtkWidget *playlists_menu; /** @brief Main menu widgets */ GtkItemFactory *mainmenufactory; @@ -217,41 +217,6 @@ static void menu_rights_changed(const char attribute((unused)) *event, users_set_sensitive(!!(last_rights & RIGHT_ADMIN)); } -/** @brief Called to activate a playlist */ -static void menu_activate_playlist(GtkMenuItem *menuitem, - gpointer attribute((unused)) user_data) { - GtkLabel *label = GTK_LABEL(GTK_BIN(menuitem)->child); - const char *playlist = gtk_label_get_text(label); - - fprintf(stderr, "activate playlist %s\n", playlist); /* TODO */ -} - -/** @brief Called when the playlists change */ -static void menu_playlists_changed(const char attribute((unused)) *event, - void attribute((unused)) *eventdata, - void attribute((unused)) *callbackdata) { - GtkMenuShell *menu = GTK_MENU_SHELL(playlists_menu); - /* TODO: we could be more sophisticated and only insert/remove widgets as - * needed. For now that's too much effort. */ - while(menu->children) - gtk_container_remove(GTK_CONTAINER(menu), GTK_WIDGET(menu->children->data)); - /* NB nplaylists can be -1 as well as 0 */ - for(int n = 0; n < nplaylists; ++n) { - GtkWidget *w = gtk_menu_item_new_with_label(playlists[n]); - g_signal_connect(w, "activate", G_CALLBACK(menu_activate_playlist), 0); - gtk_widget_show(w); - gtk_menu_shell_append(menu, w); - } - gtk_widget_set_sensitive(playlists_widget, - nplaylists > 0); -} - -static void edit_playlists(gpointer attribute((unused)) callback_data, - guint attribute((unused)) callback_action, - GtkWidget attribute((unused)) *menu_item) { - fprintf(stderr, "edit playlists\n"); /* TODO */ -} - /** @brief Create the menu bar widget */ GtkWidget *menubar(GtkWidget *w) { GtkWidget *m; @@ -449,7 +414,6 @@ GtkWidget *menubar(GtkWidget *w) { g_signal_connect(edit_widget, "show", G_CALLBACK(edit_menu_show), 0); event_register("rights-changed", menu_rights_changed, 0); - event_register("playlists-updated", menu_playlists_changed, 0); users_set_sensitive(0); m = gtk_item_factory_get_widget(mainmenufactory, ""); diff --git a/disobedience/playlists.c b/disobedience/playlists.c index c37f1a2..fa15a29 100644 --- a/disobedience/playlists.c +++ b/disobedience/playlists.c @@ -83,6 +83,43 @@ static void playlists_updated(void attribute((unused)) *v, event_raise("playlists-updated", 0); } +/** @brief Called to activate a playlist */ +static void menu_activate_playlist(GtkMenuItem *menuitem, + gpointer attribute((unused)) user_data) { + GtkLabel *label = GTK_LABEL(GTK_BIN(menuitem)->child); + const char *playlist = gtk_label_get_text(label); + + fprintf(stderr, "activate playlist %s\n", playlist); /* TODO */ +} + +/** @brief Called when the playlists change */ +static void menu_playlists_changed(const char attribute((unused)) *event, + void attribute((unused)) *eventdata, + void attribute((unused)) *callbackdata) { + if(!playlists_menu) + return; /* OMG too soon */ + GtkMenuShell *menu = GTK_MENU_SHELL(playlists_menu); + /* TODO: we could be more sophisticated and only insert/remove widgets as + * needed. For now that's too much effort. */ + while(menu->children) + gtk_container_remove(GTK_CONTAINER(menu), GTK_WIDGET(menu->children->data)); + /* NB nplaylists can be -1 as well as 0 */ + for(int n = 0; n < nplaylists; ++n) { + GtkWidget *w = gtk_menu_item_new_with_label(playlists[n]); + g_signal_connect(w, "activate", G_CALLBACK(menu_activate_playlist), 0); + gtk_widget_show(w); + gtk_menu_shell_append(menu, w); + } + gtk_widget_set_sensitive(playlists_widget, + nplaylists > 0); +} + + void edit_playlists(gpointer attribute((unused)) callback_data, + guint attribute((unused)) callback_action, + GtkWidget attribute((unused)) *menu_item) { + fprintf(stderr, "edit playlists\n"); /* TODO */ +} + /** @brief Initialize playlist support */ void playlists_init(void) { /* We re-get all playlists upon any change... */ @@ -94,6 +131,7 @@ void playlists_init(void) { /* ...and from time to time */ event_register("periodic-slow", playlists_update, 0); /* ...and at startup */ + event_register("playlists-updated", menu_playlists_changed, 0); playlists_update(0, 0, 0); }