Browse Source

Minor cleanup and fixes to spell checking and smart paste

merge-requests/365/head
eidheim 9 years ago
parent
commit
0adc92b072
  1. 15
      src/source.cc
  2. 21
      src/source_spellcheck.cc

15
src/source.cc

@ -745,6 +745,21 @@ void Source::View::paste() {
} }
} }
//Exception for when pasted text is only whitespaces
bool only_whitespaces=true;
for(auto &chr: text) {
if(chr!='\n' && chr!='\r' && chr!=' ' && chr!='\t') {
only_whitespaces=false;
break;
}
}
if(only_whitespaces) {
Gtk::Clipboard::get()->set_text(text);
get_buffer()->paste_clipboard(Gtk::Clipboard::get());
scroll_to_cursor_delayed(this, false, false);
return;
}
get_buffer()->begin_user_action(); get_buffer()->begin_user_action();
if(get_buffer()->get_has_selection()) { if(get_buffer()->get_has_selection()) {
Gtk::TextIter start, end; Gtk::TextIter start, end;

21
src/source_spellcheck.cc

@ -65,7 +65,7 @@ Source::SpellCheckView::SpellCheckView() : Gsv::View() {
else { else {
auto previous_iter=iter; auto previous_iter=iter;
//When for instance using space to split two words //When for instance using space to split two words
if(previous_iter.backward_char() && !is_word_iter(previous_iter)) { if(previous_iter.backward_char() && (*previous_iter==' ' || *previous_iter=='-')) {
auto first=previous_iter; auto first=previous_iter;
auto second=iter; auto second=iter;
if(first.backward_char()) { if(first.backward_char()) {
@ -129,21 +129,20 @@ Source::SpellCheckView::SpellCheckView() : Gsv::View() {
}); });
// In case of for instance text paste or undo/redo // In case of for instance text paste or undo/redo
get_buffer()->signal_insert().connect([this](const Gtk::TextIter &end_iter, const Glib::ustring &inserted_string, int) { get_buffer()->signal_insert().connect([this](const Gtk::TextIter &start_iter, const Glib::ustring &inserted_string, int) {
if(spellcheck_checker==nullptr) if(spellcheck_checker==nullptr)
return; return;
if(inserted_string.size()<=1) if(inserted_string.size()<=1)
return; return;
auto start_iter=end_iter; auto iter=start_iter;
start_iter.backward_chars(inserted_string.size()); if(!is_word_iter(iter) && !iter.starts_line())
if(!is_word_iter(start_iter) && !start_iter.starts_line()) iter.backward_char();
start_iter.backward_char(); if(is_word_iter(iter)) {
auto word=get_word(start_iter); auto word=get_word(iter);
start_iter=word.first; get_buffer()->remove_tag(spellcheck_error_tag, word.first, word.second);
word=get_word(end_iter); }
get_buffer()->remove_tag(spellcheck_error_tag, start_iter, word.second); }, false);
});
get_buffer()->signal_mark_set().connect([this](const Gtk::TextBuffer::iterator& iter, const Glib::RefPtr<Gtk::TextBuffer::Mark>& mark) { get_buffer()->signal_mark_set().connect([this](const Gtk::TextBuffer::iterator& iter, const Glib::RefPtr<Gtk::TextBuffer::Mark>& mark) {
if(spellcheck_checker==nullptr) if(spellcheck_checker==nullptr)

Loading…
Cancel
Save