Fix moveSelectedItemsTo for filtered lists
This commit is contained in:
@@ -290,18 +290,18 @@ void moveSelectedItemsDown(NC::Menu<MPD::Song> &m, F swap_fun)
|
||||
}
|
||||
|
||||
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 = &m.current()->value();
|
||||
auto cur_ptr = &menu.current()->value();
|
||||
ScopedUnfilteredMenu<MPD::Song> sunfilter(ReapplyFilter::No, menu);
|
||||
// this is kinda shitty, but there is no other way to know
|
||||
// what position current item has in unfiltered menu.
|
||||
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)
|
||||
break;
|
||||
auto begin = m.begin();
|
||||
auto list = getSelected(m.begin(), m.end());
|
||||
auto begin = menu.begin();
|
||||
auto list = getSelected(menu.begin(), menu.end());
|
||||
// we move only truly selected items
|
||||
if (list.empty())
|
||||
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)
|
||||
{
|
||||
(*it)->setSelected(false);
|
||||
m[pos+i].setSelected(true);
|
||||
menu[pos+i].setSelected(true);
|
||||
}
|
||||
}
|
||||
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)
|
||||
{
|
||||
(*it)->setSelected(false);
|
||||
m[pos+i].setSelected(true);
|
||||
menu[pos+i].setSelected(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user