From 40163dedaa88767ae3843eb10150206baeef390f Mon Sep 17 00:00:00 2001 From: Andrzej Rybczak Date: Sun, 13 Nov 2016 08:50:20 +0100 Subject: [PATCH] Fix moveSelectedItemsTo for filtered lists --- src/helpers.h | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/helpers.h b/src/helpers.h index a91d69a0..1b2ae628 100644 --- a/src/helpers.h +++ b/src/helpers.h @@ -290,18 +290,18 @@ void moveSelectedItemsDown(NC::Menu &m, F swap_fun) } template -void moveSelectedItemsTo(NC::Menu &m, F move_fun) +void moveSelectedItemsTo(NC::Menu &menu, F &&move_fun) { - // FIXME: make it not look like shit - auto cur_ptr = &m.current()->value(); + auto cur_ptr = &menu.current()->value(); + ScopedUnfilteredMenu 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 &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 &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); } } }