X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-buttonbox.c;h=071751ad6fdeb6372cdd590c1ea8dcf47a347a5e;hb=a1edd7f28a94b05b3fd48850e80dd0b96bead96e;hp=da39e0867d3968fbf927fb6c47cafdaf634aad20;hpb=97a777315ec2f2000ac67da1f405323a5e2294e2;p=pspp-builds.git diff --git a/src/ui/gui/psppire-buttonbox.c b/src/ui/gui/psppire-buttonbox.c index da39e086..071751ad 100644 --- a/src/ui/gui/psppire-buttonbox.c +++ b/src/ui/gui/psppire-buttonbox.c @@ -56,7 +56,7 @@ psppire_button_box_get_type (void) }; button_box_type = g_type_register_static (GTK_TYPE_BUTTON_BOX, - "PsppireButtonBox", &button_box_info, 0); + "PsppireButtonBox", &button_box_info, G_TYPE_FLAG_ABSTRACT); } return button_box_type; @@ -142,7 +142,7 @@ psppire_button_box_class_init (PsppireButtonBoxClass *class) g_param_spec_flags ("buttons", _("Buttons"), _("The mask that decides what buttons appear in the button box"), - G_TYPE_PSPPIRE_BUTTON_MASK, + PSPPIRE_TYPE_BUTTON_MASK, PSPPIRE_BUTTON_OK_MASK | PSPPIRE_BUTTON_CANCEL_MASK | PSPPIRE_BUTTON_RESET_MASK | @@ -225,6 +225,31 @@ refresh_clicked (GtkWidget *w, gpointer data) } + +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 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); + } +} + static void psppire_button_box_init (PsppireButtonBox *bb) { @@ -247,6 +272,12 @@ psppire_button_box_init (PsppireButtonBox *bb) bb->button[PSPPIRE_BUTTON_CONTINUE] = gtk_button_new_with_mnemonic (_("Continue")); + GTK_WIDGET_SET_FLAGS (bb->button[PSPPIRE_BUTTON_CONTINUE], + GTK_CAN_DEFAULT); + + g_signal_connect (bb->button[PSPPIRE_BUTTON_CONTINUE], "realize", + G_CALLBACK (gtk_widget_grab_default), NULL); + gtk_box_pack_start_defaults (GTK_BOX (bb), bb->button[PSPPIRE_BUTTON_CONTINUE]); g_signal_connect (bb->button[PSPPIRE_BUTTON_CONTINUE], "clicked", @@ -299,6 +330,8 @@ psppire_button_box_init (PsppireButtonBox *bb) g_value_unset (&value); } + + g_signal_connect (bb, "realize", G_CALLBACK (on_realize), NULL); }