diff src/audacious/ui_main_evlisteners.c @ 4359:0becb809bdc9

moved most GUI-related functions from playback.c to ui_main_evlisteners.c this change enables basic, working headless mode in X!
author mf0102 <0102@gmx.at>
date Mon, 17 Mar 2008 23:47:24 +0100
parents 17bf734f8187
children 313dd79a2d24
line wrap: on
line diff
--- a/src/audacious/ui_main_evlisteners.c	Mon Mar 17 23:52:19 2008 +0300
+++ b/src/audacious/ui_main_evlisteners.c	Mon Mar 17 23:47:24 2008 +0100
@@ -26,12 +26,30 @@
 #include "playlist.h"
 #include "playlist_evmessages.h"
 #include "playlist_evlisteners.h"
+#include "visualization.h"
 
 #include "ui_main.h"
 #include "ui_equalizer.h"
+#include "ui_skinned_playstatus.h"
 #include "ui_skinned_textbox.h"
 #include "ui_playlist.h"
 
+static gint song_info_timeout_source = 0;
+static gint update_vis_timeout_source = 0;
+
+/* XXX: there has to be a better way than polling here! */
+/* also: where should this function go? should it stay here? --mf0102 */
+static gboolean
+update_vis_func(gpointer unused)
+{
+    if (!playback_get_playing())
+        return FALSE;
+
+    input_update_vis(playback_get_time());
+
+    return TRUE;
+}
+
 static void
 ui_main_evlistener_title_change(gpointer hook_data, gpointer user_data)
 {
@@ -76,6 +94,86 @@
     playback_initiate();
 }
 
+static void
+ui_main_evlistener_playback_begin(gpointer hook_data, gpointer user_data)
+{
+    ui_vis_clear_data(mainwin_vis);
+    ui_svis_clear_data(mainwin_svis);
+    mainwin_disable_seekbar();
+    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);
+
+    if (cfg.player_shaded) {
+        gtk_widget_show(mainwin_stime_min);
+        gtk_widget_show(mainwin_stime_sec);
+        gtk_widget_show(mainwin_sposition);
+    } else {
+        gtk_widget_show(mainwin_minus_num);
+        gtk_widget_show(mainwin_10min_num);
+        gtk_widget_show(mainwin_min_num);
+        gtk_widget_show(mainwin_10sec_num);
+        gtk_widget_show(mainwin_sec_num);
+        gtk_widget_show(mainwin_position);
+    }
+
+    update_vis_timeout_source = g_timeout_add(10,
+    (GSourceFunc) update_vis_func, NULL);
+
+    vis_playback_start();
+
+    ui_skinned_playstatus_set_status(mainwin_playstatus, STATUS_PLAY);
+}
+
+static void
+ui_main_evlistener_playback_stop(gpointer hook_data, gpointer user_data)
+{
+    if (song_info_timeout_source)
+        g_source_remove(song_info_timeout_source);
+
+    vis_playback_stop();
+    free_vis_data();
+
+    ui_skinned_playstatus_set_buffering(mainwin_playstatus, FALSE);
+}
+
+static void
+ui_main_evlistener_playback_pause(gpointer hook_data, gpointer user_data)
+{
+    ui_skinned_playstatus_set_status(mainwin_playstatus, STATUS_PAUSE);
+}
+
+static void
+ui_main_evlistener_playback_unpause(gpointer hook_data, gpointer user_data)
+{
+    ui_skinned_playstatus_set_status(mainwin_playstatus, STATUS_PLAY);
+}
+
+static void
+ui_main_evlistener_playback_seek(gpointer hook_data, gpointer user_data)
+{
+    free_vis_data();
+}
+
+static void
+ui_main_evlistener_playback_play_file(gpointer hook_data, gpointer user_data)
+{
+    if (cfg.random_skin_on_play)
+        skin_set_random_skin();
+}
+
+static void
+ui_main_evlistener_playlist_info_change(gpointer hook_data, gpointer user_data)
+{
+     PlaylistEventInfoChange *msg = (PlaylistEventInfoChange *) hook_data;
+
+     mainwin_set_song_info(msg->bitrate, msg->samplerate, msg->channels);
+
+     g_free(msg);
+}
+
 void
 ui_main_evlistener_init(void)
 {
@@ -83,5 +181,12 @@
     hook_associate("hide seekbar", ui_main_evlistener_hide_seekbar, NULL);
     hook_associate("volume set", ui_main_evlistener_volume_change, NULL);
     hook_associate("playback initiate", ui_main_evlistener_playback_initiate, NULL);
+    hook_associate("playback begin", ui_main_evlistener_playback_begin, NULL);
+    hook_associate("playback stop", ui_main_evlistener_playback_stop, NULL);
+    hook_associate("playback pause", ui_main_evlistener_playback_pause, NULL);
+    hook_associate("playback unpause", ui_main_evlistener_playback_unpause, NULL);
+    hook_associate("playback seek", ui_main_evlistener_playback_seek, NULL);
+    hook_associate("playback play file", ui_main_evlistener_playback_play_file, NULL);
+    hook_associate("playlist info change", ui_main_evlistener_playlist_info_change, NULL);
 }