Browse Source

Improved multiple cursor placements after undo or redo

pipelines/235045657
eidheim 6 years ago
parent
commit
816418db40
  1. 18
      src/source_base.cpp
  2. 5
      src/source_base.hpp
  3. 4
      src/window.cpp

18
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());
}

5
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<Gtk::TextTag> extra_cursor_selection;
bool on_key_press_event(GdkEventKey *key) override;

4
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());
}

Loading…
Cancel
Save