X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire.c;h=1532cbd316fca466ad9f6ef5169db23f353cfb39;hb=900b98d3fb6cde827807023ac10e4df3d711c03d;hp=ed6d29a3150606d5c42d46357a27e48f6a93a798;hpb=890a97adb0e898a80d1fb758714565ed9ce7e143;p=pspp diff --git a/src/ui/gui/psppire.c b/src/ui/gui/psppire.c index ed6d29a315..1532cbd316 100644 --- a/src/ui/gui/psppire.c +++ b/src/ui/gui/psppire.c @@ -1,5 +1,5 @@ /* PSPPIRE - a graphical user interface for PSPP. - Copyright (C) 2004, 2005, 2006, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation + Copyright (C) 2004, 2005, 2006, 2009, 2010, 2011, 2012, 2013, 2014, 2016 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 @@ -28,7 +28,6 @@ #include "data/dataset.h" #include "data/datasheet.h" #include "data/file-handle-def.h" -#include "data/file-name.h" #include "data/session.h" #include "data/settings.h" @@ -65,8 +64,6 @@ #include "gl/relocatable.h" static void create_icon_factory (void); -static gchar *local_to_filename_encoding (const char *fn); - #define _(msgid) gettext (msgid) #define N_(msgid) msgid @@ -129,11 +126,26 @@ initialize (const struct init_source *is) break; case 14: { - if (is->file) + if (is->filename_arg != -1) { - gchar *filename = local_to_filename_encoding (is->file); - - int retval = any_reader_detect (filename, NULL); +#ifndef G_OS_WIN32 + const char *file = (*is->argv)[is->filename_arg]; + const gchar *local_encoding = NULL; + g_get_charset (&local_encoding); +#else + char **as = g_win32_get_command_line (); + const char *file = as[is->filename_arg]; + const gchar *local_encoding = "UTF-8"; +#endif + + struct file_handle *fh = fh_create_file (NULL, + file, + local_encoding, + fh_default_properties ()); + + const char *filename = fh_get_file_name (fh); + + int retval = any_reader_detect (fh, NULL); /* Check to see if the file is a .sav or a .por file. If not assume that it is a syntax file */ @@ -144,7 +156,8 @@ initialize (const struct init_source *is) create_data_window (); open_syntax_window (filename, NULL); } - g_free (filename); + + fh_unref (fh); } else { @@ -169,21 +182,9 @@ de_initialize (void) i18n_done (); } -static void -func (gpointer key, gpointer value, gpointer data) -{ - gboolean rv; - PsppireWindow *window = PSPPIRE_WINDOW (value); - - g_signal_emit_by_name (window, "delete-event", 0, &rv); -} - void psppire_quit (void) { - PsppireWindowRegister *reg = psppire_window_register_new (); - psppire_window_register_foreach (reg, func, NULL); - gtk_main_quit (); } @@ -329,67 +330,8 @@ create_icon_factory (void) gtk_icon_factory_add_default (factory); } - -/* - Convert a filename from the local encoding into "filename" encoding. - The return value will be allocated on the heap. It is the responsibility - of the caller to free it. - */ -static gchar * -local_to_filename_encoding (const char *fn) -{ - gchar *filename = NULL; - gchar *utf8 = NULL; - const gchar *local_encoding = NULL; - gsize written = -1; - const gboolean local_is_utf8 = g_get_charset (&local_encoding); - - /* There seems to be no Glib function to convert from local encoding - to filename encoding. Therefore it has to be done in two steps: - the intermediate encoding is UTF8. - - Either step could fail. However, in many cases the file can still - be loaded even if the conversion fails. So in those cases, after showing - a warning, we simply copy the locally encoded filename to the destination - and hope for the best. - */ - - if ( local_is_utf8) - { - utf8 = xstrdup (fn); - } - else - { - GError *err = NULL; - utf8 = g_locale_to_utf8 (fn, -1, NULL, &written, &err); - if ( NULL == utf8) - { - g_warning ("Cannot convert filename from local encoding `%s' to UTF-8: %s", - local_encoding, - err->message); - g_clear_error (&err); - } - } - if ( NULL != utf8) - { - GError *err = NULL; - filename = g_filename_from_utf8 (utf8, written, NULL, NULL, &err); - if ( NULL == filename) - { - g_warning ("Cannot convert filename from UTF8 to filename encoding: %s", - err->message); - g_clear_error (&err); - } - } - - g_free (utf8); - - if ( filename == NULL) - filename = xstrdup (fn); - - return filename; -} + static void handle_msg (const struct msg *m_, void *lexer_)