diff --git a/src/screen_artist.c b/src/screen_artist.c
index 6857b66adb712e2cbe94eaa5fcdde9a614dff59a..03b4fed421ab69165d61a4776f750f389e834875 100644 (file)
--- a/src/screen_artist.c
+++ b/src/screen_artist.c
*
*/
-#include "config.h"
-
-#ifndef DISABLE_ARTIST_SCREEN
#include "ncmpc.h"
#include "options.h"
#include "support.h"
@@ -80,11 +77,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 (screen_is_visible(&screen_artist))
+ 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 */
default:
break;
}
+
+ artist_repaint_if_active();
}
static void
}
static void
-paint(mpd_unused screen_t *screen, mpd_unused mpdclient_t *c)
+paint(mpd_unused mpdclient_t *c)
{
if (browser.filelist) {
list_window_paint(browser.lw, browser_lw_callback,
browser.filelist);
- browser.filelist->updated = FALSE;
} else if (metalist) {
list_window_paint(browser.lw, artist_lw_callback, metalist);
} else {
}
}
-static void
-update(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(screen, c);
- wnoutrefresh(browser.lw->w);
-}
-
static const char *
get_title(char *str, size_t size)
{
}
}
+static int
+artist_lw_cmd(command_t cmd)
+{
+ switch (mode) {
+ case LIST_ARTISTS:
+ case LIST_ALBUMS:
+ return list_window_cmd(browser.lw, metalist_length, cmd);
+
+ case LIST_SONGS:
+ return list_window_cmd(browser.lw,
+ filelist_length(browser.filelist),
+ cmd);
+ }
+
+ assert(0);
+ return 0;
+}
+
static int
artist_cmd(screen_t *screen, mpdclient_t *c, command_t cmd)
{
char *selected;
+ int ret;
+
+ if (artist_lw_cmd(cmd)) {
+ artist_repaint();
+ wrefresh(browser.lw->w);
+ return 1;
+ }
switch(cmd) {
case CMD_PLAY:
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:
update_metalist(c, g_strdup(artist), g_strdup(selected));
list_window_push_state(browser.lw_state, browser.lw);
}
+
+ artist_repaint();
break;
case LIST_SONGS:
/* 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;
list_window_pop_state(browser.lw_state, browser.lw);
break;
}
+
+ artist_repaint();
break;
case CMD_GO_ROOT_DIRECTORY:
while(list_window_pop_state(browser.lw_state, browser.lw));
break;
}
+
+ artist_repaint();
break;
case CMD_SELECT:
+ case CMD_ADD:
switch(mode) {
case LIST_ARTISTS:
selected = g_list_nth_data(metalist,
break;
case LIST_SONGS:
- if (browser_handle_select(&browser, c) == 0)
+ ret = cmd == CMD_SELECT
+ ? browser_handle_select(&browser, c)
+ : browser_handle_add(&browser, c);
+ if (ret == 0)
/* continue and select next item... */
cmd = CMD_LIST_NEXT;
break;
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);
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);
-
return 0;
}
.open = open,
.resize = resize,
.paint = paint,
- .update = update,
.cmd = artist_cmd,
.get_title = get_title,
};
-
-#endif /* ENABLE_ARTIST_SCREEN */