diff options
| author | Maxime Coste <frrrwww@gmail.com> | 2012-12-11 19:51:59 +0100 |
|---|---|---|
| committer | Maxime Coste <frrrwww@gmail.com> | 2012-12-13 18:50:27 +0100 |
| commit | cfd7ee049a7c668bb2269029d159b34d2014ece6 (patch) | |
| tree | dc8d3eef1af8318acde758de012db858d4c36e30 /src/editor.cc | |
| parent | e36bc74f431e2f98f049724536da86af9051811d (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.cc | 15 |
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; } |
