diff options
Diffstat (limited to '')
-rw-r--r-- | src/screen_artist.c | 84 |
1 files changed, 59 insertions, 25 deletions
diff --git a/src/screen_artist.c b/src/screen_artist.c index b8f5bb018..7a28a7887 100644 --- a/src/screen_artist.c +++ b/src/screen_artist.c @@ -80,11 +80,30 @@ artist_lw_callback(unsigned idx, mpd_unused int *highlight, mpd_unused void *dat return buf; } +static void +paint(mpdclient_t *c); + +static void +artist_repaint(void) +{ + paint(NULL); + wrefresh(browser.lw->w); +} + +static void +artist_repaint_if_active(void) +{ + if (get_cur_mode_id() == 2) /* XXX don't use the literal number */ + artist_repaint(); +} + /* the playlist have been updated -> fix highlights */ static void playlist_changed_callback(mpdclient_t *c, int event, gpointer data) { browser_playlist_changed(&browser, c, event, data); + + artist_repaint_if_active(); } /* fetch artists/albums/songs from mpd */ @@ -164,6 +183,8 @@ browse_callback(mpdclient_t *c, int event, mpd_unused gpointer data) default: break; } + + artist_repaint_if_active(); } static void @@ -225,19 +246,6 @@ paint(mpd_unused mpdclient_t *c) } } -static void -update(mpd_unused screen_t *screen, mpdclient_t *c) -{ - if (browser.filelist && !browser.filelist->updated) - list_window_paint(browser.lw, browser_lw_callback, - browser.filelist); - else if (metalist) - list_window_paint(browser.lw, artist_lw_callback, metalist); - else - paint(c); - wnoutrefresh(browser.lw->w); -} - static const char * get_title(char *str, size_t size) { @@ -287,6 +295,13 @@ artist_cmd(screen_t *screen, mpdclient_t *c, command_t cmd) { char *selected; + if (browser.filelist == NULL && metalist != NULL && + list_window_cmd(browser.lw, metalist_length, cmd)) { + list_window_paint(browser.lw, artist_lw_callback, metalist); + wrefresh(browser.lw->w); + return 1; + } + switch(cmd) { case CMD_PLAY: switch (mode) { @@ -295,6 +310,9 @@ artist_cmd(screen_t *screen, mpdclient_t *c, command_t cmd) browser.lw->selected); update_metalist(c, g_strdup(selected), NULL); list_window_push_state(browser.lw_state, browser.lw); + + list_window_paint(browser.lw, artist_lw_callback, metalist); + wrefresh(browser.lw->w); break; case LIST_ALBUMS: @@ -316,6 +334,8 @@ artist_cmd(screen_t *screen, mpdclient_t *c, command_t cmd) update_metalist(c, g_strdup(artist), g_strdup(selected)); list_window_push_state(browser.lw_state, browser.lw); } + + artist_repaint(); break; case LIST_SONGS: @@ -327,6 +347,9 @@ artist_cmd(screen_t *screen, mpdclient_t *c, command_t cmd) /* restore previous list window state */ list_window_pop_state(browser.lw_state, browser.lw); + + list_window_paint(browser.lw, artist_lw_callback, metalist); + wrefresh(browser.lw->w); } else browser_handle_enter(&browser, c); break; @@ -355,6 +378,8 @@ artist_cmd(screen_t *screen, mpdclient_t *c, command_t cmd) list_window_pop_state(browser.lw_state, browser.lw); break; } + + artist_repaint(); break; case CMD_GO_ROOT_DIRECTORY: @@ -370,6 +395,8 @@ artist_cmd(screen_t *screen, mpdclient_t *c, command_t cmd) while(list_window_pop_state(browser.lw_state, browser.lw)); break; } + + artist_repaint(); break; case CMD_SELECT: @@ -418,17 +445,20 @@ artist_cmd(screen_t *screen, mpdclient_t *c, command_t cmd) case CMD_LIST_FIND_NEXT: case CMD_LIST_RFIND_NEXT: if (browser.filelist) - return screen_find(screen, - browser.lw, filelist_length(browser.filelist), - cmd, browser_lw_callback, - browser.filelist); + screen_find(screen, + browser.lw, filelist_length(browser.filelist), + cmd, browser_lw_callback, + browser.filelist); else if (metalist) - return screen_find(screen, - browser.lw, metalist_length, - cmd, artist_lw_callback, metalist); + screen_find(screen, + browser.lw, metalist_length, + cmd, artist_lw_callback, metalist); else return 1; + artist_repaint(); + return 1; + case CMD_MOUSE_EVENT: return browser_handle_mouse_event(&browser, c); @@ -436,10 +466,15 @@ artist_cmd(screen_t *screen, mpdclient_t *c, command_t cmd) break; } - if (browser.filelist) - return list_window_cmd(browser.lw, filelist_length(browser.filelist), cmd); - else if (metalist) - return list_window_cmd(browser.lw, metalist_length, cmd); + if (browser.filelist != NULL && + list_window_cmd(browser.lw, filelist_length(browser.filelist), + cmd)) { + list_window_paint(browser.lw, browser_lw_callback, + browser.filelist); + wrefresh(browser.lw->w); + browser.filelist->updated = FALSE; + return 1; + } return 0; } @@ -450,7 +485,6 @@ const struct screen_functions screen_artist = { .open = open, .resize = resize, .paint = paint, - .update = update, .cmd = artist_cmd, .get_title = get_title, }; |