Fix moveSelectedItemsTo for filtered lists

This commit is contained in:
Andrzej Rybczak
2016-11-13 08:50:20 +01:00
parent e650b145df
commit 40163dedaa

View File

@@ -290,18 +290,18 @@ void moveSelectedItemsDown(NC::Menu<MPD::Song> &m, F swap_fun)
} }
template <typename F> template <typename F>
void moveSelectedItemsTo(NC::Menu<MPD::Song> &m, F move_fun) void moveSelectedItemsTo(NC::Menu<MPD::Song> &menu, F &&move_fun)
{ {
// FIXME: make it not look like shit auto cur_ptr = &menu.current()->value();
auto cur_ptr = &m.current()->value(); ScopedUnfilteredMenu<MPD::Song> sunfilter(ReapplyFilter::No, menu);
// this is kinda shitty, but there is no other way to know // this is kinda shitty, but there is no other way to know
// what position current item has in unfiltered menu. // what position current item has in unfiltered menu.
ptrdiff_t pos = 0; ptrdiff_t pos = 0;
for (auto it = m.begin(); it != m.end(); ++it, ++pos) for (auto it = menu.begin(); it != menu.end(); ++it, ++pos)
if (&it->value() == cur_ptr) if (&it->value() == cur_ptr)
break; break;
auto begin = m.begin(); auto begin = menu.begin();
auto list = getSelected(m.begin(), m.end()); auto list = getSelected(menu.begin(), menu.end());
// we move only truly selected items // we move only truly selected items
if (list.empty()) if (list.empty())
return; return;
@@ -322,7 +322,7 @@ void moveSelectedItemsTo(NC::Menu<MPD::Song> &m, F move_fun)
for (auto it = list.rbegin(); it != list.rend(); ++it, --i) for (auto it = list.rbegin(); it != list.rend(); ++it, --i)
{ {
(*it)->setSelected(false); (*it)->setSelected(false);
m[pos+i].setSelected(true); menu[pos+i].setSelected(true);
} }
} }
else if (diff < 0) // move up else if (diff < 0) // move up
@@ -335,7 +335,7 @@ void moveSelectedItemsTo(NC::Menu<MPD::Song> &m, F move_fun)
for (auto it = list.begin(); it != list.end(); ++it, ++i) for (auto it = list.begin(); it != list.end(); ++it, ++i)
{ {
(*it)->setSelected(false); (*it)->setSelected(false);
m[pos+i].setSelected(true); menu[pos+i].setSelected(true);
} }
} }
} }