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>
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user