From 837b3b4b1cc97c8e2b6809256ec0bb20a1d98c0c Mon Sep 17 00:00:00 2001 From: Thomas White Date: Tue, 22 Dec 2020 18:04:10 +0100 Subject: Avoid deleting slide when pressing backspace in an empty text paragraph --- libstorycode/gtk/gtknarrativeview.c | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) (limited to 'libstorycode/gtk/gtknarrativeview.c') 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 -- cgit v1.2.3