summaryrefslogtreecommitdiff
path: root/src/editor.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2012-12-11 19:51:59 +0100
committerMaxime Coste <frrrwww@gmail.com>2012-12-13 18:50:27 +0100
commitcfd7ee049a7c668bb2269029d159b34d2014ece6 (patch)
treedc8d3eef1af8318acde758de012db858d4c36e30 /src/editor.cc
parente36bc74f431e2f98f049724536da86af9051811d (diff)
move selection updating code out of selection, to DynamicSelectionList
this avoids a lot of unnecessary (add|remove)_change_listener as creating temporary Selections do not call that anymore. Use can choose between a SelectionList which or a DynamicSelectionList depending on wethear the buffer will be modified or not during the selections lifetime.
Diffstat (limited to 'src/editor.cc')
-rw-r--r--src/editor.cc15
1 files changed, 8 insertions, 7 deletions
diff --git a/src/editor.cc b/src/editor.cc
index 1817ac63..554dd327 100644
--- a/src/editor.cc
+++ b/src/editor.cc
@@ -14,7 +14,8 @@ namespace Kakoune
Editor::Editor(Buffer& buffer)
: m_buffer(&buffer),
- m_edition_level(0)
+ m_edition_level(0),
+ m_selections(buffer)
{
m_selections.push_back(Selection(buffer.begin(), buffer.begin()));
}
@@ -118,7 +119,7 @@ std::vector<String> Editor::selections_content() const
return contents;
}
-static void merge_overlapping(SelectionList& selections)
+static void merge_overlapping(DynamicSelectionList& selections)
{
for (size_t i = 0; i < selections.size(); ++i)
{
@@ -214,7 +215,7 @@ void Editor::select(SelectionList selections)
{
if (selections.empty())
throw runtime_error("no selections");
- m_selections = std::move(selections);
+ m_selections.reset(std::move(selections));
}
void Editor::select(const Selector& selector, SelectMode mode)
@@ -272,8 +273,8 @@ void Editor::multi_select(const MultiSelector& selector)
if (new_selections.empty())
throw nothing_selected();
- merge_overlapping(new_selections);
- m_selections = std::move(new_selections);
+ m_selections.reset(std::move(new_selections));
+ merge_overlapping(m_selections);
}
class LastModifiedRangeListener : public BufferChangeListener
@@ -316,7 +317,7 @@ bool Editor::undo()
if (res)
{
m_selections.clear();
- m_selections.emplace_back(listener.first(), listener.last());
+ m_selections.push_back({listener.first(), listener.last()});
}
return res;
}
@@ -328,7 +329,7 @@ bool Editor::redo()
if (res)
{
m_selections.clear();
- m_selections.emplace_back(listener.first(), listener.last());
+ m_selections.push_back({listener.first(), listener.last()});
}
return res;
}