Mercurial > hg > xmms-sid
changeset 184:4406e91d2da3
Subtune control slider in fileinfo-window now works. Various fixes.
Pop-up subtune control can now be exited via ESC-button. The slider
is focused by default.
author | Matti Hamalainen <ccr@tnsp.org> |
---|---|
date | Wed, 18 Aug 2004 05:16:00 +0000 |
parents | 11d0f9555717 |
children | af7c0e0ce11a |
files | src/xmms-sid.c |
diffstat | 1 files changed, 75 insertions(+), 19 deletions(-) [+] |
line wrap: on
line diff
--- a/src/xmms-sid.c Wed Aug 18 05:15:00 2004 +0000 +++ b/src/xmms-sid.c Wed Aug 18 05:16:00 2004 +0000 @@ -28,6 +28,9 @@ #include <xmms/plugin.h> #include <xmms/util.h> +#include <gdk/gdkkeysyms.h> +#include <gtk/gtk.h> + #include "xmms-sid.h" #include "xs_support.h" #include "xs_config.h" @@ -117,7 +120,9 @@ static t_xs_tune *xs_fileinfotune = NULL; static t_xs_stil_node *xs_fileinfostil = NULL; + void xs_subctrl_close(void); +void xs_subctrl_update(void); /* @@ -299,10 +304,13 @@ pthread_mutex_lock(&xs_mutex); myStatus.currSong = xs_status.currSong; pthread_mutex_unlock(&xs_mutex); + xs_subctrl_update(); XSDEBUG("subtune #%i selected, initializing...\n", myStatus.currSong); songLength = myTune->subTunes[myStatus.currSong - 1].tuneLength; + + /* Check minimum playtime */ if (xs_cfg.playMinTimeEnable) { if (songLength < xs_cfg.playMinTime) @@ -314,7 +322,7 @@ { XSERR("Couldn't initialize SID-tune '%s' (sub-tune #%i)!\n", myTune->tuneFilename, myStatus.currSong); - goto err_exit; + goto xs_err_exit; } @@ -335,7 +343,7 @@ pthread_mutex_lock(&xs_mutex); xs_status.isError = TRUE; pthread_mutex_unlock(&xs_mutex); - goto err_exit; + goto xs_err_exit; } audioOpen = TRUE; @@ -399,7 +407,7 @@ if (!myStatus.isPlaying) doPlay = FALSE; } -err_exit: +xs_err_exit: /* Close audio */ if (audioOpen) { @@ -442,7 +450,7 @@ xs_status.isPlaying = TRUE; xs_status.isError = FALSE; xs_status.currSong = xs_status.pTune->startTune; - + /* Start the playing thread! */ if (pthread_create(&xs_decode_thread, NULL, xs_play_loop, NULL) < 0) { @@ -479,6 +487,9 @@ xs_player->plrDeleteSID(&xs_status); xs_tune_free(xs_status.pTune); xs_status.pTune = NULL; + + /* Update subtune control */ + xs_subctrl_update(); } @@ -500,29 +511,50 @@ void xs_subctrl_update(void) { GtkAdjustment *tmpAdj; + gboolean isEnabled; - if (xs_subctrl) + /* Check if control window exists, we are currently playing and have a tune */ + if (xs_subctrl && xs_status.pTune && xs_status.isPlaying) { tmpAdj = GTK_ADJUSTMENT(xs_subctrl_adj); tmpAdj->value = xs_status.currSong; tmpAdj->lower = 1; - tmpAdj->upper = (xs_status.pTune) ? xs_status.pTune->nsubTunes : 1; + tmpAdj->upper = xs_status.pTune->nsubTunes; gtk_adjustment_value_changed(tmpAdj); } if (xs_fileinfowin) { - tmpAdj = gtk_range_get_adjustment(GTK_RANGE(LUW("fileinfo_subctrl_adj"))); + /* Check if we are currently playing and have a tune */ + if (xs_status.pTune && xs_status.isPlaying) + { + tmpAdj = gtk_range_get_adjustment(GTK_RANGE(LUW("fileinfo_subctrl_adj"))); - tmpAdj->value = xs_status.currSong; - tmpAdj->lower = 1; - tmpAdj->upper = xs_status.pTune->nsubTunes; - gtk_adjustment_value_changed(tmpAdj); + tmpAdj->value = xs_status.currSong; + tmpAdj->lower = 1; + tmpAdj->upper = xs_status.pTune->nsubTunes; + gtk_adjustment_value_changed(tmpAdj); + isEnabled = TRUE; + } else + isEnabled = FALSE; + + /* Enable or disable subtune-control in fileinfo window */ + gtk_widget_set_sensitive(LUW("fileinfo_subctrl_prev"), isEnabled); + gtk_widget_set_sensitive(LUW("fileinfo_subctrl_adj"), isEnabled); + gtk_widget_set_sensitive(LUW("fileinfo_subctrl_next"), isEnabled); } } +void xs_fileinfo_setsong(void) +{ + pthread_mutex_lock(&xs_mutex); + xs_status.currSong = gtk_range_get_adjustment(GTK_RANGE(LUW("fileinfo_subctrl_adj")))->value; + pthread_mutex_unlock(&xs_mutex); +} + + void xs_subctrl_setsong(void) { pthread_mutex_lock(&xs_mutex); @@ -533,10 +565,13 @@ void xs_subctrl_prevsong(void) { - pthread_mutex_lock(&xs_mutex); - if (xs_status.currSong > 1) - xs_status.currSong--; - pthread_mutex_unlock(&xs_mutex); + if (xs_status.pTune && xs_status.isPlaying) + { + pthread_mutex_lock(&xs_mutex); + if (xs_status.currSong > 1) + xs_status.currSong--; + pthread_mutex_unlock(&xs_mutex); + } xs_subctrl_update(); } @@ -544,10 +579,13 @@ void xs_subctrl_nextsong(void) { - pthread_mutex_lock(&xs_mutex); - if (xs_status.currSong < xs_status.pTune->nsubTunes) - xs_status.currSong++; - pthread_mutex_unlock(&xs_mutex); + if (xs_status.pTune && xs_status.isPlaying) + { + pthread_mutex_lock(&xs_mutex); + if (xs_status.currSong < xs_status.pTune->nsubTunes) + xs_status.currSong++; + pthread_mutex_unlock(&xs_mutex); + } xs_subctrl_update(); } @@ -563,6 +601,15 @@ } +gboolean xs_subctrl_keypress(GtkWidget *win, GdkEventKey *ev) +{ + if (ev->keyval == GDK_Escape) + xs_subctrl_close(); + + return FALSE; +} + + void xs_subctrl_open() { GtkWidget *frame25, *hbox15, *subctrl_prev, *subctrl_current, *subctrl_next; @@ -611,6 +658,7 @@ gtk_box_pack_start (GTK_BOX (hbox15), subctrl_current, FALSE, TRUE, 0); gtk_scale_set_digits (GTK_SCALE (subctrl_current), 0); gtk_range_set_update_policy (GTK_RANGE (subctrl_current), GTK_UPDATE_DELAYED); + gtk_widget_grab_focus (subctrl_current); subctrl_next = gtk_button_new_with_label (" > "); gtk_widget_set_name (subctrl_next, "subctrl_next"); @@ -622,6 +670,9 @@ gtk_signal_connect (GTK_OBJECT (subctrl_next), "clicked", GTK_SIGNAL_FUNC (xs_subctrl_nextsong), NULL); + gtk_signal_connect (GTK_OBJECT (xs_subctrl), "key_press_event", + GTK_SIGNAL_FUNC (xs_subctrl_keypress), NULL); + gtk_widget_show_all(xs_subctrl); } @@ -877,6 +928,11 @@ } else { /* If not, create a new one */ xs_fileinfowin = create_xs_fileinfowin(); + + /* Connect additional signals */ + gtk_signal_connect(GTK_OBJECT( + gtk_range_get_adjustment(GTK_RANGE(LUW("fileinfo_subctrl_adj")))), + "value_changed", GTK_SIGNAL_FUNC (xs_fileinfo_setsong), NULL); }