aboutsummaryrefslogtreecommitdiff
path: root/src/narrative_window.c
diff options
context:
space:
mode:
authorThomas White <taw@bitwiz.me.uk>2018-05-01 22:12:22 +0200
committerThomas White <taw@bitwiz.me.uk>2018-05-01 22:12:22 +0200
commit072516c65a7335cc168e6ecc9b5a0737c9842913 (patch)
tree9390bd7da99406258fa4ec2b6f88e8a01cab1fe5 /src/narrative_window.c
parentebe339f9f26287216d8e6bc969ef3eaba7377e5c (diff)
Get rid of stylesheet lists and add stylesheet change signal
We no longer have a need for more than one (since the callback stuff changed, see 61394e51), and removing it makes it much easier to hook up the stylesheet update code for the stylesheet editor.
Diffstat (limited to 'src/narrative_window.c')
-rw-r--r--src/narrative_window.c54
1 files changed, 19 insertions, 35 deletions
diff --git a/src/narrative_window.c b/src/narrative_window.c
index 027281c..0f6145d 100644
--- a/src/narrative_window.c
+++ b/src/narrative_window.c
@@ -244,24 +244,6 @@ static SCBlock *get_slide_template(SCBlock *ss)
}
-static SCBlock **get_ss_list(struct presentation *p)
-{
- SCBlock **stylesheets;
-
- stylesheets = malloc(3 * sizeof(SCBlock *));
- if ( stylesheets == NULL ) return NULL;
-
- if ( p->stylesheet != NULL ) {
- stylesheets[0] = p->stylesheet;
- stylesheets[1] = NULL;
- } else {
- stylesheets[0] = NULL;
- }
-
- return stylesheets;
-}
-
-
static gint load_ss_response_sig(GtkWidget *d, gint response,
NarrativeWindow *nw)
{
@@ -275,22 +257,20 @@ static gint load_ss_response_sig(GtkWidget *d, gint response,
stext = load_everything(filename);
if ( stext != NULL ) {
+
SCBlock *bl;
SCBlock *ss;
bl = sc_parse(stext);
free(stext);
ss = find_stylesheet(bl);
- if ( ss != NULL ) {
- SCBlock **stylesheets;
+ if ( ss != NULL ) {
- /* Substitute the style sheet */
+ /* Substitute the style sheet in
+ * presentation Storycode */
replace_stylesheet(nw->p, ss);
- stylesheets = get_ss_list(nw->p);
- sc_editor_set_stylesheets(nw->sceditor,
- stylesheets);
- free(stylesheets);
+ sc_editor_set_stylesheet(nw->sceditor, ss);
/* Full rerender, first block may have
* changed */
@@ -314,6 +294,16 @@ static gint load_ss_response_sig(GtkWidget *d, gint response,
}
+static void stylesheet_changed_sig(GtkWidget *da, NarrativeWindow *nw)
+{
+ /* It might have changed (been created) since last time */
+ sc_editor_set_stylesheet(nw->sceditor, nw->p->stylesheet);
+
+ /* Full rerender, first block may have changed */
+ sc_editor_set_scblock(nw->sceditor, nw->dummy_top);
+}
+
+
static void edit_ss_sig(GSimpleAction *action, GVariant *parameter,
gpointer vp)
{
@@ -322,6 +312,8 @@ static void edit_ss_sig(GSimpleAction *action, GVariant *parameter,
se = stylesheet_editor_new(nw->p);
gtk_window_set_transient_for(GTK_WINDOW(se), GTK_WINDOW(nw->window));
+ g_signal_connect(G_OBJECT(se), "changed",
+ G_CALLBACK(stylesheet_changed_sig), nw);
gtk_widget_show_all(GTK_WIDGET(se));
}
@@ -715,16 +707,12 @@ static cairo_surface_t *render_thumbnail(int w, int h, void *bvp, void *vp)
struct presentation *p = vp;
SCBlock *scblocks = bvp;
cairo_surface_t *surf;
- SCBlock *stylesheets[2];
struct frame *top;
int sn = slide_number(p, scblocks);
- stylesheets[0] = p->stylesheet;
- stylesheets[1] = NULL;
-
/* FIXME: Cache like crazy here */
surf = render_sc(scblocks, w, h, p->slide_width, p->slide_height,
- stylesheets, NULL, p->is, sn, &top, p->lang);
+ p->stylesheet, NULL, p->is, sn, &top, p->lang);
frame_free(top);
return surf;
@@ -793,7 +781,6 @@ NarrativeWindow *narrative_window_new(struct presentation *p, GApplication *papp
GtkWidget *scroll;
GtkWidget *toolbar;
GtkToolItem *button;
- SCBlock **stylesheets;
SCCallbackList *cbl;
GtkWidget *image;
Colloquium *app = COLLOQUIUM(papp);
@@ -821,8 +808,6 @@ NarrativeWindow *narrative_window_new(struct presentation *p, GApplication *papp
vbox = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
gtk_container_add(GTK_CONTAINER(nw->window), vbox);
- stylesheets = get_ss_list(p);
-
/* If the presentation is completely empty, give ourselves at least
* something to work with */
if ( nw->p->scblocks == NULL ) {
@@ -833,9 +818,8 @@ NarrativeWindow *narrative_window_new(struct presentation *p, GApplication *papp
* SCEditor will start processing one level down */
nw->dummy_top = sc_block_new_parent(nw->p->scblocks, "presentation");
- nw->sceditor = sc_editor_new(nw->dummy_top, stylesheets, p->lang,
+ nw->sceditor = sc_editor_new(nw->dummy_top, p->stylesheet, p->lang,
colloquium_get_imagestore(app));
- free(stylesheets);
cbl = sc_callback_list_new();
sc_callback_list_add_callback(cbl, "slide", create_thumbnail,
render_thumbnail, click_thumbnail, p);