X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-window.c;h=c1784ac1f14d7df9a2e1880b27b971de8dc8e624;hb=refs%2Fbuilds%2F20130214032106%2Fpspp;hp=f6cdb7b24368f5686832569799a3beb522ec05a7;hpb=34bfbdd99ac80a84447cb8bbc46de726d0bdc7fc;p=pspp diff --git a/src/ui/gui/psppire-window.c b/src/ui/gui/psppire-window.c index f6cdb7b243..c1784ac1f1 100644 --- a/src/ui/gui/psppire-window.c +++ b/src/ui/gui/psppire-window.c @@ -1,5 +1,5 @@ /* PSPPIRE - a graphical user interface for PSPP. - Copyright (C) 2009, 2010, 2011 Free Software Foundation + Copyright (C) 2009, 2010, 2011, 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 @@ -17,6 +17,7 @@ #include #include "psppire-window.h" +#include "psppire-window-base.h" #include @@ -28,10 +29,10 @@ #define N_(msgid) msgid #include "data/any-reader.h" +#include "data/file-name.h" #include "data/dataset.h" #include "helper.h" -#include "psppire-conf.h" #include "psppire-data-window.h" #include "psppire-encoding-selector.h" #include "psppire-syntax-window.h" @@ -66,7 +67,7 @@ psppire_window_get_type (void) }; psppire_window_type = - g_type_register_static (GTK_TYPE_WINDOW, "PsppireWindow", + g_type_register_static (PSPPIRE_TYPE_WINDOW_BASE, "PsppireWindow", &psppire_window_info, G_TYPE_FLAG_ABSTRACT); } @@ -228,17 +229,6 @@ psppire_window_get_property (GObject *object, } -static void -on_realize (GtkWindow *window, gpointer data) -{ - PsppireConf *conf = psppire_conf_new (); - - const gchar *base = G_OBJECT_TYPE_NAME (window); - - psppire_conf_set_window_geometry (conf, base, window); -} - - static void psppire_window_finalize (GObject *object) { @@ -350,11 +340,12 @@ insert_menuitem_into_menu (PsppireWindow *window, gpointer key) /* Add a separator before adding the first real item. If we add a separator at any other time, sometimes GtkUIManager removes it. */ - if (g_hash_table_size (window->menuitem_table) == 0) + if (!window->added_separator) { GtkWidget *separator = gtk_separator_menu_item_new (); gtk_widget_show (separator); gtk_menu_shell_append (window->menu, separator); + window->added_separator = TRUE; } filename = g_filename_display_name (key); @@ -422,13 +413,6 @@ on_delete (PsppireWindow *w, GdkEvent *event, gpointer user_data) { PsppireWindowRegister *reg = psppire_window_register_new (); - const gchar *base = G_OBJECT_TYPE_NAME (w); - - PsppireConf *conf = psppire_conf_new (); - - psppire_conf_save_window_geometry (conf, base, GTK_WINDOW (w)); - - if ( w->dirty ) { gint response = psppire_window_query_save (w); @@ -484,14 +468,12 @@ psppire_window_init (PsppireWindow *window) G_CALLBACK (remove_menuitem), window); + window->added_separator = FALSE; window->dirty = FALSE; g_signal_connect_swapped (window, "delete-event", G_CALLBACK (on_delete), window); g_object_set (window, "icon-name", "pspp", NULL); - - g_signal_connect (window, "realize", - G_CALLBACK (on_realize), window); } /* @@ -706,6 +688,28 @@ psppire_window_load (PsppireWindow *w, const gchar *file) return ok; } + +static void +on_selection_changed (GtkFileChooser *chooser, GtkWidget *encoding_selector) +{ + const gchar *sysname; + + const gchar *name = gtk_file_chooser_get_filename (chooser); + + if ( NULL == name ) + return; + + sysname = convert_glib_filename_to_system_filename (name, NULL); + + if ( ! fn_exists (sysname)) + { + gtk_widget_set_sensitive (encoding_selector, FALSE); + return; + } + + gtk_widget_set_sensitive (encoding_selector, ! any_reader_may_open (sysname)); +} + GtkWidget * psppire_window_file_chooser_dialog (PsppireWindow *toplevel) { @@ -769,8 +773,17 @@ psppire_window_file_chooser_dialog (PsppireWindow *toplevel) free (dir_name); } - gtk_file_chooser_set_extra_widget ( - GTK_FILE_CHOOSER (dialog), psppire_encoding_selector_new ("Auto", true)); + + { + GtkWidget *encoding_selector = psppire_encoding_selector_new ("Auto", true); + + gtk_widget_set_sensitive (encoding_selector, FALSE); + + g_signal_connect (dialog, "selection-changed", G_CALLBACK (on_selection_changed), + encoding_selector); + + gtk_file_chooser_set_extra_widget (GTK_FILE_CHOOSER (dialog), encoding_selector); + } return dialog; }