X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fpsppire-buttonbox.c;h=68a147f74ca1322777fb681bab993a2423f15e0b;hb=refs%2Fheads%2Fctables7;hp=87989cf12bfc76e4a6ccf8f57714afea41a93437;hpb=3dd0f6ae0d5eb73a2270a243e443c4ae03c2c16e;p=pspp diff --git a/src/ui/gui/psppire-buttonbox.c b/src/ui/gui/psppire-buttonbox.c index 87989cf12b..68a147f74c 100644 --- a/src/ui/gui/psppire-buttonbox.c +++ b/src/ui/gui/psppire-buttonbox.c @@ -31,37 +31,7 @@ GType psppire_button_flags_get_type (void); - -static void psppire_button_box_class_init (PsppireButtonboxClass *); -static void psppire_button_box_init (PsppireButtonbox *); - - -GType -psppire_buttonbox_get_type (void) -{ - static GType button_box_type = 0; - - if (!button_box_type) - { - static const GTypeInfo button_box_info = - { - sizeof (PsppireButtonboxClass), - NULL, /* base_init */ - NULL, /* base_finalize */ - (GClassInitFunc) psppire_button_box_class_init, - NULL, /* class_finalize */ - NULL, /* class_data */ - sizeof (PsppireButtonbox), - 0, - (GInstanceInitFunc) psppire_button_box_init, - }; - - button_box_type = g_type_register_static (GTK_TYPE_BUTTON_BOX, - "PsppireButtonbox", &button_box_info, 0); - } - - return button_box_type; -} +G_DEFINE_TYPE (PsppireButtonBox, psppire_button_box, GTK_TYPE_BUTTON_BOX) enum { PROP_BUTTONS = 1, @@ -69,11 +39,11 @@ enum { }; static void -set_default (PsppireButtonbox *bb) +set_default (PsppireButtonBox *bb) { int i; - for (i = 0 ; i < n_PsppireButtonboxButtons ; ++i ) + for (i = 0 ; i < n_PsppireButtonBoxButtons ; ++i) if (bb->def == (1 << i)) { gtk_widget_set_can_default (bb->button[i], TRUE); @@ -89,13 +59,13 @@ psppire_buttonbox_set_property (GObject *object, { gint i; guint flags; - PsppireButtonbox *bb = PSPPIRE_BUTTONBOX (object); + PsppireButtonBox *bb = PSPPIRE_BUTTON_BOX (object); switch (prop_id) { case PROP_BUTTONS: flags = g_value_get_flags (value); - for (i = 0 ; i < n_PsppireButtonboxButtons ; ++i ) + for (i = 0 ; i < n_PsppireButtonBoxButtons ; ++i) g_object_set (bb->button[i], "visible", 0x01 & (flags >> i) , NULL); break; @@ -119,17 +89,17 @@ psppire_buttonbox_get_property (GObject *object, guint flags = 0; gint i; - PsppireButtonbox *bb = PSPPIRE_BUTTONBOX (object); + PsppireButtonBox *bb = PSPPIRE_BUTTON_BOX (object); switch (prop_id) { case PROP_BUTTONS: - for (i = 0 ; i < n_PsppireButtonboxButtons ; ++i ) + for (i = 0 ; i < n_PsppireButtonBoxButtons ; ++i) { gboolean visibility; g_object_get (bb->button[i], "visible", &visibility, NULL); - if ( visibility ) + if (visibility) flags |= (0x01 << i); } @@ -138,6 +108,7 @@ psppire_buttonbox_get_property (GObject *object, case PROP_DEFAULT: g_value_set_flags (value, bb->def); + break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -146,23 +117,11 @@ psppire_buttonbox_get_property (GObject *object, } -typedef enum - { - PSPPIRE_BUTTON_OK_MASK = (1 << PSPPIRE_BUTTON_OK), - PSPPIRE_BUTTON_GOTO_MASK = (1 << PSPPIRE_BUTTON_GOTO), - PSPPIRE_BUTTON_CONTINUE_MASK = (1 << PSPPIRE_BUTTON_CONTINUE), - PSPPIRE_BUTTON_CANCEL_MASK = (1 << PSPPIRE_BUTTON_CANCEL), - PSPPIRE_BUTTON_CLOSE_MASK = (1 << PSPPIRE_BUTTON_CLOSE), - PSPPIRE_BUTTON_HELP_MASK = (1 << PSPPIRE_BUTTON_HELP), - PSPPIRE_BUTTON_RESET_MASK = (1 << PSPPIRE_BUTTON_RESET), - PSPPIRE_BUTTON_PASTE_MASK = (1 << PSPPIRE_BUTTON_PASTE) - } PsppireButtonMask; - static GParamSpec *button_flags; static GParamSpec *default_flags; static void -psppire_button_box_class_init (PsppireButtonboxClass *class) +psppire_button_box_class_init (PsppireButtonBoxClass *class) { GObjectClass *object_class = G_OBJECT_CLASS (class); @@ -205,7 +164,7 @@ close_and_respond (GtkWidget *w, gint response) /* If we're not in a psppire dialog (for example when in glade) then do nothing */ - if ( ! PSPPIRE_IS_DIALOG (toplevel)) + if (! PSPPIRE_IS_DIALOG (toplevel)) return; dialog = PSPPIRE_DIALOG (toplevel); @@ -267,7 +226,7 @@ refresh_clicked (GtkWidget *w, gpointer data) GtkWidget *toplevel = gtk_widget_get_toplevel (w); PsppireDialog *dialog; - if ( ! PSPPIRE_IS_DIALOG (toplevel)) + if (! PSPPIRE_IS_DIALOG (toplevel)) return; dialog = PSPPIRE_DIALOG (toplevel); @@ -281,7 +240,7 @@ help_clicked (GtkWidget *w, gpointer data) GtkWidget *toplevel = gtk_widget_get_toplevel (w); PsppireDialog *dialog; - if ( ! PSPPIRE_IS_DIALOG (toplevel)) + if (! PSPPIRE_IS_DIALOG (toplevel)) return; dialog = PSPPIRE_DIALOG (toplevel); @@ -292,7 +251,7 @@ help_clicked (GtkWidget *w, gpointer data) static void on_validity_change (GtkWidget *toplevel, gboolean valid, gpointer data) { - PsppireButtonbox *bb = 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); @@ -301,21 +260,39 @@ on_validity_change (GtkWidget *toplevel, gboolean valid, gpointer data) 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_BUTTON_BOX (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)) + 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)); + + set_default (PSPPIRE_BUTTON_BOX (buttonbox)); } + static void -psppire_button_box_init (PsppireButtonbox *bb) +psppire_button_box_init (PsppireButtonBox *bb) { bb->def = PSPPIRE_BUTTON_CONTINUE; @@ -391,7 +368,7 @@ psppire_button_box_init (PsppireButtonbox *bb) flags = g_value_get_flags (&value); - for (i = 0 ; i < n_PsppireButtonboxButtons ; ++i ) + for (i = 0 ; i < n_PsppireButtonBoxButtons ; ++i) g_object_set (bb->button[i], "visible", 0x01 & (flags >> i) , NULL); g_value_unset (&value); @@ -427,3 +404,8 @@ psppire_button_flags_get_type (void) return ftype; } +GtkWidget* +psppire_button_box_new (void) +{ + return GTK_WIDGET (g_object_new (psppire_button_box_get_type (), NULL)); +}