From 91eb4f02e4a539bc8b9fb3b475b6644717846d2b Mon Sep 17 00:00:00 2001 From: Thomas White Date: Sun, 16 Aug 2015 23:48:26 +0200 Subject: Add slide (properly) --- src/narrative_window.c | 30 +++++++++++++++++++++++++++--- 1 file changed, 27 insertions(+), 3 deletions(-) (limited to 'src/narrative_window.c') diff --git a/src/narrative_window.c b/src/narrative_window.c index f8e68b0..aded770 100644 --- a/src/narrative_window.c +++ b/src/narrative_window.c @@ -125,10 +125,34 @@ static void delete_frame_sig(GSimpleAction *action, GVariant *parameter, gpointe static void add_slide_sig(GSimpleAction *action, GVariant *parameter, gpointer vp) { - SCBlock *slide; + struct slide *slide; + int n_slides; + SCBlock *block; + SCBlock *nsblock; NarrativeWindow *nw = vp; - slide = sc_parse("\\slide{}"); - insert_scblock(slide, nw->sceditor); + + slide = new_slide(); + + /* Link it into the SC structure */ + nsblock = sc_parse("\\slide{}"); + insert_scblock(nsblock, nw->sceditor); + + /* Iterate over blocks of presentation, counting \slides, until + * we reach the block we just added */ + block = nw->p->scblocks; + n_slides = 0; + while ( block != NULL ) { + const char *n = sc_block_name(block); + if ( n == NULL ) goto next; + if ( strcmp(n, "slide") == 0 ) { + if ( block == nsblock ) break; + n_slides++; + } +next: + block = sc_block_next(block); + } + slide->scblocks = sc_block_child(nsblock); + insert_slide(nw->p, slide, n_slides); } -- cgit v1.2.3