Browse Source

Tooltip and completiondialog cleanup

merge-requests/365/head
eidheim 10 years ago
parent
commit
6f47300607
  1. 2
      .gitignore
  2. 20
      src/selectiondialog.cc
  3. 2
      src/selectiondialog.h
  4. 18
      src/source_clang.cc
  5. 2
      src/source_clang.h

2
.gitignore vendored

@ -10,3 +10,5 @@
!CMakeLists.txt !CMakeLists.txt
!config.json !config.json
!*.py !*.py
build

20
src/selectiondialog.cc

@ -96,6 +96,9 @@ void SelectionDialogBase::show() {
shown=true; shown=true;
move(); move();
window->show_all(); window->show_all();
if(list_view_text.get_model()->children().size()>0)
list_view_text.set_cursor(list_view_text.get_model()->get_path(list_view_text.get_model()->children().begin()));
} }
void SelectionDialogBase::hide() { void SelectionDialogBase::hide() {
@ -143,10 +146,7 @@ void SelectionDialogBase::resize() {
} }
} }
SelectionDialog::SelectionDialog(Gtk::TextView& text_view, Glib::RefPtr<Gtk::TextBuffer::Mark> start_mark, bool show_search_entry, bool use_markup) : SelectionDialogBase(text_view, start_mark, show_search_entry, use_markup) {} SelectionDialog::SelectionDialog(Gtk::TextView& text_view, Glib::RefPtr<Gtk::TextBuffer::Mark> start_mark, bool show_search_entry, bool use_markup) : SelectionDialogBase(text_view, start_mark, show_search_entry, use_markup) {
void SelectionDialog::show() {
SelectionDialogBase::show();
std::shared_ptr<std::string> search_key(new std::string()); std::shared_ptr<std::string> search_key(new std::string());
auto filter_model=Gtk::TreeModelFilter::create(list_view_text.get_model()); auto filter_model=Gtk::TreeModelFilter::create(list_view_text.get_model());
@ -240,9 +240,6 @@ void SelectionDialog::show() {
hide(); hide();
return true; return true;
}); });
if(list_view_text.get_model()->children().size()>0)
list_view_text.set_cursor(list_view_text.get_model()->get_path(list_view_text.get_model()->children().begin()));
} }
bool SelectionDialog::on_key_press(GdkEventKey* key) { bool SelectionDialog::on_key_press(GdkEventKey* key) {
@ -286,11 +283,7 @@ bool SelectionDialog::on_key_press(GdkEventKey* key) {
return false; return false;
} }
CompletionDialog::CompletionDialog(Gtk::TextView& text_view, Glib::RefPtr<Gtk::TextBuffer::Mark> start_mark) : SelectionDialogBase(text_view, start_mark, false, false) {} CompletionDialog::CompletionDialog(Gtk::TextView& text_view, Glib::RefPtr<Gtk::TextBuffer::Mark> start_mark) : SelectionDialogBase(text_view, start_mark, false, false) {
void CompletionDialog::show() {
SelectionDialogBase::show();
show_offset=text_view.get_buffer()->get_insert()->get_iter().get_offset(); show_offset=text_view.get_buffer()->get_insert()->get_iter().get_offset();
std::shared_ptr<std::string> search_key(new std::string()); std::shared_ptr<std::string> search_key(new std::string());
@ -332,9 +325,6 @@ void CompletionDialog::show() {
search_entry.set_text(text); search_entry.set_text(text);
list_view_text.set_search_entry(search_entry); list_view_text.set_search_entry(search_entry);
} }
if(list_view_text.get_model()->children().size()>0)
list_view_text.set_cursor(list_view_text.get_model()->get_path(list_view_text.get_model()->children().begin()));
} }
void CompletionDialog::select(bool hide_window) { void CompletionDialog::select(bool hide_window) {

2
src/selectiondialog.h

@ -56,13 +56,11 @@ class SelectionDialog : public SelectionDialogBase {
public: public:
SelectionDialog(Gtk::TextView& text_view, Glib::RefPtr<Gtk::TextBuffer::Mark> start_mark, bool show_search_entry=true, bool use_markup=false); SelectionDialog(Gtk::TextView& text_view, Glib::RefPtr<Gtk::TextBuffer::Mark> start_mark, bool show_search_entry=true, bool use_markup=false);
bool on_key_press(GdkEventKey* key); bool on_key_press(GdkEventKey* key);
void show();
}; };
class CompletionDialog : public SelectionDialogBase { class CompletionDialog : public SelectionDialogBase {
public: public:
CompletionDialog(Gtk::TextView& text_view, Glib::RefPtr<Gtk::TextBuffer::Mark> start_mark); CompletionDialog(Gtk::TextView& text_view, Glib::RefPtr<Gtk::TextBuffer::Mark> start_mark);
void show();
bool on_key_release(GdkEventKey* key); bool on_key_release(GdkEventKey* key);
bool on_key_press(GdkEventKey* key); bool on_key_press(GdkEventKey* key);

18
src/source_clang.cc

@ -795,10 +795,8 @@ void Source::ClangViewAutocomplete::autocomplete_dialog_setup() {
autocomplete_dialog_rows.clear(); autocomplete_dialog_rows.clear();
autocomplete_dialog->on_hide=[this](){ autocomplete_dialog->on_hide=[this](){
get_source_buffer()->end_user_action(); get_source_buffer()->end_user_action();
if(autocomplete_tooltips) { autocomplete_tooltips.hide();
autocomplete_tooltips->hide(); autocomplete_tooltips.clear();
autocomplete_tooltips.reset();
}
parsed=false; parsed=false;
soft_reparse(); soft_reparse();
}; };
@ -855,17 +853,15 @@ void Source::ClangViewAutocomplete::autocomplete_dialog_setup() {
autocomplete_dialog->on_changed=[this](const std::string &selected) { autocomplete_dialog->on_changed=[this](const std::string &selected) {
if(selected.empty()) { if(selected.empty()) {
if(autocomplete_tooltips) autocomplete_tooltips.hide();
autocomplete_tooltips->hide();
return; return;
} }
auto tooltip=std::make_shared<std::string>(autocomplete_dialog_rows.at(selected).second); auto tooltip=std::make_shared<std::string>(autocomplete_dialog_rows.at(selected).second);
if(tooltip->empty()) { if(tooltip->empty()) {
if(autocomplete_tooltips) autocomplete_tooltips.hide();
autocomplete_tooltips->hide();
} }
else { else {
autocomplete_tooltips=std::unique_ptr<Tooltips>(new Tooltips()); autocomplete_tooltips.clear();
auto create_tooltip_buffer=[this, tooltip]() { auto create_tooltip_buffer=[this, tooltip]() {
auto tooltip_buffer=Gtk::TextBuffer::create(get_buffer()->get_tag_table()); auto tooltip_buffer=Gtk::TextBuffer::create(get_buffer()->get_tag_table());
@ -875,9 +871,9 @@ void Source::ClangViewAutocomplete::autocomplete_dialog_setup() {
}; };
auto iter=autocomplete_dialog->start_mark->get_iter(); auto iter=autocomplete_dialog->start_mark->get_iter();
autocomplete_tooltips->emplace_back(create_tooltip_buffer, *this, get_buffer()->create_mark(iter), get_buffer()->create_mark(iter)); autocomplete_tooltips.emplace_back(create_tooltip_buffer, *this, get_buffer()->create_mark(iter), get_buffer()->create_mark(iter));
autocomplete_tooltips->show(true); autocomplete_tooltips.show(true);
} }
}; };
} }

2
src/source_clang.h

@ -103,7 +103,7 @@ namespace Source {
std::vector<AutoCompleteData> autocomplete_data; std::vector<AutoCompleteData> autocomplete_data;
std::unordered_map<std::string, std::pair<std::string, std::string> > autocomplete_dialog_rows; std::unordered_map<std::string, std::pair<std::string, std::string> > autocomplete_dialog_rows;
std::vector<AutoCompleteData> autocomplete_get_suggestions(const std::string &buffer, int line_number, int column); std::vector<AutoCompleteData> autocomplete_get_suggestions(const std::string &buffer, int line_number, int column);
std::unique_ptr<Tooltips> autocomplete_tooltips; Tooltips autocomplete_tooltips;
Glib::Dispatcher autocomplete_done; Glib::Dispatcher autocomplete_done;
Glib::Dispatcher autocomplete_restart; Glib::Dispatcher autocomplete_restart;
Glib::Dispatcher autocomplete_error; Glib::Dispatcher autocomplete_error;

Loading…
Cancel
Save