# HG changeset patch # User Tomasz Mon # Date 1215205027 -7200 # Node ID f6ea8f18c2415dba5badd95da5e7a21aae82c72c # Parent 7453f5365b8cd21dd2e840a0259217d87de17118 add position slider diff -r 7453f5365b8c -r f6ea8f18c241 src/audacious/ui_new.c --- a/src/audacious/ui_new.c Thu Jul 03 01:07:07 2008 +0200 +++ b/src/audacious/ui_new.c Fri Jul 04 22:57:07 2008 +0200 @@ -27,6 +27,10 @@ #include "ui_new.h" static GtkWidget *label_prev, *label_current, *label_next; +static GtkWidget *slider; + +gulong slider_change_handler_id; +static gint update_song_timeout_source = 0; static gboolean window_delete() @@ -84,6 +88,46 @@ g_free(title); } +static gboolean +update_song_info(gpointer hook_data, gpointer user_data) +{ + if (!playback_get_playing()) + return FALSE; + + gint time = playback_get_time(); + gint length = playback_get_length(); + + g_signal_handler_block(slider, slider_change_handler_id); + gtk_range_set_range(GTK_RANGE(slider), (gdouble)0, (gdouble)length); + gtk_range_set_value(GTK_RANGE(slider), (gdouble)time); + g_signal_handler_unblock(slider, slider_change_handler_id); + + return TRUE; +} + +static gboolean +ui_slider_value_changed_cb(GtkRange *range, GtkScrollType scroll, + gdouble value, gpointer user_data) +{ + playback_seek(value/1000); + + return TRUE; +} + +static void +ui_playback_begin(gpointer hook_data, gpointer user_data) +{ + update_song_timeout_source = g_timeout_add_seconds(1, (GSourceFunc) update_song_info, NULL); +} + +static void +ui_playback_stop(gpointer hook_data, gpointer user_data) +{ + if (update_song_timeout_source) { + g_source_remove(update_song_timeout_source); + update_song_timeout_source = 0; + } +} static GtkToolItem * gtk_toolbar_button_add(GtkWidget *toolbar, void(*callback)(), const gchar *stock_id) @@ -120,7 +164,6 @@ GtkToolItem *button_open, *button_add, *button_play, *button_previous, *button_next; - window = gtk_window_new(GTK_WINDOW_TOPLEVEL); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(window_delete), NULL); @@ -162,7 +205,17 @@ gtk_box_pack_start(GTK_BOX(vbox), pcnbox, TRUE, TRUE, 0); + slider = gtk_hscale_new(NULL); + gtk_scale_set_draw_value(GTK_SCALE(slider), FALSE); + gtk_range_set_update_policy(GTK_RANGE(slider), GTK_UPDATE_DISCONTINUOUS); + gtk_box_pack_end(GTK_BOX(cvbox), slider, TRUE, TRUE, 0); + hook_associate("title change", set_song_title, NULL); + hook_associate("playback seek", (HookFunction) update_song_info, NULL); + hook_associate("playback begin", (HookFunction) ui_playback_begin, NULL); + hook_associate("playback stop", (HookFunction) ui_playback_stop, NULL); + + slider_change_handler_id = g_signal_connect(slider, "value-changed", G_CALLBACK(ui_slider_value_changed_cb), NULL); gtk_widget_show_all(window); gtk_main();