Use the msg function to report errors wherever possible.
[pspp] / src / ui / gui / psppire-output-window.c
index c59930ccef007ec0c9666b282fc3bd265357cb52..8a29fab18cbc1bf4ae38e87c35156687f6b7d736 100644 (file)
@@ -1,5 +1,5 @@
 /* PSPPIRE - a graphical user interface for PSPP.
-   Copyright (C) 2008, 2009, 2010, 2011, 2012  Free Software Foundation
+   Copyright (C) 2008, 2009, 2010, 2011, 2012, 2013  Free Software Foundation
 
    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
@@ -38,7 +38,6 @@
 #include "ui/gui/builder-wrapper.h"
 #include "ui/gui/psppire-output-window.h"
 
-#include "gl/error.h"
 #include "gl/tmpdir.h"
 #include "gl/xalloc.h"
 #include "gl/c-xvasprintf.h"
@@ -653,14 +652,17 @@ psppire_output_window_export (PsppireOutputWindow *window)
 
   if ( response == GTK_RESPONSE_ACCEPT )
     {
-      int file_type = gtk_combo_box_get_active (GTK_COMBO_BOX (combo));
-      char *filename = gtk_file_chooser_get_filename (chooser);
+      gint file_type = gtk_combo_box_get_active (GTK_COMBO_BOX (combo));
+      gchar *filename = gtk_file_chooser_get_filename (chooser);
       struct string_map options;
 
       g_return_if_fail (filename);
 
       if (file_type == FT_AUTO)
        {
+          /* If the "Infer file type from extension" option was chosen,
+             search for the respective type in the list.
+             (It's a O(n) search, but fortunately n is small). */
          gint i;
          for (i = 1 ; i < N_EXTENSIONS ; ++i)
            {
@@ -671,7 +673,17 @@ psppire_output_window_export (PsppireOutputWindow *window)
                }
            }
        }
-
+      else if (! g_str_has_suffix (filename, ft[file_type].ext))
+        {
+          /* If an explicit document format was chosen, and if the chosen
+             filename does not already have that particular "extension",
+             then append it.
+           */
+
+          gchar *of = filename;
+          filename = g_strconcat (filename, ft[file_type].ext, NULL);
+          g_free (of);
+        }
       
       string_map_init (&options);
       string_map_insert (&options, "output-file", filename);
@@ -757,7 +769,7 @@ clipboard_get_cb (GtkClipboard     *clipboard,
   if (path_search (dirname, sizeof dirname, NULL, NULL, true)
       || mkdtemp (dirname) == NULL)
     {
-      error (0, errno, _("failed to create temporary directory"));
+      msg_error (errno, _("failed to create temporary directory during clipboard operation"));
       return;
     }
   filename = xasprintf ("%s/clip.tmp", dirname);