X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~mdw/git/disorder/blobdiff_plain/132a5a4a47f9dbc7c52ee15234d70258c59ccf8e..018d1a8b7d2813b75eeffc13c4e48bef8cfd3e7c:/disobedience/queue-menu.c diff --git a/disobedience/queue-menu.c b/disobedience/queue-menu.c index 8111205..ebf8555 100644 --- a/disobedience/queue-menu.c +++ b/disobedience/queue-menu.c @@ -71,7 +71,7 @@ void ql_properties_activate(GtkMenuItem attribute((unused)) *menuitem, gtk_tree_model_iter_next(GTK_TREE_MODEL(ql->store), iter); } if(v->nvec) - properties(v->nvec, (const char **)v->vec); + properties(v->nvec, (const char **)v->vec, ql->view); } /* Scratch */ @@ -187,6 +187,64 @@ gboolean ql_button_release(GtkWidget *widget, return FALSE; } +/* Adopt */ + +static void ql_adopt_sensitive_callback(GtkTreeModel *model, + GtkTreePath attribute((unused)) *path, + GtkTreeIter *iter, + gpointer data) { + struct queue_entry *const q = ql_iter_to_q(model, iter); + int *const count = data; + + if(*count < 0) + return; + if(q->origin == origin_random) + ++*count; + else + *count = -1; +} + +/** @brief Determine whether we're pointing at an adoptable track */ +int ql_adopt_sensitive(void *extra) { + struct queuelike *ql = extra; + int count = 0; + + /* We'll need RIGHT_PLAY */ + if(!(last_rights & RIGHT_PLAY)) + return FALSE; + /* Check that (1) only random tracks are selected (2) at least something is + * selected */ + gtk_tree_selection_selected_foreach(ql->selection, + ql_adopt_sensitive_callback, + &count); + if(count <= 0) + return FALSE; + return TRUE; +} + +static void ql_adopt_completed(void attribute((unused)) *v, const char *err) { + if(err) + popup_protocol_error(0, err); +} + +static void ql_adopt_activate_callback(GtkTreeModel *model, + GtkTreePath attribute((unused)) *path, + GtkTreeIter *iter, + gpointer attribute((unused)) data) { + struct queue_entry *const q = ql_iter_to_q(model, iter); + + disorder_eclient_adopt(client, ql_adopt_completed, q->id, q); +} + +/** @brief Called to adopt a track */ +void ql_adopt_activate(GtkMenuItem attribute((unused)) *menuitem, + gpointer user_data) { + struct queuelike *ql = user_data; + gtk_tree_selection_selected_foreach(ql->selection, + ql_adopt_activate_callback, + NULL); +} + struct tabtype *ql_tabtype(struct queuelike *ql) { static const struct tabtype queuelike_tabtype = { ql_properties_sensitive,