Add Context::set_selections(std::vector<Selection>)

This methods avoids updating the context selection needlessly as
they are going to get replaced anyway.
This commit is contained in:
Maxime Coste 2014-06-01 16:01:38 +01:00
parent 1b30c0f4fb
commit a5e028e1b1
3 changed files with 10 additions and 4 deletions

View File

@ -202,6 +202,11 @@ std::vector<String> Context::selections_content() const
return contents; return contents;
} }
void Context::set_selections(std::vector<Selection> sels)
{
*m_selections = std::move(sels);
}
void Context::begin_edition() void Context::begin_edition()
{ {
if (m_edition_level >= 0) if (m_edition_level >= 0)

View File

@ -51,6 +51,7 @@ public:
SelectionList& selections(); SelectionList& selections();
const SelectionList& selections() const; const SelectionList& selections() const;
std::vector<String> selections_content() const; std::vector<String> selections_content() const;
void set_selections(std::vector<Selection> sels);
void change_buffer(Buffer& buffer); void change_buffer(Buffer& buffer);

View File

@ -725,7 +725,7 @@ void keep(Context& context, int)
} }
if (keep.empty()) if (keep.empty())
throw runtime_error("no selections remaining"); throw runtime_error("no selections remaining");
context.selections() = std::move(keep); context.set_selections(std::move(keep));
}); });
} }
@ -749,7 +749,7 @@ void keep_pipe(Context& context, int)
} }
if (keep.empty()) if (keep.empty())
throw runtime_error("no selections remaining"); throw runtime_error("no selections remaining");
context.selections() = std::move(keep); context.set_selections(std::move(keep));
}); });
} }
template<bool indent_empty = false> template<bool indent_empty = false>
@ -1213,7 +1213,7 @@ void undo(Context& context, int)
{ {
auto ranges = compute_modified_ranges(buffer, timestamp); auto ranges = compute_modified_ranges(buffer, timestamp);
if (not ranges.empty()) if (not ranges.empty())
context.selections() = std::move(ranges); context.set_selections(std::move(ranges));
} }
else if (not res) else if (not res)
context.print_status({ "nothing left to undo", get_color("Information") }); context.print_status({ "nothing left to undo", get_color("Information") });
@ -1229,7 +1229,7 @@ void redo(Context& context, int)
{ {
auto ranges = compute_modified_ranges(buffer, timestamp); auto ranges = compute_modified_ranges(buffer, timestamp);
if (not ranges.empty()) if (not ranges.empty())
context.selections() = std::move(ranges); context.set_selections(std::move(ranges));
} }
else if (not res) else if (not res)