Code

Update copyright notices
[ncmpc.git] / src / screen_browser.c
index 8802e5f93bb1eab29ed8d8ace445048a8fea495f..49827647d6e8f0898032fbad629c3b69b6e3a6e9 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
@@ -99,6 +99,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);
@@ -123,6 +124,9 @@ load_playlist(struct mpdclient *c, const struct mpd_playlist *playlist)
 {
        struct mpd_connection *connection = mpdclient_get_connection(c);
 
+       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..."),
@@ -308,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) {
@@ -326,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;
@@ -480,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)
 {
@@ -532,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);
@@ -547,7 +547,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:
@@ -558,13 +558,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