X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fscreen_browser.c;h=49827647d6e8f0898032fbad629c3b69b6e3a6e9;hb=0796b270b1699336f29908d11bca92d64da0653c;hp=16a2f5e7045c48233741e19aada820c76b1cdf02;hpb=2cf7354d41c1f29ae6f7ad1625ea9925006c480e;p=ncmpc.git diff --git a/src/screen_browser.c b/src/screen_browser.c index 16a2f5e..4982764 100644 --- a/src/screen_browser.c +++ b/src/screen_browser.c @@ -1,5 +1,5 @@ /* ncmpc (Ncurses MPD Client) - * (c) 2004-2009 The Music Player Daemon Project + * (c) 2004-2010 The Music Player Daemon Project * Project homepage: http://musicpd.org * This program is free software; you can redistribute it and/or modify @@ -32,6 +32,7 @@ #include "filelist.h" #include "colors.h" #include "paint.h" +#include "song_paint.h" #include @@ -75,7 +76,7 @@ screen_browser_sync_highlights(struct filelist *fl, /* list_window callback */ static const char * -browser_lw_callback(unsigned idx, bool *highlight, G_GNUC_UNUSED char **second_column, void *data) +browser_lw_callback(unsigned idx, void *data) { const struct filelist *fl = (const struct filelist *) data; static char buf[BUFSIZE]; @@ -89,21 +90,15 @@ browser_lw_callback(unsigned idx, bool *highlight, G_GNUC_UNUSED char **second_c assert(entry != NULL); entity = entry->entity; -#ifndef NCMPC_MINI - *highlight = (entry->flags & HIGHLIGHT) != 0; -#else - *highlight = false; -#endif if( entity == NULL ) - return "[..]"; + return ".."; if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_DIRECTORY) { const struct mpd_directory *dir = mpd_entity_get_directory(entity); char *directory = utf8_to_locale(g_basename(mpd_directory_get_path(dir))); - - g_snprintf(buf, BUFSIZE, "[%s]", directory); + g_strlcpy(buf, directory, sizeof(buf)); g_free(directory); return buf; } else if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_SONG) { @@ -128,16 +123,20 @@ static bool load_playlist(struct mpdclient *c, const struct mpd_playlist *playlist) { struct mpd_connection *connection = mpdclient_get_connection(c); - char *filename = utf8_to_locale(mpd_playlist_get_path(playlist)); + + if (connection == NULL) + return false; if (mpd_run_load(connection, mpd_playlist_get_path(playlist))) { + char *filename = utf8_to_locale(mpd_playlist_get_path(playlist)); screen_status_printf(_("Loading playlist %s..."), g_basename(filename)); + g_free(filename); + c->events |= MPD_IDLE_QUEUE; } else mpdclient_handle_error(c); - g_free(filename); return true; } @@ -313,7 +312,7 @@ browser_handle_select(struct screen_browser *browser, struct mpdclient *c) { struct list_window_range range; struct filelist_entry *entry; - bool success; + bool success = false; list_window_get_range(browser->lw, &range); for (unsigned i = range.start; i < range.end; ++i) { @@ -331,14 +330,15 @@ browser_handle_add(struct screen_browser *browser, struct mpdclient *c) { struct list_window_range range; struct filelist_entry *entry; - bool success; + bool success = false; list_window_get_range(browser->lw, &range); for (unsigned i = range.start; i < range.end; ++i) { entry = browser_get_index(browser, i); if (entry != NULL && entry->entity != NULL) - success = browser_select_entry(c, entry, FALSE); + success = browser_select_entry(c, entry, FALSE) || + success; } return range.end == range.start + 1 && success; @@ -485,7 +485,7 @@ browser_cmd(struct screen_browser *browser, return false; } -static void +void screen_browser_paint_directory(WINDOW *w, unsigned width, bool selected, const char *name) { @@ -499,17 +499,6 @@ screen_browser_paint_directory(WINDOW *w, unsigned width, row_clear_to_eol(w, width, selected); } -static void -screen_browser_paint_song(WINDOW *w, unsigned width, bool selected, - bool highlight, const struct mpd_song *song) -{ - char buffer[width * 4]; - - strfsong(buffer, sizeof(buffer), options.list_format, song); - row_paint_text(w, width, highlight ? COLOR_LIST_BOLD : COLOR_LIST, - selected, buffer); -} - static void screen_browser_paint_playlist(WINDOW *w, unsigned width, bool selected, const char *name) @@ -519,7 +508,7 @@ screen_browser_paint_playlist(WINDOW *w, unsigned width, static void screen_browser_paint_callback(WINDOW *w, unsigned i, - G_GNUC_UNUSED unsigned y, unsigned width, + unsigned y, unsigned width, bool selected, void *data) { const struct filelist *fl = (const struct filelist *) data; @@ -548,11 +537,6 @@ screen_browser_paint_callback(WINDOW *w, unsigned i, highlight = false; #endif - if (highlight) - colors_use(w, COLOR_LIST_BOLD); - else - colors_use(w, COLOR_LIST); - switch (mpd_entity_get_type(entity)) { case MPD_ENTITY_TYPE_DIRECTORY: directory = mpd_entity_get_directory(entity); @@ -562,8 +546,8 @@ screen_browser_paint_callback(WINDOW *w, unsigned i, break; case MPD_ENTITY_TYPE_SONG: - screen_browser_paint_song(w, width, selected, highlight, - mpd_entity_get_song(entity)); + paint_song_row(w, y, width, selected, highlight, + mpd_entity_get_song(entity), NULL); break; case MPD_ENTITY_TYPE_PLAYLIST: @@ -574,13 +558,9 @@ screen_browser_paint_callback(WINDOW *w, unsigned i, break; default: - waddstr(w, ""); + row_paint_text(w, width, highlight ? COLOR_LIST_BOLD : COLOR_LIST, + selected, ""); } - - whline(w, ' ', width); - - if (selected) - wattroff(w, A_REVERSE); } void