From: Daniel Drake Remove song info update from 100hz idle function. We only need to update this information once per second. Index: audacious-devel/src/audacious/playback.c =================================================================== --- audacious-devel.orig/src/audacious/playback.c +++ audacious-devel/src/audacious/playback.c @@ -53,6 +53,7 @@ #include "playback.h" +static int song_info_timeout_source = 0; gint playback_get_time(void) @@ -101,6 +102,11 @@ playback_initiate(void) playlist_check_pos_current(playlist); mainwin_set_info_text(); + mainwin_update_song_info(); + + /* FIXME: use g_timeout_add_seconds when glib-2.14 is required */ + song_info_timeout_source = g_timeout_add(1000, + (GSourceFunc) mainwin_update_song_info, NULL); hook_call("playback begin", entry); } @@ -159,7 +165,10 @@ playback_stop(void) ip_data.buffering = FALSE; ip_data.playing = FALSE; - + + if (song_info_timeout_source) + g_source_remove(song_info_timeout_source); + g_return_if_fail(mainwin_playstatus != NULL); playstatus_set_status_buffering(mainwin_playstatus, FALSE); } Index: audacious-devel/src/audacious/ui_main.c =================================================================== --- audacious-devel.orig/src/audacious/ui_main.c +++ audacious-devel/src/audacious/ui_main.c @@ -1193,6 +1193,7 @@ mainwin_mouse_button_press(GtkWidget * w set_timer_mode(TIMER_REMAINING); else set_timer_mode(TIMER_ELAPSED); + mainwin_update_song_info(); } } @@ -3046,21 +3047,21 @@ mainwin_attach_idle_func(void) mainwin_idle_func, NULL); } -static void -idle_func_update_song_info(gint time) +gboolean +mainwin_update_song_info(void) { + gint time = playback_get_time(); gint length, t; gchar stime_prefix; + if (!playback_get_playing() || time < 0) + return FALSE; + if (ab_position_a != -1 && ab_position_b != -1 && time > ab_position_b) playback_seek(ab_position_a/1000); length = playlist_get_current_length(playlist_get_active()); - if (playback_get_playing()) - playlistwin_set_time(time, length, cfg.timer_mode); - else - playlistwin_hide_timer(); - input_update_vis(time); + playlistwin_set_time(time, length, cfg.timer_mode); if (cfg.timer_mode == TIMER_REMAINING) { if (length != -1) { @@ -3120,6 +3121,8 @@ idle_func_update_song_info(gint time) hslider_set_position(mainwin_position, 0); hslider_set_position(mainwin_sposition, 1); } + + return TRUE; } static gboolean @@ -3141,7 +3144,7 @@ mainwin_idle_func(gpointer data) break; default: - idle_func_update_song_info(time); + input_update_vis(time); /* nothing at this time */ } Index: audacious-devel/src/audacious/ui_main.h =================================================================== --- audacious-devel.orig/src/audacious/ui_main.h +++ audacious-devel/src/audacious/ui_main.h @@ -169,6 +169,7 @@ void mainwin_general_menu_callback(gpoin GtkWidget * widget); void mainwin_attach_idle_func(void); +gboolean mainwin_update_song_info(void); void mainwin_drag_data_received(GtkWidget * widget, GdkDragContext * context, gint x,