Browse Source

Fixed a crash when pressing enter at the first line when having a space at the end. Also a minor fix if one press enter at the last line.

merge-requests/365/head
eidheim 10 years ago
parent
commit
d4f72430cb
  1. 18
      src/source.cc

18
src/source.cc

@ -143,8 +143,7 @@ Source::View::View(const boost::filesystem::path &file_path, const boost::filesy
auto first=iter; auto first=iter;
auto second=iter; auto second=iter;
if(last_keyval_is_return) { if(last_keyval_is_return) {
while(first && !first.ends_line()) while(first && !first.ends_line() && first.backward_char()) {}
first.backward_char();
if(first.backward_char() && second.forward_char()) { if(first.backward_char() && second.forward_char()) {
get_buffer()->remove_tag_by_name("spellcheck_error", first, second); get_buffer()->remove_tag_by_name("spellcheck_error", first, second);
auto word=spellcheck_get_word(first); auto word=spellcheck_get_word(first);
@ -947,24 +946,24 @@ bool Source::View::on_key_press_event(GdkEventKey* key) {
while((*end_blank_iter==' ' || *end_blank_iter=='\t') && while((*end_blank_iter==' ' || *end_blank_iter=='\t') &&
!end_blank_iter.ends_line() && end_blank_iter.forward_char()) {} !end_blank_iter.ends_line() && end_blank_iter.forward_char()) {}
start_blank_iter.backward_char(); start_blank_iter.backward_char();
while((*start_blank_iter==' ' || *start_blank_iter=='\t' || start_blank_iter.ends_line()) && while((*start_blank_iter==' ' || *start_blank_iter=='\t') &&
!start_blank_iter.starts_line() && start_blank_iter.backward_char()) {} !start_blank_iter.starts_line() && start_blank_iter.backward_char()) {}
if(!start_blank_iter.starts_line()) {
if(start_blank_iter.starts_line() && (*start_blank_iter==' ' || *start_blank_iter=='\t'))
get_buffer()->erase(iter, end_blank_iter);
else {
start_blank_iter.forward_char(); start_blank_iter.forward_char();
get_buffer()->erase(start_blank_iter, end_blank_iter); get_buffer()->erase(start_blank_iter, end_blank_iter);
} }
else
get_buffer()->erase(iter, end_blank_iter);
iter=get_buffer()->get_insert()->get_iter();
iter=get_buffer()->get_insert()->get_iter();
int line_nr=iter.get_line(); int line_nr=iter.get_line();
auto tabs_end_iter=get_tabs_end_iter(); auto tabs_end_iter=get_tabs_end_iter();
auto line_tabs=get_line_before(tabs_end_iter); auto line_tabs=get_line_before(tabs_end_iter);
if((line_nr+1)<get_buffer()->get_line_count()) { if((line_nr+1)<get_buffer()->get_line_count()) {
auto next_line_tabs_end_iter=get_tabs_end_iter(line_nr+1); auto next_line_tabs_end_iter=get_tabs_end_iter(line_nr+1);
auto next_line_tabs=get_line_before(next_line_tabs_end_iter); auto next_line_tabs=get_line_before(next_line_tabs_end_iter);
if(iter.ends_line()) { if(iter.ends_line() && next_line_tabs.size()>line_tabs.size()) {
if(next_line_tabs.size()>line_tabs.size()) {
get_source_buffer()->insert_at_cursor("\n"+next_line_tabs); get_source_buffer()->insert_at_cursor("\n"+next_line_tabs);
scroll_to(get_source_buffer()->get_insert()); scroll_to(get_source_buffer()->get_insert());
get_source_buffer()->end_user_action(); get_source_buffer()->end_user_action();
@ -976,7 +975,6 @@ bool Source::View::on_key_press_event(GdkEventKey* key) {
get_source_buffer()->end_user_action(); get_source_buffer()->end_user_action();
return true; return true;
} }
}
//Indent right when clicking tab, no matter where in the line the cursor is. Also works on selected text. //Indent right when clicking tab, no matter where in the line the cursor is. Also works on selected text.
else if(key->keyval==GDK_KEY_Tab) { else if(key->keyval==GDK_KEY_Tab) {
//Special case if insert is at beginning of empty line: //Special case if insert is at beginning of empty line:

Loading…
Cancel
Save