+static void
+help_clicked (GtkWidget *w, gpointer data)
+{
+ GtkWidget *toplevel = gtk_widget_get_toplevel (w);
+ PsppireDialog *dialog;
+
+ if ( ! PSPPIRE_IS_DIALOG (toplevel))
+ return;
+
+ dialog = PSPPIRE_DIALOG (toplevel);
+
+ psppire_dialog_help (dialog);
+}
+
+static void
+on_validity_change (GtkWidget *toplevel, gboolean valid, gpointer data)
+{
+ PsppireButtonbox *bb = data;
+
+ /* Set the sensitivity of all the 'executive order' buttons */
+ gtk_widget_set_sensitive (GTK_WIDGET (bb->button[PSPPIRE_BUTTON_OK]), valid);
+ gtk_widget_set_sensitive (GTK_WIDGET (bb->button[PSPPIRE_BUTTON_PASTE]), valid);
+ gtk_widget_set_sensitive (GTK_WIDGET (bb->button[PSPPIRE_BUTTON_GOTO]), valid);
+ gtk_widget_set_sensitive (GTK_WIDGET (bb->button[PSPPIRE_BUTTON_CONTINUE]), valid);
+}
+
+static gboolean
+on_key_press (GtkWidget *w, GdkEventKey *e, gpointer ud)
+{
+ PsppireButtonbox *bb = PSPPIRE_BUTTONBOX (ud);
+ if (e->keyval == GDK_KEY_Escape)
+ {
+ g_signal_emit_by_name (bb->button[PSPPIRE_BUTTON_CANCEL], "activate");
+ g_signal_emit_by_name (bb->button[PSPPIRE_BUTTON_CLOSE], "activate");
+ }
+ return FALSE;
+}
+
+
+static void
+on_realize (GtkWidget *buttonbox, gpointer data)
+{
+ GtkWidget *toplevel = gtk_widget_get_toplevel (buttonbox);
+
+ if (PSPPIRE_IS_DIALOG (toplevel))
+ {
+ g_signal_connect (toplevel, "validity-changed",
+ G_CALLBACK (on_validity_change), buttonbox);
+
+ g_signal_connect (toplevel, "key-press-event",
+ G_CALLBACK (on_key_press), buttonbox);
+ }
+
+ set_default (PSPPIRE_BUTTONBOX (buttonbox));
+}
+