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(); clear_snippet_marks();
if(is_insert) { if(is_insert) {
if(enable_multiple_cursors) { if(enable_multiple_cursors || enable_multiple_cursors_placements) {
enable_multiple_cursors = false; 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(); auto offset_diff = mark->get_iter().get_offset() - last_insert->get_iter().get_offset();
if(offset_diff != 0) { if(offset_diff != 0) {
for(auto &extra_cursor : extra_cursors) { 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(); 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()); get_buffer()->move_mark(last_insert, mark->get_iter());
} }
if(mark->get_name() == "selection_bound") { if(mark->get_name() == "selection_bound") {
if(enable_multiple_cursors) { if(enable_multiple_cursors || enable_multiple_cursors_placements) {
enable_multiple_cursors = false; 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(); auto offset_diff = mark->get_iter().get_offset() - last_selection_bound->get_iter().get_offset();
if(offset_diff != 0) { if(offset_diff != 0) {
for(auto &extra_cursor : extra_cursors) { for(auto &extra_cursor : extra_cursors) {
@ -1241,7 +1246,8 @@ void Source::BaseView::setup_extra_cursor_signals() {
extra_cursor.move_selection_bound(iter); 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()); 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); void cleanup_whitespace_characters(const Gtk::TextIter &iter);
bool enable_multiple_cursors = false; bool enable_multiple_cursors = false;
public:
bool enable_multiple_cursors_placements = false;
protected:
Glib::RefPtr<Gtk::TextTag> extra_cursor_selection; Glib::RefPtr<Gtk::TextTag> extra_cursor_selection;
bool on_key_press_event(GdkEventKey *key) override; 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(); auto undo_manager = view->get_source_buffer()->get_undo_manager();
if(undo_manager->can_undo()) { if(undo_manager->can_undo()) {
view->disable_spellcheck = true; view->disable_spellcheck = true;
view->enable_multiple_cursors_placements = true;
undo_manager->undo(); undo_manager->undo();
view->disable_spellcheck = false; view->disable_spellcheck = false;
view->enable_multiple_cursors_placements = false;
view->hide_tooltips(); view->hide_tooltips();
view->scroll_to(view->get_buffer()->get_insert()); 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(); auto undo_manager = view->get_source_buffer()->get_undo_manager();
if(undo_manager->can_redo()) { if(undo_manager->can_redo()) {
view->disable_spellcheck = true; view->disable_spellcheck = true;
view->enable_multiple_cursors_placements = true;
undo_manager->redo(); undo_manager->redo();
view->disable_spellcheck = false; view->disable_spellcheck = false;
view->enable_multiple_cursors_placements = false;
view->hide_tooltips(); view->hide_tooltips();
view->scroll_to(view->get_buffer()->get_insert()); view->scroll_to(view->get_buffer()->get_insert());
} }

Loading…
Cancel
Save