X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fsyntax-editor.c;h=35fd7a5e869aabc3b97a1e8f4caebde5e5846edf;hb=d7a1402a5ff12bba819f2eb4544812e6bf358b97;hp=31307978a970df67e08330532581affc5d30ae4d;hpb=13d1b533c6ce0545a4b06e5e30c73211591034c5;p=pspp diff --git a/src/ui/gui/syntax-editor.c b/src/ui/gui/syntax-editor.c index 31307978a9..35fd7a5e86 100644 --- a/src/ui/gui/syntax-editor.c +++ b/src/ui/gui/syntax-editor.c @@ -46,6 +46,21 @@ static gboolean save_editor_to_file (struct syntax_editor *se, const gchar *filename, GError **err); +/* Append ".sps" to FILENAME if necessary. + The returned result must be freed when no longer required. + */ +static gchar * +append_suffix (const gchar *filename) +{ + if ( ! g_str_has_suffix (filename, ".sps" ) && + ! g_str_has_suffix (filename, ".SPS" ) ) + { + return g_strdup_printf ("%s.sps", filename); + } + + return strdup (filename); +} + /* If the buffer's modified flag is set, then save it, and close the window. Otherwise just close the window. */ @@ -57,26 +72,26 @@ save_if_modified (struct syntax_editor *se) { gint response; GtkWidget *dialog = - gtk_message_dialog_new (GTK_WINDOW(e->window), + gtk_message_dialog_new (GTK_WINDOW (e->window), GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_NONE, _("Save contents of syntax editor to %s?"), - e->name ? e->name : _("Untitled") + e->name ); - gtk_dialog_add_button (GTK_DIALOG(dialog), + gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_YES, GTK_RESPONSE_ACCEPT); - gtk_dialog_add_button (GTK_DIALOG(dialog), + gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_NO, GTK_RESPONSE_REJECT); - gtk_dialog_add_button (GTK_DIALOG(dialog), + gtk_dialog_add_button (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL); - response = gtk_dialog_run (GTK_DIALOG(dialog)); + response = gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); @@ -84,8 +99,7 @@ save_if_modified (struct syntax_editor *se) { GError *err = NULL; - if ( ! save_editor_to_file (se, e->name ? e->name : _("Untitled"), - &err) ) + if ( ! save_editor_to_file (se, e->name, &err) ) { msg (ME, err->message); g_error_free (err); @@ -101,8 +115,7 @@ save_if_modified (struct syntax_editor *se) /* Callback for the File->SaveAs menuitem */ static void -on_syntax_save_as (GtkMenuItem *menuitem, - gpointer user_data) +on_syntax_save_as (GtkMenuItem *menuitem, gpointer user_data) { GtkFileFilter *filter; gint response; @@ -111,7 +124,7 @@ on_syntax_save_as (GtkMenuItem *menuitem, GtkWidget *dialog = gtk_file_chooser_dialog_new (_("Save Syntax"), - GTK_WINDOW(e->window), + GTK_WINDOW (e->window), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, @@ -121,14 +134,14 @@ on_syntax_save_as (GtkMenuItem *menuitem, gtk_file_filter_set_name (filter, _("Syntax Files (*.sps) ")); gtk_file_filter_add_pattern (filter, "*.sps"); gtk_file_filter_add_pattern (filter, "*.SPS"); - gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(dialog), filter); + gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, _("All Files")); gtk_file_filter_add_pattern (filter, "*"); gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); - gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER(dialog), + gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); response = gtk_dialog_run (GTK_DIALOG (dialog)); @@ -156,9 +169,8 @@ on_syntax_save_as (GtkMenuItem *menuitem, } /* Callback for the File->Save menuitem */ -void -on_syntax_save (GtkMenuItem *menuitem, - gpointer user_data) +static void +on_syntax_save (GtkMenuItem *menuitem, gpointer user_data) { struct syntax_editor *se = user_data; struct editor_window *e = user_data; @@ -167,10 +179,13 @@ on_syntax_save (GtkMenuItem *menuitem, on_syntax_save_as (menuitem, user_data); else { - GError *err; + GError *err = NULL; save_editor_to_file (se, e->name, &err); - msg (ME, err->message); - g_error_free (err); + if ( err ) + { + msg (ME, err->message); + g_error_free (err); + } } } @@ -316,7 +331,7 @@ new_syntax_editor (void) e->window = get_widget_assert (xml, "syntax_editor"); text_view = get_widget_assert (xml, "syntax_text_view"); - se->buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(text_view)); + se->buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (text_view)); se->lexer = lex_create (the_source_stream); g_signal_connect (get_widget_assert (xml,"file_new_syntax"), @@ -346,19 +361,16 @@ new_syntax_editor (void) e->window); -#if 0 - - g_signal_connect (get_widget_assert (xml,"file_save"), + g_signal_connect (get_widget_assert (xml, "file_save"), "activate", G_CALLBACK (on_syntax_save), se); - g_signal_connect (get_widget_assert (xml,"file_save_as"), + g_signal_connect (get_widget_assert (xml, "file_save_as"), "activate", G_CALLBACK (on_syntax_save_as), se); -#endif g_signal_connect (get_widget_assert (xml,"file_quit"), "activate", @@ -424,10 +436,15 @@ save_editor_to_file (struct syntax_editor *se, GtkTextIter start, stop; gchar *text; + gchar *suffixedname; gchar *glibfilename; g_assert (filename); - glibfilename = g_filename_from_utf8 (filename, -1, 0, 0, err); + suffixedname = append_suffix (filename); + + glibfilename = g_filename_from_utf8 (suffixedname, -1, 0, 0, err); + + g_free ( suffixedname); if ( ! glibfilename ) return FALSE; @@ -494,7 +511,7 @@ open_syntax_window (GtkMenuItem *menuitem, gpointer parent) GtkWidget *dialog = gtk_file_chooser_dialog_new (_("Open Syntax"), - GTK_WINDOW(parent), + GTK_WINDOW (parent), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, @@ -504,7 +521,7 @@ open_syntax_window (GtkMenuItem *menuitem, gpointer parent) gtk_file_filter_set_name (filter, _("Syntax Files (*.sps) ")); gtk_file_filter_add_pattern (filter, "*.sps"); gtk_file_filter_add_pattern (filter, "*.SPS"); - gtk_file_chooser_add_filter (GTK_FILE_CHOOSER(dialog), filter); + gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (dialog), filter); filter = gtk_file_filter_new (); gtk_file_filter_set_name (filter, _("All Files"));