diff --git a/src/source_base.cpp b/src/source_base.cpp index 31f065e..5044616 100644 --- a/src/source_base.cpp +++ b/src/source_base.cpp @@ -1213,8 +1213,10 @@ void Source::BaseView::setup_extra_cursor_signals() { clear_snippet_marks(); if(is_insert) { - if(enable_multiple_cursors) { - enable_multiple_cursors = false; + if(enable_multiple_cursors || enable_multiple_cursors_placements) { + auto set_enable_multiple_cursors = enable_multiple_cursors; + if(set_enable_multiple_cursors) + enable_multiple_cursors = false; auto offset_diff = mark->get_iter().get_offset() - last_insert->get_iter().get_offset(); if(offset_diff != 0) { for(auto &extra_cursor : extra_cursors) { @@ -1224,14 +1226,17 @@ void Source::BaseView::setup_extra_cursor_signals() { extra_cursor.line_offset = iter.get_line_offset(); } } - enable_multiple_cursors = true; + if(set_enable_multiple_cursors) + enable_multiple_cursors = true; } get_buffer()->move_mark(last_insert, mark->get_iter()); } if(mark->get_name() == "selection_bound") { - if(enable_multiple_cursors) { - enable_multiple_cursors = false; + if(enable_multiple_cursors || enable_multiple_cursors_placements) { + auto set_enable_multiple_cursors = enable_multiple_cursors; + if(set_enable_multiple_cursors) + enable_multiple_cursors = false; auto offset_diff = mark->get_iter().get_offset() - last_selection_bound->get_iter().get_offset(); if(offset_diff != 0) { for(auto &extra_cursor : extra_cursors) { @@ -1241,7 +1246,8 @@ void Source::BaseView::setup_extra_cursor_signals() { extra_cursor.move_selection_bound(iter); } } - enable_multiple_cursors = true; + if(set_enable_multiple_cursors) + enable_multiple_cursors = true; } get_buffer()->move_mark(last_selection_bound, mark->get_iter()); } diff --git a/src/source_base.hpp b/src/source_base.hpp index 52fd465..fb596b9 100644 --- a/src/source_base.hpp +++ b/src/source_base.hpp @@ -141,6 +141,11 @@ namespace Source { void cleanup_whitespace_characters(const Gtk::TextIter &iter); bool enable_multiple_cursors = false; + + public: + bool enable_multiple_cursors_placements = false; + + protected: Glib::RefPtr extra_cursor_selection; bool on_key_press_event(GdkEventKey *key) override; diff --git a/src/window.cpp b/src/window.cpp index 9beafcf..676b21f 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -543,8 +543,10 @@ void Window::set_menu_actions() { auto undo_manager = view->get_source_buffer()->get_undo_manager(); if(undo_manager->can_undo()) { view->disable_spellcheck = true; + view->enable_multiple_cursors_placements = true; undo_manager->undo(); view->disable_spellcheck = false; + view->enable_multiple_cursors_placements = false; view->hide_tooltips(); view->scroll_to(view->get_buffer()->get_insert()); } @@ -555,8 +557,10 @@ void Window::set_menu_actions() { auto undo_manager = view->get_source_buffer()->get_undo_manager(); if(undo_manager->can_redo()) { view->disable_spellcheck = true; + view->enable_multiple_cursors_placements = true; undo_manager->redo(); view->disable_spellcheck = false; + view->enable_multiple_cursors_placements = false; view->hide_tooltips(); view->scroll_to(view->get_buffer()->get_insert()); }