diff options
author | Max Kellermann <max@duempel.org> | 2008-10-02 15:20:19 +0200 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2008-10-02 15:20:19 +0200 |
commit | b1a8ff5269e42088b1530ccacb52a55b60754578 (patch) | |
tree | fcac2d8606a6cd2d456160c5d6bcbae1ed8dd6de /src | |
parent | a220d744b2c2ba89c9037caae055247953b72ac9 (diff) | |
download | mpd-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.h | 6 | ||||
-rw-r--r-- | src/screen_browser.c | 16 | ||||
-rw-r--r-- | src/screen_lyrics.c | 20 | ||||
-rw-r--r-- | src/screen_play.c | 11 |
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; } |