X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;ds=sidebyside;f=src%2Fui%2Fgui%2Fsyntax-editor.c;h=a9564cb1a563fc959cee8f5c9dc80fe40d914f84;hb=09a1109ddc398f36fe720208e1d38053850cbd2a;hp=d8bf15b9cd8477ba73211c87e857a36326aa1602;hpb=75fe94ea24fd7b12a0d99b8f36a79d8423e668d4;p=pspp diff --git a/src/ui/gui/syntax-editor.c b/src/ui/gui/syntax-editor.c index d8bf15b9cd..a9564cb1a5 100644 --- a/src/ui/gui/syntax-editor.c +++ b/src/ui/gui/syntax-editor.c @@ -33,6 +33,7 @@ #include "window-manager.h" +#include #include #include #include @@ -46,6 +47,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. */ @@ -62,7 +78,7 @@ save_if_modified (struct syntax_editor *se) 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), @@ -84,8 +100,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); @@ -96,13 +111,12 @@ save_if_modified (struct syntax_editor *se) return ; } - gtk_widget_destroy (e->window); + gtk_widget_destroy (GTK_WIDGET (e->window)); } /* 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; @@ -156,9 +170,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 +180,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); + } } } @@ -199,14 +215,16 @@ static void execute_syntax (const struct syntax_editor *se, GtkTextIter start, GtkTextIter stop) { + g_return_if_fail (proc_has_source (the_dataset)); + getl_append_source (the_source_stream, create_syntax_editor_source (se, start, stop)); for (;;) { + const struct dictionary *dict = dataset_dict (the_dataset); int result = cmd_parse (se->lexer, the_dataset, - proc_has_source (the_dataset) - ? CMD_STATE_DATA : CMD_STATE_INITIAL); - + dict_get_var_cnt (dict) > 0 ? + CMD_STATE_DATA : CMD_STATE_INITIAL); if (result == CMD_EOF || result == CMD_FINISH) break; } @@ -310,11 +328,13 @@ new_syntax_editor (void) struct syntax_editor *se ; struct editor_window *e; + connect_help (xml); + se = g_malloc (sizeof (*se)); e = (struct editor_window *)se; - e->window = get_widget_assert (xml, "syntax_editor"); + e->window = GTK_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->lexer = lex_create (the_source_stream); @@ -345,20 +365,22 @@ new_syntax_editor (void) G_CALLBACK (about_new), e->window); + g_signal_connect (get_widget_assert (xml,"help_reference"), + "activate", + G_CALLBACK (reference_manual), + NULL); -#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", @@ -389,6 +411,13 @@ new_syntax_editor (void) se); + g_signal_connect (get_widget_assert (xml,"windows_minimise_all"), + "activate", + G_CALLBACK (minimise_all_windows), + NULL); + + + g_object_unref (xml); g_signal_connect (e->window, "delete-event", @@ -424,10 +453,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;