chiark / gitweb /
Move playlist menu code to playlists.c
authorRichard Kettlewell <rjk@greenend.org.uk>
Sat, 9 Aug 2008 13:28:53 +0000 (14:28 +0100)
committerRichard Kettlewell <rjk@greenend.org.uk>
Sat, 9 Aug 2008 13:28:53 +0000 (14:28 +0100)
disobedience/disobedience.h
disobedience/menu.c
disobedience/playlists.c

index bd7b60cf43058ff0505e5929eb071dfc09a8abb3..3d9d1d276ecfc7d2067302b0a5960ea6d6abcf70 100644 (file)
@@ -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 */
 
index 63d89bee1ae08a9dcb8aaee5539224f56abf56e2..d2f190d178c4c61873a186eb8389d008ddd5ba9d 100644 (file)
@@ -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,
                                   "<GdisorderMain>");
index c37f1a208e42702726c3845ba68df7f3ef02ec7b..fa15a29a80d12e2c8cda54f0a8ba9b32b666042f 100644 (file)
@@ -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);
 }