if(last_state & DISORDER_TRACK_PAUSED)
l = playing_track->sofar;
else {
+ if(!last_playing)
+ return NULL;
time(&now);
l = playing_track->sofar + (now - last_playing);
}
iter = my_iter;
}
/* Update all the columns */
- for(int col = 0; col < ql->ncolumns; ++col)
- gtk_list_store_set(ql->store, iter,
- col, ql->columns[col].value(q,
- ql->columns[col].data),
- -1);
+ for(int col = 0; col < ql->ncolumns; ++col) {
+ const char *const v = ql->columns[col].value(q,
+ ql->columns[col].data);
+ if(v)
+ gtk_list_store_set(ql->store, iter,
+ col, v,
+ -1);
+ }
gtk_list_store_set(ql->store, iter,
ql->ncolumns + QUEUEPOINTER_COLUMN, q,
-1);
/** @brief The playing track */
struct queue_entry *playing_track;
-/** @brief When we last got the playing track */
+/** @brief When we last got the playing track
+ *
+ * Set to 0 if the timings are currently off due to having just unpaused.
+ */
time_t last_playing;
static void queue_completed(void *v,
void attribute((unused)) *callbackdata) {
D(("playing_changed"));
gtk_label_set_text(GTK_LABEL(report_label), "updating playing track");
+ /* Setting last_playing=0 means that we don't know what the correct value
+ * is right now, e.g. because things have been deranged by a pause. */
+ last_playing = 0;
disorder_eclient_playing(client, playing_completed, 0);
}