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,
};
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);
{
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;
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);
}
case PROP_DEFAULT:
g_value_set_flags (value, bb->def);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
}
-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);
default_flags =
g_param_spec_flags ("default",
"Default",
- "The mask that decides what what button grabs the default",
+ "The mask that decides what button grabs the default",
PSPPIRE_TYPE_BUTTON_MASK,
0,
G_PARAM_READWRITE);
/* 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);
GtkWidget *toplevel = gtk_widget_get_toplevel (w);
PsppireDialog *dialog;
- if ( ! PSPPIRE_IS_DIALOG (toplevel))
+ if (! PSPPIRE_IS_DIALOG (toplevel))
return;
dialog = PSPPIRE_DIALOG (toplevel);
GtkWidget *toplevel = gtk_widget_get_toplevel (w);
PsppireDialog *dialog;
- if ( ! PSPPIRE_IS_DIALOG (toplevel))
+ if (! PSPPIRE_IS_DIALOG (toplevel))
return;
dialog = PSPPIRE_DIALOG (toplevel);
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);
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;
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);
return ftype;
}
+GtkWidget*
+psppire_button_box_new (void)
+{
+ return GTK_WIDGET (g_object_new (psppire_button_box_get_type (), NULL));
+}