-/** @brief Create @c ql->menu if it does not already exist */
-static void ql_create_menu(struct queuelike *ql) {
- if(ql->menu)
- return;
- ql->menu = gtk_menu_new();
- g_signal_connect(ql->menu, "destroy",
- G_CALLBACK(gtk_widget_destroyed), &ql->menu);
- for(int n = 0; n < ql->nmenuitems; ++n) {
- ql->menuitems[n].w = gtk_menu_item_new_with_label(ql->menuitems[n].name);
- gtk_menu_attach(GTK_MENU(ql->menu), ql->menuitems[n].w, 0, 1, n, n + 1);
- }
- set_tool_colors(ql->menu);
-}
-
-/** @brief Configure @c ql->menu */
-static void ql_configure_menu(struct queuelike *ql) {
- /* Set the sensitivity of each menu item and (re-)establish the signal
- * handlers */
- for(int n = 0; n < ql->nmenuitems; ++n) {
- if(ql->menuitems[n].handlerid)
- g_signal_handler_disconnect(ql->menuitems[n].w,
- ql->menuitems[n].handlerid);
- gtk_widget_set_sensitive(ql->menuitems[n].w,
- ql->menuitems[n].sensitive(ql));
- ql->menuitems[n].handlerid = g_signal_connect
- (ql->menuitems[n].w, "activate",
- G_CALLBACK(ql->menuitems[n].activate), ql);
- }
+ disorder_eclient_play(client, q->track, ql_play_completed, q);
+}
+
+void ql_play_activate(GtkMenuItem attribute((unused)) *menuitem,
+ gpointer user_data) {
+ struct queuelike *ql = user_data;
+ gtk_tree_selection_selected_foreach(ql->selection,
+ ql_play_activate_callback,
+ 0);