From 36fae6750885e2b6458f61369b23c26fb6b75bf9 Mon Sep 17 00:00:00 2001 From: Thomas White Date: Fri, 3 May 2019 22:06:56 +0200 Subject: Fix crashes caused by toolbar paragraph motion buttons --- libstorycode/gtk/gtknarrativeview.c | 1 + src/narrative_window.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/libstorycode/gtk/gtknarrativeview.c b/libstorycode/gtk/gtknarrativeview.c index 58cbd8e..48ef91f 100644 --- a/libstorycode/gtk/gtknarrativeview.c +++ b/libstorycode/gtk/gtknarrativeview.c @@ -1192,6 +1192,7 @@ void gtk_narrative_view_set_cursor_para(GtkNarrativeView *e, signed int pos) double h; int i; + if ( pos < 0 ) pos = e->n->n_items-1; e->cpos.para = pos; e->cpos.pos = 0; e->cpos.trail = 0; diff --git a/src/narrative_window.c b/src/narrative_window.c index 3ef43af..d90913b 100644 --- a/src/narrative_window.c +++ b/src/narrative_window.c @@ -138,6 +138,8 @@ static void update_toolbar(NarrativeWindow *nw) { int cur_para, n_para; + if ( nw->show == NULL ) return; + cur_para = gtk_narrative_view_get_cursor_para(GTK_NARRATIVE_VIEW(nw->nv)); if ( cur_para == 0 ) { gtk_widget_set_sensitive(GTK_WIDGET(nw->bfirst), FALSE); @@ -374,7 +376,7 @@ static void ss_next_para(SCSlideshow *ss, void *vp) gtk_narrative_view_set_cursor_para(nv, gtk_narrative_view_get_cursor_para(nv)+1); /* If we only have one monitor, skip to next slide */ - if ( ss->single_monitor && !nw->show_no_slides ) { + if ( ss != NULL && ss->single_monitor && !nw->show_no_slides ) { int i; for ( i=gtk_narrative_view_get_cursor_para(nv); ipr_clock, gtk_narrative_view_get_cursor_para(nv), n_paras); ns = narrative_get_slide(nw->n, gtk_narrative_view_get_cursor_para(nv)); - if ( ns != NULL ) { + if ( nw->show != NULL && ns != NULL ) { sc_slideshow_set_slide(nw->show, ns); } update_toolbar(nw); @@ -797,7 +799,10 @@ NarrativeWindow *narrative_window_new(Narrative *n, GFile *file, GApplication *p gtk_actionable_set_action_name(GTK_ACTIONABLE(nw->blast), "win.last"); - update_toolbar(nw); + gtk_widget_set_sensitive(GTK_WIDGET(nw->bfirst), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(nw->bprev), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(nw->bnext), FALSE); + gtk_widget_set_sensitive(GTK_WIDGET(nw->blast), FALSE); scroll = gtk_scrolled_window_new(NULL, NULL); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scroll), -- cgit v1.2.3