diff --git a/src/screen_browser.c b/src/screen_browser.c
index b118a7ec3c7e457a2350e60583beaacaff04ea58..29dd4bfa49f3865f524e6ae98e55a6fd1aac8853 100644 (file)
--- a/src/screen_browser.c
+++ b/src/screen_browser.c
/* ncmpc (Ncurses MPD Client)
* (c) 2004-2009 The Music Player Daemon Project
* Project homepage: http://musicpd.org
-
+
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
return filelist_get(browser->filelist, browser->lw->selected);
}
+static struct filelist_entry *
+browser_get_index(const struct screen_browser *browser, unsigned i)
+{
+ if (browser->filelist == NULL ||
+ i >= filelist_length(browser->filelist))
+ return NULL;
+
+ return filelist_get(browser->filelist, i);
+}
+
static bool
browser_handle_enter(struct screen_browser *browser, mpdclient_t *c)
{
struct filelist_entry *entry = browser_get_selected(browser);
mpd_InfoEntity *entity;
- if( entry==NULL )
+ if( entry==NULL || browser->lw->selected_start < browser->lw->selected_end)
return false;
entity = entry->entity;
static bool
browser_handle_select(struct screen_browser *browser, mpdclient_t *c)
{
- struct filelist_entry *entry = browser_get_selected(browser);
+ struct filelist_entry *entry;
+
+ if (browser->lw->range_selection) {
+ for (unsigned i = browser->lw->selected_start;
+ i <= browser->lw->selected_end; i++) {
+ entry = browser_get_index(browser, i);
- if (entry == NULL || entry->entity == NULL)
+ if (entry != NULL && entry->entity != NULL)
+ browser_select_entry(c, entry, TRUE);
+ }
return false;
+ } else {
+ entry = browser_get_selected(browser);
- return browser_select_entry(c, entry, TRUE);
+ if (entry == NULL || entry->entity == NULL)
+ return false;
+
+ return browser_select_entry(c, entry, TRUE);
+ }
}
static bool
browser_handle_add(struct screen_browser *browser, mpdclient_t *c)
{
- struct filelist_entry *entry = browser_get_selected(browser);
+ struct filelist_entry *entry;
+
+ if (browser->lw->range_selection) {
+ for (unsigned i = browser->lw->selected_start;
+ i <= browser->lw->selected_end; i++) {
+ entry = browser_get_index(browser, i);
- if (entry == NULL || entry->entity == NULL)
+ if (entry != NULL && entry->entity != NULL)
+ browser_select_entry(c, entry, FALSE);
+ }
return false;
+ } else {
+ entry = browser_get_selected(browser);
+
+ if (entry == NULL || entry->entity == NULL)
+ return false;
- return browser_select_entry(c, entry, FALSE);
+ return browser_select_entry(c, entry, FALSE);
+ }
}
static void
screen_lyrics_switch(c, entry->entity->info.song);
return true;
#endif
+ case CMD_SCREEN_SWAP:
+ entry = browser_get_selected(browser);
+ if (entry->entity != NULL &&
+ entry->entity->type == MPD_INFO_ENTITY_TYPE_SONG)
+ screen_swap(c, entry->entity->info.song);
+ else
+ screen_swap(c, NULL);
+ return true;
default:
break;