From bd3c30fabae6431bb6187c6c9e9d94f04a345f63 Mon Sep 17 00:00:00 2001 From: eidheim Date: Wed, 13 Jan 2016 11:55:23 +0100 Subject: [PATCH] Get iter for dialog positioning cleanup --- src/source.cc | 15 +++++++++++++++ src/source.h | 1 + src/source_clang.cc | 12 +----------- src/window.cc | 42 +++++------------------------------------- 4 files changed, 22 insertions(+), 48 deletions(-) diff --git a/src/source.cc b/src/source.cc index 4706a6c..05381cd 100644 --- a/src/source.cc +++ b/src/source.cc @@ -682,6 +682,21 @@ void Source::View::paste() { } } +Gtk::TextIter Source::View::get_iter_for_dialog() { + auto iter=get_buffer()->get_insert()->get_iter(); + if(iter.get_line_offset()>=80) + iter=get_buffer()->get_iter_at_line(iter.get_line()); + Gdk::Rectangle visible_rect; + get_visible_rect(visible_rect); + Gdk::Rectangle iter_rect; + get_iter_location(iter, iter_rect); + iter_rect.set_width(1); + if(!visible_rect.intersects(iter_rect)) { + get_iter_at_location(iter, 0, visible_rect.get_y()+visible_rect.get_height()/3); + } + return iter; +} + void Source::View::set_status(const std::string &status) { this->status=status; if(on_update_status) diff --git a/src/source.h b/src/source.h index 35d6c98..b060e8b 100644 --- a/src/source.h +++ b/src/source.h @@ -87,6 +87,7 @@ namespace Source { std::unique_ptr autocomplete_dialog; std::unique_ptr selection_dialog; + Gtk::TextIter get_iter_for_dialog(); sigc::connection delayed_tooltips_connection; std::function on_update_status; diff --git a/src/source_clang.cc b/src/source_clang.cc index 785248e..e698e38 100644 --- a/src/source_clang.cc +++ b/src/source_clang.cc @@ -1209,17 +1209,7 @@ Source::ClangViewAutocomplete(file_path, project_path, language) { goto_method=[this](){ if(parsed) { - auto iter=get_buffer()->get_insert()->get_iter(); - if(iter.get_line_offset()>=80) - iter=get_buffer()->get_iter_at_line(iter.get_line()); - Gdk::Rectangle visible_rect; - get_visible_rect(visible_rect); - Gdk::Rectangle iter_rect; - get_iter_location(iter, iter_rect); - iter_rect.set_width(1); - if(!visible_rect.intersects(iter_rect)) { - get_iter_at_location(iter, 0, visible_rect.get_y()+visible_rect.get_height()/3); - } + auto iter=get_iter_for_dialog(); selection_dialog=std::unique_ptr(new SelectionDialog(*this, get_buffer()->create_mark(iter), true, true)); auto rows=std::make_shared >(); auto methods=clang_tokens->get_cxx_methods(); diff --git a/src/window.cc b/src/window.cc index 531cc3e..ba97259 100644 --- a/src/window.cc +++ b/src/window.cc @@ -516,17 +516,7 @@ void Window::set_menu_actions() { if(current_view->get_token && current_view->get_usages) { auto token=current_view->get_token(); if(token) { - auto iter=current_view->get_buffer()->get_insert()->get_iter(); - if(iter.get_line_offset()>=80) - iter=current_view->get_buffer()->get_iter_at_line(iter.get_line()); - Gdk::Rectangle visible_rect; - current_view->get_visible_rect(visible_rect); - Gdk::Rectangle iter_rect; - current_view->get_iter_location(iter, iter_rect); - iter_rect.set_width(1); - if(!visible_rect.intersects(iter_rect)) { - current_view->get_iter_at_location(iter, 0, visible_rect.get_y()+visible_rect.get_height()/3); - } + auto iter=current_view->get_iter_for_dialog(); current_view->selection_dialog=std::unique_ptr(new SelectionDialog(*current_view, current_view->get_buffer()->create_mark(iter), true, true)); auto rows=std::make_shared >(); @@ -901,19 +891,8 @@ void Window::set_menu_actions() { auto backtrace=Debug::get().get_backtrace(); auto view=notebook.get_current_view(); - auto buffer=view->get_buffer(); - auto iter=buffer->get_insert()->get_iter(); - if(iter.get_line_offset()>=80) - iter=buffer->get_iter_at_line(iter.get_line()); - Gdk::Rectangle visible_rect; - view->get_visible_rect(visible_rect); - Gdk::Rectangle iter_rect; - view->get_iter_location(iter, iter_rect); - iter_rect.set_width(1); - if(!visible_rect.intersects(iter_rect)) { - view->get_iter_at_location(iter, 0, visible_rect.get_y()+visible_rect.get_height()/3); - } - view->selection_dialog=std::unique_ptr(new SelectionDialog(*view, buffer->create_mark(iter), true, true)); + auto iter=view->get_iter_for_dialog(); + view->selection_dialog=std::unique_ptr(new SelectionDialog(*view, view->get_buffer()->create_mark(iter), true, true)); auto rows=std::make_shared >(); if(backtrace.size()==0) return; @@ -961,19 +940,8 @@ void Window::set_menu_actions() { auto variables=Debug::get().get_variables(); auto view=notebook.get_current_view(); - auto buffer=view->get_buffer(); - auto iter=buffer->get_insert()->get_iter(); - if(iter.get_line_offset()>=80) - iter=buffer->get_iter_at_line(iter.get_line()); - Gdk::Rectangle visible_rect; - view->get_visible_rect(visible_rect); - Gdk::Rectangle iter_rect; - view->get_iter_location(iter, iter_rect); - iter_rect.set_width(1); - if(!visible_rect.intersects(iter_rect)) { - view->get_iter_at_location(iter, 0, visible_rect.get_y()+visible_rect.get_height()/3); - } - view->selection_dialog=std::unique_ptr(new SelectionDialog(*view, buffer->create_mark(iter), true, true)); + auto iter=view->get_iter_for_dialog(); + view->selection_dialog=std::unique_ptr(new SelectionDialog(*view, view->get_buffer()->create_mark(iter), true, true)); auto rows=std::make_shared >(); if(variables.size()==0) return;