diff options
author | Thomas White <taw@bitwiz.org.uk> | 2014-09-08 09:30:57 +0200 |
---|---|---|
committer | Thomas White <taw@bitwiz.org.uk> | 2014-09-08 09:30:57 +0200 |
commit | cf20a05e3f18d11ded94a74b072c963b3174e168 (patch) | |
tree | b891805df8489d8214b3331af36bac4b181bc90a /src | |
parent | 72c3ff616107bef50a7e996176c5f2cd35218b89 (diff) |
Simplify the style menu a bit
Diffstat (limited to 'src')
-rw-r--r-- | src/mainwindow.c | 86 | ||||
-rw-r--r-- | src/presentation.c | 5 | ||||
-rw-r--r-- | src/presentation.h | 13 |
3 files changed, 37 insertions, 67 deletions
diff --git a/src/mainwindow.c b/src/mainwindow.c index a95fd26..b3f2d4b 100644 --- a/src/mainwindow.c +++ b/src/mainwindow.c @@ -184,50 +184,21 @@ static void do_slide_update(struct presentation *p, PangoContext *pc) } -#if 0 -static void add_furniture_real(struct presentation *p, struct style *sty) +/* Inelegance to make furniture selection menus work */ +struct menu_pl { - struct frame *fr; - - fr = add_subframe(p->cur_edit_slide->top); - fr->style = sty; - fr->lop_from_style = 1; - set_edit(p, p->cur_edit_slide); - fr->sc = malloc(1); - fr->sc[0] = '\0'; - fr->sc_len = 1; - fr->empty = 0; - set_selection(p, fr); - fr->pos = 0; - p->cursor_pos = 0; - -} -#endif + struct presentation *p; + char *style_name; + GtkWidget *widget; +}; static gint add_furniture(GtkWidget *widget, struct menu_pl *pl) { -#if 0 -/* FIXME: Add furniture */ + /* FIXME: Add it */ + printf("Adding '%s'\n", pl->style_name); - struct style *sty = pl->sty; - struct presentation *p = pl->p; - - if ( sty != NULL ) { - add_furniture_real(p, sty); - } else { - int i; - for ( i=0; i<pl->st->n_styles; i++ ) { - add_furniture_real(p, pl->st->styles[i]); - } - } - - /* FIXME: What if the user mixes templates? */ - p->cur_edit_slide->st = pl->st; - p->cur_edit_slide->top->style = pl->st->top_style; - - do_slide_update(p, p->pc); -#endif + do_slide_update(pl->p, pl->p->pc); return 0; } @@ -240,18 +211,14 @@ static void update_style_menus(struct presentation *p) struct style_id *styles; int i, n_sty; - for ( i=0; i<p->n_menu_rebuild; i++ ) { - gtk_widget_destroy(p->menu_rebuild_list[i]); - free(p->menu_path_list[i].name); - free(p->menu_path_list[i].friendlyname); + /* Free old list */ + for ( i=0; i<p->n_style_menu; i++ ) { + gtk_widget_destroy(p->style_menu[i].widget); + free(p->style_menu[i].style_name); } - free(p->menu_rebuild_list); - free(p->menu_path_list); - - /* Add the styles to the "Insert" menu */ - menu = gtk_ui_manager_get_widget(p->ui, "/displaywindow/insert"); - menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(menu)); + free(p->style_menu); + /* Get the list of styles from the style sheet */ scin = sc_interp_new(NULL, NULL); if ( scin == NULL ) { fprintf(stderr, "Failed to set up interpreter.\n"); @@ -262,8 +229,15 @@ static void update_style_menus(struct presentation *p) styles = list_styles(scin, &n_sty); if ( styles == NULL ) return; - p->menu_rebuild_list = calloc(n_sty, sizeof(GtkWidget *)); - if ( p->menu_rebuild_list == NULL ) return; + sc_interp_destroy(scin); + + /* Set up list for next time */ + p->style_menu = calloc(n_sty, sizeof(struct menu_pl)); + if ( p->style_menu == NULL ) return; + + /* Add the styles to the "Insert" menu */ + menu = gtk_ui_manager_get_widget(p->ui, "/displaywindow/insert"); + menu = gtk_menu_item_get_submenu(GTK_MENU_ITEM(menu)); for ( i=0; i<n_sty; i++ ) { @@ -271,16 +245,20 @@ static void update_style_menus(struct presentation *p) item = gtk_menu_item_new_with_label(styles[i].friendlyname); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); - p->menu_rebuild_list[i] = item; + + p->style_menu[i].p = p; + p->style_menu[i].widget = item; + p->style_menu[i].style_name = styles[i].name; g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(add_furniture), - &styles[i]); + &p->style_menu[i]); + + free(styles[i].friendlyname); } gtk_widget_show_all(menu); - p->n_menu_rebuild = n_sty; - p->menu_path_list = styles; + free(styles); } diff --git a/src/presentation.c b/src/presentation.c index f490539..3e079e6 100644 --- a/src/presentation.c +++ b/src/presentation.c @@ -298,9 +298,8 @@ struct presentation *new_presentation() new->stylesheet = NULL; - new->n_menu_rebuild = 0; - new->menu_rebuild_list = NULL; - new->menu_path_list = NULL; + new->n_style_menu = 0; + new->style_menu = NULL; new->selection = NULL; new->n_selection = 0; diff --git a/src/presentation.h b/src/presentation.h index f8f9429..7dac81a 100644 --- a/src/presentation.h +++ b/src/presentation.h @@ -97,13 +97,7 @@ enum drag_status }; -/* Inelegance to make furniture selection menus work */ -struct menu_pl -{ - struct presentation *p; - struct style *sty; - struct slide_template *st; -}; +struct menu_pl; struct presentation @@ -120,9 +114,8 @@ struct presentation GtkUIManager *ui; GtkActionGroup *action_group; GtkIMContext *im_context; - GtkWidget **menu_rebuild_list; - struct style_id *menu_path_list; - int n_menu_rebuild; + struct menu_pl *style_menu; + int n_style_menu; PangoContext *pc; ImageStore *is; |