From 6aee69b3988118c99937c1de38af5dfa3315293f Mon Sep 17 00:00:00 2001 From: eidheim Date: Wed, 23 Dec 2015 10:38:33 +0100 Subject: [PATCH 1/4] Minor cleanup of selectiondialog.* --- src/selectiondialog.cc | 13 +++++++------ src/selectiondialog.h | 1 - src/source.cc | 18 +++++++++--------- 3 files changed, 16 insertions(+), 16 deletions(-) diff --git a/src/selectiondialog.cc b/src/selectiondialog.cc index 4ad73ca..12cf580 100644 --- a/src/selectiondialog.cc +++ b/src/selectiondialog.cc @@ -31,6 +31,10 @@ ListViewText::ListViewText(bool use_markup) : Gtk::TreeView(), use_markup(use_ma set_activate_on_single_click(true); set_hover_selection(false); set_rules_hint(true); + + signal_hide().connect([this]() { + list_store->clear(); + }); } void ListViewText::append(const std::string& value) { @@ -38,11 +42,6 @@ void ListViewText::append(const std::string& value) { new_row->set_value(column_record.text, value); } -void ListViewText::hide() { - Gtk::TreeView::hide(); - list_store->clear(); -} - SelectionDialogBase::SelectionDialogBase(Gtk::TextView& text_view, Glib::RefPtr start_mark, bool show_search_entry, bool use_markup): text_view(text_view), list_view_text(use_markup), start_mark(start_mark), show_search_entry(show_search_entry) { if(!show_search_entry) @@ -101,10 +100,12 @@ void SelectionDialogBase::show() { } void SelectionDialogBase::hide() { + if(!shown) + return; window->hide(); if(tooltips) tooltips->hide(); - if(on_hide && shown) + if(on_hide) on_hide(); shown=false; } diff --git a/src/selectiondialog.h b/src/selectiondialog.h index 09a28f1..474e799 100644 --- a/src/selectiondialog.h +++ b/src/selectiondialog.h @@ -18,7 +18,6 @@ public: bool use_markup; ListViewText(bool use_markup); void append(const std::string& value); - void hide(); private: Glib::RefPtr list_store; ColumnRecord column_record; diff --git a/src/source.cc b/src/source.cc index 42064c8..a9faacf 100644 --- a/src/source.cc +++ b/src/source.cc @@ -217,7 +217,7 @@ Source::View::View(const boost::filesystem::path &file_path, const boost::filesy return; if(mark->get_name()=="insert") { - if(spellcheck_suggestions_dialog && spellcheck_suggestions_dialog->shown) + if(spellcheck_suggestions_dialog) spellcheck_suggestions_dialog->hide(); delayed_spellcheck_suggestions_connection.disconnect(); delayed_spellcheck_suggestions_connection=Glib::signal_timeout().connect([this]() { @@ -429,11 +429,11 @@ void Source::View::set_tooltip_and_dialog_events() { type_tooltips.hide(); diagnostic_tooltips.hide(); - if(spellcheck_suggestions_dialog && spellcheck_suggestions_dialog->shown) + if(spellcheck_suggestions_dialog) spellcheck_suggestions_dialog->hide(); - if(autocomplete_dialog && autocomplete_dialog->shown) + if(autocomplete_dialog) autocomplete_dialog->hide(); - if(selection_dialog && selection_dialog->shown) + if(selection_dialog) selection_dialog->hide(); set_info(info); @@ -445,11 +445,11 @@ void Source::View::set_tooltip_and_dialog_events() { type_tooltips.hide(); diagnostic_tooltips.hide(); delayed_spellcheck_suggestions_connection.disconnect(); - if(spellcheck_suggestions_dialog && spellcheck_suggestions_dialog->shown) + if(spellcheck_suggestions_dialog) spellcheck_suggestions_dialog->hide(); - if(autocomplete_dialog && autocomplete_dialog->shown) + if(autocomplete_dialog) autocomplete_dialog->hide(); - if(selection_dialog && selection_dialog->shown) + if(selection_dialog) selection_dialog->hide(); return false; }); @@ -459,9 +459,9 @@ void Source::View::set_tooltip_and_dialog_events() { type_tooltips.hide(); diagnostic_tooltips.hide(); delayed_spellcheck_suggestions_connection.disconnect(); - if(spellcheck_suggestions_dialog && spellcheck_suggestions_dialog->shown) + if(spellcheck_suggestions_dialog) spellcheck_suggestions_dialog->hide(); - if(autocomplete_dialog && autocomplete_dialog->shown) + if(autocomplete_dialog) autocomplete_dialog->hide(); return false; }); From 6e0c762f7099a7708e295d43161bffaeb7d5bc30 Mon Sep 17 00:00:00 2001 From: eidheim Date: Wed, 23 Dec 2015 15:15:21 +0100 Subject: [PATCH 2/4] Now indents left automatically when writing { on a newline after if(...)/else/else if(...) and so on --- src/source_clang.cc | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/src/source_clang.cc b/src/source_clang.cc index ef5073c..d3611f0 100644 --- a/src/source_clang.cc +++ b/src/source_clang.cc @@ -605,6 +605,35 @@ bool Source::ClangViewParse::on_key_press_event(GdkEventKey* key) { get_source_buffer()->end_user_action(); return true; } + //Indent left when writing { on a new line after for instance if(...)\n... + else if(key->keyval==GDK_KEY_braceleft) { + auto iter=get_buffer()->get_insert()->get_iter(); + auto tabs_end_iter=get_tabs_end_iter(); + auto tabs=get_line_before(tabs_end_iter); + size_t line_nr=get_source_buffer()->get_insert()->get_iter().get_line(); + if(line_nr>0 && tabs.size()>=tab_size && iter==tabs_end_iter) { + std::string previous_line=get_line(line_nr-1); + boost::smatch sm; + if(!boost::regex_match(previous_line, sm, bracket_regex)) { + auto start_iter=iter; + start_iter.backward_chars(tab_size); + if(boost::regex_match(previous_line, sm, no_bracket_statement_regex)) { + get_buffer()->erase(start_iter, iter); + get_buffer()->insert_at_cursor("{"); + scroll_to(get_source_buffer()->get_insert()); + get_buffer()->end_user_action(); + return true; + } + else if(boost::regex_match(previous_line, sm, no_bracket_no_para_statement_regex)) { + get_buffer()->erase(start_iter, iter); + get_buffer()->insert_at_cursor("{"); + scroll_to(get_source_buffer()->get_insert()); + get_buffer()->end_user_action(); + return true; + } + } + } + } get_source_buffer()->end_user_action(); return Source::View::on_key_press_event(key); From a16ab4be80d1e0c5519f6c1f07e65bf2af14a21a Mon Sep 17 00:00:00 2001 From: eidheim Date: Wed, 23 Dec 2015 16:53:48 +0100 Subject: [PATCH 3/4] Cleanup of { indentation (Allman style) --- src/source_clang.cc | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/src/source_clang.cc b/src/source_clang.cc index d3611f0..4384848 100644 --- a/src/source_clang.cc +++ b/src/source_clang.cc @@ -99,8 +99,8 @@ void Source::ClangViewParse::configure() { } bracket_regex=boost::regex("^([ \\t]*).*\\{ *$"); - no_bracket_statement_regex=boost::regex("^([ \\t]*)(if|for|else if|catch|while) *\\(.*[^;}] *$"); - no_bracket_no_para_statement_regex=boost::regex("^([ \\t]*)(else|try|do) *$"); + no_bracket_statement_regex=boost::regex("^([ \\t]*)(if|for|else if|while) *\\(.*[^;}] *$"); + no_bracket_no_para_statement_regex=boost::regex("^([ \\t]*)(else) *$"); } void Source::ClangViewParse::parse_initialize() { @@ -610,24 +610,18 @@ bool Source::ClangViewParse::on_key_press_event(GdkEventKey* key) { auto iter=get_buffer()->get_insert()->get_iter(); auto tabs_end_iter=get_tabs_end_iter(); auto tabs=get_line_before(tabs_end_iter); - size_t line_nr=get_source_buffer()->get_insert()->get_iter().get_line(); + size_t line_nr=iter.get_line(); if(line_nr>0 && tabs.size()>=tab_size && iter==tabs_end_iter) { std::string previous_line=get_line(line_nr-1); boost::smatch sm; if(!boost::regex_match(previous_line, sm, bracket_regex)) { auto start_iter=iter; start_iter.backward_chars(tab_size); - if(boost::regex_match(previous_line, sm, no_bracket_statement_regex)) { + if(boost::regex_match(previous_line, sm, no_bracket_statement_regex) || + boost::regex_match(previous_line, sm, no_bracket_no_para_statement_regex)) { get_buffer()->erase(start_iter, iter); get_buffer()->insert_at_cursor("{"); - scroll_to(get_source_buffer()->get_insert()); - get_buffer()->end_user_action(); - return true; - } - else if(boost::regex_match(previous_line, sm, no_bracket_no_para_statement_regex)) { - get_buffer()->erase(start_iter, iter); - get_buffer()->insert_at_cursor("{"); - scroll_to(get_source_buffer()->get_insert()); + scroll_to(get_buffer()->get_insert()); get_buffer()->end_user_action(); return true; } From 29f8b97127107ce5939cca47696dd1a502a9f61a Mon Sep 17 00:00:00 2001 From: eidheim Date: Wed, 23 Dec 2015 17:51:05 +0100 Subject: [PATCH 4/4] Minor improvement: rows in selection dialogs now gets cleared when the dialog is hidden, instead of when destroyed --- src/selectiondialog.cc | 9 +++++---- src/selectiondialog.h | 1 + 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/selectiondialog.cc b/src/selectiondialog.cc index 12cf580..187a304 100644 --- a/src/selectiondialog.cc +++ b/src/selectiondialog.cc @@ -31,10 +31,6 @@ ListViewText::ListViewText(bool use_markup) : Gtk::TreeView(), use_markup(use_ma set_activate_on_single_click(true); set_hover_selection(false); set_rules_hint(true); - - signal_hide().connect([this]() { - list_store->clear(); - }); } void ListViewText::append(const std::string& value) { @@ -42,6 +38,10 @@ void ListViewText::append(const std::string& value) { new_row->set_value(column_record.text, value); } +void ListViewText::clear() { + list_store->clear(); +} + SelectionDialogBase::SelectionDialogBase(Gtk::TextView& text_view, Glib::RefPtr start_mark, bool show_search_entry, bool use_markup): text_view(text_view), list_view_text(use_markup), start_mark(start_mark), show_search_entry(show_search_entry) { if(!show_search_entry) @@ -107,6 +107,7 @@ void SelectionDialogBase::hide() { tooltips->hide(); if(on_hide) on_hide(); + list_view_text.clear(); shown=false; } diff --git a/src/selectiondialog.h b/src/selectiondialog.h index 474e799..7c6d901 100644 --- a/src/selectiondialog.h +++ b/src/selectiondialog.h @@ -18,6 +18,7 @@ public: bool use_markup; ListViewText(bool use_markup); void append(const std::string& value); + void clear(); private: Glib::RefPtr list_store; ColumnRecord column_record;