Fix critical when opening fonts dialog
[pspp-builds.git] / src / ui / gui / psppire-data-window.c
index 7565dbb4b7ca223c434e6527701a762b5c14af7c..c754f73038f69e49238b2c881e004f7f65a0c4ad 100644 (file)
@@ -448,14 +448,15 @@ name_has_suffix (const gchar *name)
 
 /* Save DE to file */
 static void
-save_file (PsppireDataWindow *de)
+save_file (PsppireWindow *w)
 {
   gchar *fn = NULL;
   GString *fnx;
   struct getl_interface *sss;
   struct string file_name ;
+  PsppireDataWindow *de = PSPPIRE_DATA_WINDOW (w);
 
-  g_object_get (de, "filename", &fn, NULL);
+  g_object_get (w, "filename", &fn, NULL);
 
   fnx = g_string_new (fn);
 
@@ -485,8 +486,6 @@ save_file (PsppireDataWindow *de)
   ds_destroy (&file_name);
 
   execute_syntax (sss);
-
-  psppire_window_set_unsaved (PSPPIRE_WINDOW (de), FALSE);
 }
 
 
@@ -578,7 +577,7 @@ data_save_as_dialog (PsppireDataWindow *de)
 
        psppire_window_set_filename (PSPPIRE_WINDOW (de), filename->str);
 
-       save_file (de);
+       save_file (PSPPIRE_WINDOW (de));
 
        g_string_free (filename, TRUE);
       }
@@ -599,7 +598,7 @@ data_save (PsppireWindow *de)
   const gchar *fn = psppire_window_get_filename (de);
 
   if ( NULL != fn)
-    save_file (PSPPIRE_DATA_WINDOW (de));
+    psppire_window_save (de);
   else
     data_save_as_dialog (PSPPIRE_DATA_WINDOW (de));
 }
@@ -691,6 +690,7 @@ static void
 fonts_activate (GtkMenuItem *menuitem, gpointer data)
 {
   PsppireDataWindow  *de = PSPPIRE_DATA_WINDOW (data);
+  GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (de));
   PangoFontDescription *current_font;
   gchar *font_name;
   GtkWidget *dialog =
@@ -705,8 +705,8 @@ fonts_activate (GtkMenuItem *menuitem, gpointer data)
   g_free (font_name);
 
   gtk_window_set_transient_for (GTK_WINDOW (dialog),
-                               GTK_WINDOW (get_widget_assert (de->builder,
-                                                              "data_editor")));
+                               GTK_WINDOW (toplevel));
+
   if ( GTK_RESPONSE_OK == gtk_dialog_run (GTK_DIALOG (dialog)) )
     {
       const gchar *font = gtk_font_selection_dialog_get_font_name
@@ -1016,7 +1016,7 @@ resolve_action (GtkBuilder *builder, const gchar *action, const gchar *proxy)
 static void
 set_unsaved (gpointer w)
 {
-  psppire_window_set_unsaved (PSPPIRE_WINDOW (w), TRUE);
+  psppire_window_set_unsaved (PSPPIRE_WINDOW (w));
 }
 
 static void
@@ -1051,15 +1051,6 @@ psppire_data_window_init (PsppireDataWindow *de)
 
   connect_help (de->builder);
 
-  g_object_ref (menubar);
-  gtk_widget_unparent (menubar);
-
-  g_object_ref (hb);
-  gtk_widget_unparent (hb);
-
-  g_object_ref (sb);
-  gtk_widget_unparent (sb);
-
   gtk_box_pack_start (GTK_BOX (box), menubar, FALSE, TRUE, 0);
   gtk_box_pack_start (GTK_BOX (box), hb, FALSE, TRUE, 0);
   gtk_box_pack_start (GTK_BOX (box), GTK_WIDGET (de->data_editor), TRUE, TRUE, 0);
@@ -1111,8 +1102,10 @@ psppire_data_window_init (PsppireDataWindow *de)
 
 
   {
+    GtkWidget *toolbarbutton = get_widget_assert (de->builder, "button-open");
+
     GtkAction *action_data_open =
-      resolve_action (de->builder, "file_open_data", "button-open");
+      resolve_action (de->builder, "file_open_data", NULL);
 
     g_object_set (action_data_open,
                  "tooltip",  _("Open a data file"),
@@ -1121,6 +1114,9 @@ psppire_data_window_init (PsppireDataWindow *de)
 
     g_signal_connect (action_data_open, "activate",
                      G_CALLBACK (open_data_dialog), de);
+
+    g_signal_connect_swapped (toolbarbutton, "clicked",
+                     G_CALLBACK (gtk_action_activate), action_data_open);
   }
 
 
@@ -1793,6 +1789,6 @@ psppire_data_window_new (void)
 static void
 psppire_data_window_iface_init (PsppireWindowIface *iface)
 {
-  iface->save = data_save;
+  iface->save = save_file;
   iface->load = load_file;
 }