diff --git a/gui/artwork.c b/gui/artwork.c
index 1b101c56..050a557e 100644
--- a/gui/artwork.c
+++ b/gui/artwork.c
@@ -14,7 +14,7 @@ static cairo_surface_t *__artwork_scale_pixbuf(GdkPixbuf *pix)
{
int old_h = gdk_pixbuf_get_height(pix);
int old_w = gdk_pixbuf_get_width(pix);
- int new_h = gui_builder_widget_height("o_position") +
+ int new_h = gui_builder_widget_height("position") +
gui_builder_widget_height("o_tags");
int new_w = (old_w * new_h) / old_h;
int scale = gtk_widget_get_scale_factor(gui_builder_widget("o_cover"));
diff --git a/gui/audio.c b/gui/audio.c
index d7165306..d94fb233 100644
--- a/gui/audio.c
+++ b/gui/audio.c
@@ -23,28 +23,23 @@ static inline void __gui_audio_set_label_markup(GtkLabel *label,
g_free(markup);
}
-static inline void __audio_set_time_label(const gchar *label, unsigned int time)
-{
- gchar *str = string_sec2str(time);
- __gui_audio_set_label_markup(GTK_LABEL(gui_builder_widget(label)),
- "large",str);
- g_free(str);
-}
-
static void __audio_load(struct track *track)
{
+ gchar *duration = string_sec2str(track->tr_length);
+
__gui_audio_set_label_markup(gui_title_tag(), "xx-large",
track->tr_title);
__gui_audio_set_label_markup(gui_album_tag(), "x-large",
track->tr_album->al_name);
__gui_audio_set_label_markup(gui_artist_tag(), "x-large",
track->tr_album->al_artist->ar_name);
- __audio_set_time_label("o_duration", track->tr_length);
+ __gui_audio_set_label_markup(gui_duration(), "large", duration);
gui_pl_system_track_loaded(track);
gui_treeview_scroll();
gui_artwork_set_cover();
gui_idle_enable();
+ g_free(duration);
}
static void __audio_change_state(GstState state)
@@ -82,11 +77,14 @@ void __audio_volume_changed(GtkScaleButton *button, gdouble value, gpointer data
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);
- __audio_set_time_label("o_position", audio_position() / GST_SECOND);
+ __gui_audio_set_label_markup(gui_position(), "large", position);
+
+ g_free(position);
return G_SOURCE_CONTINUE;
}
diff --git a/include/gui/audio.h b/include/gui/audio.h
index ac834da1..037821d8 100644
--- a/include/gui/audio.h
+++ b/include/gui/audio.h
@@ -32,6 +32,18 @@ static inline GtkLabel *gui_title_tag(void)
return GTK_LABEL(gui_builder_widget("title_tag"));
}
+/* Called to get the label displaying the track's position. */
+static inline GtkLabel *gui_position(void)
+{
+ return GTK_LABEL(gui_builder_widget("position"));
+}
+
+/* Called to get the label displaying the track's duration. */
+static inline GtkLabel *gui_duration(void)
+{
+ return GTK_LABEL(gui_builder_widget("duration"));
+}
+
#ifdef CONFIG_TESTING
void test_gui_audio_timeout();
#endif /* CONFIG_TESTING */
diff --git a/share/ocarina/ocarina.ui b/share/ocarina/ocarina.ui
index 27793b36..39115c6d 100644
--- a/share/ocarina/ocarina.ui
+++ b/share/ocarina/ocarina.ui
@@ -487,7 +487,7 @@ audio-volume-medium
True
3
-
-
+
True
False
start
diff --git a/tests/gui/audio.c b/tests/gui/audio.c
index c2e3f612..e69325a5 100644
--- a/tests/gui/audio.c
+++ b/tests/gui/audio.c
@@ -20,11 +20,6 @@ struct core_init_data init_data = {
.audio_ops = &audio_ops,
};
-static inline const gchar *test_get_label_text(const gchar *name)
-{
- return gtk_label_get_text(GTK_LABEL(gui_builder_widget(name)));
-}
-
static inline bool test_get_toggle_state(const gchar *name)
{
return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gui_builder_widget(name)));
@@ -62,11 +57,14 @@ static void test_audio_init()
g_assert_cmpstr(gtk_label_get_text(gui_album_tag()), ==, " ");
g_assert_cmpstr(gtk_label_get_text(gui_artist_tag()), ==, " ");
g_assert_cmpstr(gtk_label_get_text(gui_title_tag()), ==, " ");
+ g_assert_cmpstr(gtk_label_get_text(gui_position()), ==, "0:00");
+ g_assert_cmpstr(gtk_label_get_text(gui_duration()), ==, "0:00");
}
static void test_audio_load()
{
- struct track *track = track_get(0);
+ struct track *track = track_get(0);
+ gchar *length = string_sec2str(track->tr_length);
audio_load(track);
g_assert_cmpstr(gtk_label_get_text(gui_album_tag()), ==,
@@ -75,13 +73,16 @@ static void test_audio_load()
track->tr_album->al_artist->ar_name);
g_assert_cmpstr(gtk_label_get_text(gui_title_tag()), ==,
track->tr_title);
+ g_assert_cmpstr(gtk_label_get_text(gui_duration()), ==, length);
+ g_assert_cmpstr(gtk_label_get_text(gui_position()), ==, "0:00");
+
+ g_free(length);
}
static void test_audio()
{
struct db_entry *dbe, *next;
struct track *track;
- gchar *duration;
audio_load(track_get(1));
audio_pause();
@@ -104,12 +105,8 @@ static void test_audio()
audio_load(track);
g_assert_cmpuint(audio_cur_track()->tr_track, ==, track->tr_track);
- duration = string_sec2str(track->tr_length);
- g_assert_cmpstr(test_get_label_text("o_position"), ==, "0:00");
- g_assert_cmpstr(test_get_label_text("o_duration"), ==, duration);
g_assert_true(test_get_toggle_state("favorite_button"));
g_assert_true(test_get_toggle_state("hide_button"));
- g_free(duration);
test_click_button("o_play");
g_assert_false(gtk_widget_is_visible(gui_builder_widget("o_play")));
@@ -146,9 +143,10 @@ static void test_audio()
test_click_button("o_pause");
test_audio_seek(71 * GST_SECOND);
test_gui_audio_timeout();
- g_assert_cmpstr(test_get_label_text("o_position"), ==, "1:11");
g_assert_cmpuint(gtk_adjustment_get_upper(GTK_ADJUSTMENT(gui_builder_object("o_progress"))),
==, audio_cur_track()->tr_length);
+ test_audio_seek(0);
+ test_gui_audio_timeout();
}
int main(int argc, char **argv)