Code

configure.ac: disable -Wdeclaration-after-statement
[ncmpc.git] / src / screen_browser.c
index 45b782a079378b5d2c3fbe84cae10e211c727fd2..45e11ebcfb4ca679345152cb445822606848c3db 100644 (file)
@@ -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
@@ -17,6 +17,7 @@
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
 
+#include "config.h"
 #include "screen_browser.h"
 #include "screen_file.h"
 #include "screen_song.h"
@@ -44,8 +45,6 @@
 #define HIGHLIGHT  (0x01)
 #endif
 
-static const char playlist_format[] = "*%s*";
-
 #ifndef NCMPC_MINI
 
 /* sync highlight flags with playlist */
@@ -99,6 +98,7 @@ browser_lw_callback(unsigned idx, void *data)
                        mpd_entity_get_directory(entity);
                char *directory = utf8_to_locale(g_basename(mpd_directory_get_path(dir)));
                g_strlcpy(buf, directory, sizeof(buf));
+               g_free(directory);
                return buf;
        } else if (mpd_entity_get_type(entity) == MPD_ENTITY_TYPE_SONG) {
                const struct mpd_song *song = mpd_entity_get_song(entity);
@@ -110,7 +110,7 @@ browser_lw_callback(unsigned idx, void *data)
                        mpd_entity_get_playlist(entity);
                char *filename = utf8_to_locale(g_basename(mpd_playlist_get_path(playlist)));
 
-               g_snprintf(buf, BUFSIZE, playlist_format, filename);
+               g_strlcpy(buf, filename, sizeof(buf));
                g_free(filename);
                return buf;
        }
@@ -311,7 +311,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) {
@@ -329,14 +329,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;
@@ -483,7 +484,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)
 {
@@ -535,11 +536,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);
@@ -550,7 +546,7 @@ screen_browser_paint_callback(WINDOW *w, unsigned i,
 
        case MPD_ENTITY_TYPE_SONG:
                paint_song_row(w, y, width, selected, highlight,
-                              mpd_entity_get_song(entity));
+                              mpd_entity_get_song(entity), NULL);
                break;
 
        case MPD_ENTITY_TYPE_PLAYLIST:
@@ -561,13 +557,9 @@ screen_browser_paint_callback(WINDOW *w, unsigned i,
                break;
 
        default:
-               waddstr(w, "<unknown>");
+               row_paint_text(w, width, highlight ? COLOR_LIST_BOLD : COLOR_LIST,
+                              selected, "<unknown>");
        }
-
-       whline(w, ' ', width);
-
-       if (selected)
-               wattroff(w, A_REVERSE);
 }
 
 void