aboutsummaryrefslogtreecommitdiff
path: root/src/narrative_window.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/narrative_window.c')
-rw-r--r--src/narrative_window.c43
1 files changed, 28 insertions, 15 deletions
diff --git a/src/narrative_window.c b/src/narrative_window.c
index 98001a9..fe6d024 100644
--- a/src/narrative_window.c
+++ b/src/narrative_window.c
@@ -102,7 +102,6 @@ static void update_toolbar(NarrativeWindow *nw)
struct saveas_info
{
NarrativeWindow *nw;
- GtkWidget *filechooser;
/* Radio buttons for how to save stylesheet */
GtkWidget *privatess;
@@ -114,9 +113,9 @@ struct saveas_info
static gint saveas_response_sig(GtkWidget *d, gint response,
struct saveas_info *si)
{
- if ( response == 1 ) { /* hard-coded number in Glade file */
+ if ( response == GTK_RESPONSE_ACCEPT ) {
- GFile *file = gtk_file_chooser_get_file(GTK_FILE_CHOOSER(si->filechooser));
+ GFile *file = gtk_file_chooser_get_file(GTK_FILE_CHOOSER(d));
GFile *ssfile = NULL;
if ( gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(si->privatess)) ) {
@@ -149,7 +148,7 @@ static gint saveas_response_sig(GtkWidget *d, gint response,
/* save_presentation keeps a reference to both of these */
g_object_unref(file);
- g_object_unref(ssfile);
+ if ( ssfile != NULL ) g_object_unref(ssfile);
}
@@ -163,7 +162,7 @@ static gint saveas_response_sig(GtkWidget *d, gint response,
static void saveas_sig(GSimpleAction *action, GVariant *parameter, gpointer vp)
{
GtkWidget *d;
- GtkBuilder *builder;
+ GtkWidget *box;
NarrativeWindow *nw = vp;
struct saveas_info *si;
@@ -172,16 +171,30 @@ static void saveas_sig(GSimpleAction *action, GVariant *parameter, gpointer vp)
si->nw = nw;
- builder = gtk_builder_new_from_resource("/uk/me/bitwiz/Colloquium/savepresentation.ui");
- gtk_builder_add_callback_symbol(builder, "saveas_response_sig",
- G_CALLBACK(saveas_response_sig));
- gtk_builder_connect_signals(builder, si);
- d = GTK_WIDGET(gtk_builder_get_object(builder, "savepresentation"));
- si->filechooser = GTK_WIDGET(gtk_builder_get_object(builder, "filechooser"));
- si->privatess = GTK_WIDGET(gtk_builder_get_object(builder, "privatess"));
- si->folderss = GTK_WIDGET(gtk_builder_get_object(builder, "folderss"));
- si->noss = GTK_WIDGET(gtk_builder_get_object(builder, "noss"));
- gtk_window_set_transient_for(GTK_WINDOW(d), GTK_WINDOW(nw->window));
+ d = gtk_file_chooser_dialog_new(_("Save presentation"),
+ GTK_WINDOW(nw->window),
+ GTK_FILE_CHOOSER_ACTION_SAVE,
+ _("_Cancel"), GTK_RESPONSE_CANCEL,
+ _("_Save"), GTK_RESPONSE_ACCEPT,
+ NULL);
+ gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(d),
+ TRUE);
+
+ box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 8);
+ gtk_file_chooser_set_extra_widget(GTK_FILE_CHOOSER(d), box);
+ si->privatess = gtk_radio_button_new_with_label(NULL,
+ _("Create/update private stylesheet for this presentation"));
+ gtk_box_pack_start(GTK_BOX(box), si->privatess, FALSE, FALSE, 0);
+ si->folderss = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(si->privatess),
+ _("Create/update default stylesheet for presentations in folder"));
+ gtk_box_pack_start(GTK_BOX(box), si->folderss, FALSE, FALSE, 0);
+ si->noss = gtk_radio_button_new_with_label_from_widget(GTK_RADIO_BUTTON(si->privatess),
+ _("Don't save stylesheet at all"));
+ gtk_box_pack_start(GTK_BOX(box), si->noss, FALSE, FALSE, 0);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(si->privatess), TRUE);
+
+ g_signal_connect(G_OBJECT(d), "response",
+ G_CALLBACK(saveas_response_sig), si);
gtk_widget_show_all(d);
}