diff options
author | Thomas White <taw@bitwiz.me.uk> | 2020-12-22 18:04:10 +0100 |
---|---|---|
committer | Thomas White <taw@bitwiz.me.uk> | 2020-12-22 18:04:10 +0100 |
commit | 837b3b4b1cc97c8e2b6809256ec0bb20a1d98c0c (patch) | |
tree | 43cdf9e472d73f1d1e4c6201c4ba61a06402093c /libstorycode/gtk/gtknarrativeview.c | |
parent | 619009122727c14cc0b84304871c6594e8f68d51 (diff) |
Avoid deleting slide when pressing backspace in an empty text paragraph
Diffstat (limited to 'libstorycode/gtk/gtknarrativeview.c')
-rw-r--r-- | libstorycode/gtk/gtknarrativeview.c | 34 |
1 files changed, 25 insertions, 9 deletions
diff --git a/libstorycode/gtk/gtknarrativeview.c b/libstorycode/gtk/gtknarrativeview.c index 9311812..28a2a33 100644 --- a/libstorycode/gtk/gtknarrativeview.c +++ b/libstorycode/gtk/gtknarrativeview.c @@ -703,20 +703,36 @@ static void gtknv_do_backspace(GtkNarrativeView *e, signed int dir) p1 = e->sel_start; p2 = e->sel_end; + sort_positions(&p1, &p2); + o1 = narrative_pos_trail_to_offset(e->n, p1.para, p1.pos, p1.trail); + o2 = narrative_pos_trail_to_offset(e->n, p2.para, p2.pos, p2.trail); + narrative_delete_block(e->n, p1.para, o1, p2.para, o2); + e->cpos = p1; + } else { /* Delete one character, as represented visually */ - p2 = e->cpos; - p1 = p2; - gtknv_cursor_moveh(e->n, &p1, dir); - set_cursor_h_pos(e); + + if ( narrative_item_is_empty_text(e->n, e->cpos.para) ) { + narrative_delete_item(e->n, e->cpos.para); + if ( dir == -1 ) { + e->cpos.para--; + } /* else we are already on the right item */ + } else { + + p2 = e->cpos; + p1 = p2; + gtknv_cursor_moveh(e->n, &p1, dir); + set_cursor_h_pos(e); + sort_positions(&p1, &p2); + o1 = narrative_pos_trail_to_offset(e->n, p1.para, p1.pos, p1.trail); + o2 = narrative_pos_trail_to_offset(e->n, p2.para, p2.pos, p2.trail); + narrative_delete_block(e->n, p1.para, o1, p2.para, o2); + e->cpos = p1; + + } } - sort_positions(&p1, &p2); - o1 = narrative_pos_trail_to_offset(e->n, p1.para, p1.pos, p1.trail); - o2 = narrative_pos_trail_to_offset(e->n, p2.para, p2.pos, p2.trail); - narrative_delete_block(e->n, p1.para, o1, p2.para, o2); - e->cpos = p1; gtknv_unset_selection(e); /* The only paragraphs which still exist and might have been |