diff --git a/gui/audio.c b/gui/audio.c
index 21664d8d..f44f150b 100644
--- a/gui/audio.c
+++ b/gui/audio.c
@@ -34,6 +34,8 @@ static void __gui_audio_load(struct track *track)
__gui_audio_set_label_markup(gui_artist_tag(), "x-large",
track->tr_album->al_artist->ar_name);
__gui_audio_set_label_markup(gui_duration(), "large", duration);
+ __gui_audio_set_label_markup(gui_position(), "large", "0:00");
+ gtk_adjustment_set_upper(gui_seek(), track->tr_length);
gui_pl_system_track_loaded(track);
gui_treeview_scroll();
@@ -67,7 +69,8 @@ void __gui_audio_pause_changed(GtkComboBox *combo, gpointer data)
audio_pause_after(gtk_combo_box_get_active(combo) - 1);
}
-void __audio_seek(GtkRange *range, GtkScrollType type, double value, gpointer data)
+void __gui_audio_seek(GtkRange *range, GtkScrollType type,
+ double value, gpointer data)
{
audio_seek(value * GST_SECOND);
}
@@ -77,19 +80,6 @@ void __audio_volume_changed(GtkScaleButton *button, gdouble value, gpointer data
audio_set_volume((unsigned int)value);
}
-static int __audio_timeout(gpointer data)
-{
- gchar *position = string_sec2str(audio_position() / GST_SECOND);
- GtkAdjustment *progress = data;
-
- gtk_adjustment_set_upper(progress, audio_duration() / GST_SECOND);
- gtk_adjustment_set_value(progress, audio_position() / GST_SECOND);
- __gui_audio_set_label_markup(gui_position(), "large", position);
-
- g_free(position);
- return G_SOURCE_CONTINUE;
-}
-
gboolean __gui_audio_can_accel(GtkWidget *widget, guint signal_id)
{
g_signal_stop_emission_by_name(widget, "can-activate-accel");
@@ -101,10 +91,10 @@ gboolean __gui_audio_can_accel(GtkWidget *widget, guint signal_id)
void gui_audio_init()
{
GtkScaleButton *volume = GTK_SCALE_BUTTON(gui_builder_widget("o_volume"));
- audio_timeout = g_timeout_add(500, __audio_timeout,
- gui_builder_object("o_progress"));
gtk_scale_button_set_value(volume, audio_get_volume());
gtk_button_set_relief(GTK_BUTTON(volume), GTK_RELIEF_NORMAL);
+
+ audio_timeout = g_timeout_add(500, gui_audio_timeout, NULL);
}
void gui_audio_deinit()
@@ -112,9 +102,14 @@ void gui_audio_deinit()
g_source_remove(audio_timeout);
}
-#ifdef CONFIG_TESTING
-void test_gui_audio_timeout()
+int gui_audio_timeout(gpointer data)
{
- __audio_timeout(gui_builder_object("o_progress"));
+ gchar *position = string_sec2str(audio_position() / GST_SECOND);
+
+ gtk_adjustment_set_upper(gui_seek(), audio_duration() / GST_SECOND);
+ gtk_adjustment_set_value(gui_seek(), audio_position() / GST_SECOND);
+ __gui_audio_set_label_markup(gui_position(), "large", position);
+
+ g_free(position);
+ return G_SOURCE_CONTINUE;
}
-#endif /* CONFIG_TESTING */
diff --git a/include/gui/audio.h b/include/gui/audio.h
index 6500c0d2..832ead57 100644
--- a/include/gui/audio.h
+++ b/include/gui/audio.h
@@ -14,6 +14,9 @@ void gui_audio_init();
/* Called to stop the GUI audio timeout function. */
void gui_audio_deinit();
+/* Called to update the current track position. */
+int gui_audio_timeout();
+
/* Called to get the label displaying the album tag. */
static inline GtkLabel *gui_album_tag(void)
{
@@ -74,7 +77,10 @@ static inline GtkComboBoxText *gui_pause_after(void)
return GTK_COMBO_BOX_TEXT(gui_builder_widget("pause_after"));
}
-#ifdef CONFIG_TESTING
-void test_gui_audio_timeout();
-#endif /* CONFIG_TESTING */
+/* Called to get the seeking GtkAdjustment. */
+static inline GtkAdjustment *gui_seek(void)
+{
+ return GTK_ADJUSTMENT(gui_builder_object("seek"));
+}
+
#endif /* OCARINA_GUI_AUDIO_H */
diff --git a/share/ocarina/ocarina.ui b/share/ocarina/ocarina.ui
index ffcee8de..7f3294e0 100644
--- a/share/ocarina/ocarina.ui
+++ b/share/ocarina/ocarina.ui
@@ -93,7 +93,7 @@
False
folder-new
-