aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2008-10-02 15:20:19 +0200
committerMax Kellermann <max@duempel.org>2008-10-02 15:20:19 +0200
commitb1a8ff5269e42088b1530ccacb52a55b60754578 (patch)
treefcac2d8606a6cd2d456160c5d6bcbae1ed8dd6de /src
parenta220d744b2c2ba89c9037caae055247953b72ac9 (diff)
downloadmpd-b1a8ff5269e42088b1530ccacb52a55b60754578.tar.gz
mpd-b1a8ff5269e42088b1530ccacb52a55b60754578.tar.xz
mpd-b1a8ff5269e42088b1530ccacb52a55b60754578.zip
screen_lyrics: add screen_lyrics_switch()
screen_lyrics_switch() opens the lyrics screen and displays the lyrics of the specified song. This way, the user may view the lyrics of any song in the database browser.
Diffstat (limited to 'src')
-rw-r--r--src/screen.h6
-rw-r--r--src/screen_browser.c16
-rw-r--r--src/screen_lyrics.c20
-rw-r--r--src/screen_play.c11
4 files changed, 51 insertions, 2 deletions
diff --git a/src/screen.h b/src/screen.h
index e6f0ee7a1..6d2645702 100644
--- a/src/screen.h
+++ b/src/screen.h
@@ -90,4 +90,10 @@ screen_is_visible(const struct screen_functions *sf);
int screen_get_mouse_event(mpdclient_t *c, unsigned long *bstate, int *row);
+
+#ifdef ENABLE_LYRICS_SCREEN
+void
+screen_lyrics_switch(struct mpdclient *c, const struct mpd_song *song);
+#endif
+
#endif
diff --git a/src/screen_browser.c b/src/screen_browser.c
index d7dea635e..694987fae 100644
--- a/src/screen_browser.c
+++ b/src/screen_browser.c
@@ -455,6 +455,8 @@ bool
browser_cmd(struct screen_browser *browser, struct screen *screen,
struct mpdclient *c, command_t cmd)
{
+ struct filelist_entry *entry;
+
switch (cmd) {
case CMD_PLAY:
browser_handle_enter(browser, c);
@@ -494,6 +496,20 @@ browser_cmd(struct screen_browser *browser, struct screen *screen,
browser_handle_mouse_event(browser, c);
return true;
+#ifdef ENABLE_LYRICS_SCREEN
+ case CMD_SCREEN_LYRICS:
+ entry = browser_get_selected(browser);
+ if (entry == NULL)
+ return false;
+
+ if (entry->entity == NULL ||
+ entry->entity->type != MPD_INFO_ENTITY_TYPE_SONG)
+ return true;
+
+ screen_lyrics_switch(c, entry->entity->info.song);
+ return true;
+#endif
+
default:
break;
}
diff --git a/src/screen_lyrics.c b/src/screen_lyrics.c
index dbfe4ea6f..83bffdf8d 100644
--- a/src/screen_lyrics.c
+++ b/src/screen_lyrics.c
@@ -38,6 +38,8 @@
static list_window_t *lw = NULL;
+static const struct mpd_song *next_song;
+
static struct {
const struct mpd_song *song;
@@ -256,8 +258,13 @@ lyrics_exit(void)
static void
lyrics_open(mpd_unused screen_t *screen, mpdclient_t *c)
{
- if (c->song != NULL && c->song != current.song)
- screen_lyrics_load(c->song);
+ if (next_song == NULL)
+ next_song = c->song;
+
+ if (next_song != NULL && next_song != current.song)
+ screen_lyrics_load(next_song);
+
+ next_song = NULL;
}
@@ -334,3 +341,12 @@ const struct screen_functions screen_lyrics = {
.cmd = lyrics_cmd,
.get_title = lyrics_title,
};
+
+void
+screen_lyrics_switch(struct mpdclient *c, const struct mpd_song *song)
+{
+ assert(song != NULL);
+
+ next_song = song;
+ screen_switch(&screen_lyrics, c);
+}
diff --git a/src/screen_play.c b/src/screen_play.c
index 1bc2034b8..67de5fa3e 100644
--- a/src/screen_play.c
+++ b/src/screen_play.c
@@ -528,6 +528,17 @@ play_cmd(screen_t *screen, mpdclient_t *c, command_t cmd)
case CMD_MOUSE_EVENT:
return handle_mouse_event(screen,c);
+
+#ifdef ENABLE_LYRICS_SCREEN
+ case CMD_SCREEN_LYRICS:
+ if (lw->selected < playlist_length(&c->playlist)) {
+ screen_lyrics_switch(c, playlist_get(&c->playlist, lw->selected));
+ return 1;
+ }
+
+ break;
+#endif
+
default:
break;
}