X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fui%2Fgui%2Fval-labs-dialog.c;h=ab56135ccc637dbbf6448fc34eac0e3e7c49748f;hb=7d4150d7cba15550753a0a574685de26656c0633;hp=56399aa271f3b3b6ee4739c33b3640a008c6472b;hpb=3ccf4f19ece6c4da5a2d13173c032011faf330b8;p=pspp diff --git a/src/ui/gui/val-labs-dialog.c b/src/ui/gui/val-labs-dialog.c index 56399aa271..ab56135ccc 100644 --- a/src/ui/gui/val-labs-dialog.c +++ b/src/ui/gui/val-labs-dialog.c @@ -1,5 +1,5 @@ /* PSPPIRE - a graphical user interface for PSPP. - Copyright (C) 2005, 2009, 2010, 2011, 2012, 2015 Free Software Foundation + Copyright (C) 2005, 2009, 2010, 2011, 2012, 2015, 2016 Free Software Foundation This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -48,6 +48,8 @@ enum PROP_VALUE_LABELS }; +static void do_change (PsppireValLabsDialog *); + static void psppire_val_labs_dialog_set_property (GObject *object, guint prop_id, @@ -195,6 +197,15 @@ on_label_entry_change (GtkEntry *entry, gpointer data) value_destroy (&v, val_labs_get_width (dialog->labs)); } +/* This callback occurs when Enter is pressed in the label entry box. */ +static void +on_label_entry_activate (GtkEntry *entry, gpointer data) +{ + PsppireValLabsDialog *dialog = data; + do_change (dialog); +} + +/* Return the value-label pair currently selected in the dialog box */ /* Set the TREEVIEW list cursor to the item which has the value VAL */ static void @@ -276,8 +287,15 @@ on_value_entry_change (GtkEntry *entry, gpointer data) value_destroy (&v, val_labs_get_width (dialog->labs)); } +/* This callback occurs when Enter is pressed in the value entry box. */ +static void +on_value_entry_activate (GtkEntry *entry, gpointer data) +{ + PsppireValLabsDialog *dialog = data; + + gtk_widget_grab_focus (dialog->label_entry); +} -/* Return the value-label pair currently selected in the dialog box */ static gboolean get_selected_tuple (PsppireValLabsDialog *dialog, union value *valuep, const char **label) @@ -308,7 +326,7 @@ get_selected_tuple (PsppireValLabsDialog *dialog, if (vl != NULL) *label = val_lab_get_escaped_label (vl); } - + return TRUE; } @@ -320,22 +338,28 @@ static void on_change (GtkWidget *w, gpointer data) { PsppireValLabsDialog *dialog = data; + do_change (dialog); +} +static void +do_change (PsppireValLabsDialog *dialog) +{ const gchar *val_text = gtk_entry_get_text (GTK_ENTRY (dialog->value_entry)); union value v; - text_to_value__ (val_text, &dialog->format, dialog->encoding, &v); - - val_labs_replace (dialog->labs, &v, - gtk_entry_get_text (GTK_ENTRY (dialog->label_entry))); + if (text_to_value__ (val_text, &dialog->format, dialog->encoding, &v)) + { + val_labs_replace (dialog->labs, &v, + gtk_entry_get_text (GTK_ENTRY (dialog->label_entry))); - gtk_widget_set_sensitive (dialog->change_button, FALSE); + gtk_widget_set_sensitive (dialog->change_button, FALSE); - repopulate_dialog (dialog); - gtk_widget_grab_focus (dialog->value_entry); + repopulate_dialog (dialog); + gtk_widget_grab_focus (dialog->value_entry); - value_destroy (&v, val_labs_get_width (dialog->labs)); + value_destroy (&v, val_labs_get_width (dialog->labs)); + } } /* Callback which occurs when the "Add" button is clicked */ @@ -348,19 +372,20 @@ on_add (GtkWidget *w, gpointer data) const gchar *text = gtk_entry_get_text (GTK_ENTRY (dialog->value_entry)); - text_to_value__ (text, &dialog->format, dialog->encoding, &v); - - if (val_labs_add (dialog->labs, &v, - gtk_entry_get_text - ( GTK_ENTRY (dialog->label_entry)) ) ) + if (text_to_value__ (text, &dialog->format, dialog->encoding, &v)) { - gtk_widget_set_sensitive (dialog->add_button, FALSE); + if (val_labs_add (dialog->labs, &v, + gtk_entry_get_text + ( GTK_ENTRY (dialog->label_entry)) ) ) + { + gtk_widget_set_sensitive (dialog->add_button, FALSE); - repopulate_dialog (dialog); - gtk_widget_grab_focus (dialog->value_entry); - } + repopulate_dialog (dialog); + gtk_widget_grab_focus (dialog->value_entry); + } - value_destroy (&v, val_labs_get_width (dialog->labs)); + value_destroy (&v, val_labs_get_width (dialog->labs)); + } } /* Callback which occurs when the "Remove" button is clicked */ @@ -374,7 +399,7 @@ on_remove (GtkWidget *w, gpointer data) if (! get_selected_tuple (dialog, &value, NULL)) return; - + vl = val_labs_lookup (dialog->labs, &value); if (vl != NULL) val_labs_remove (dialog->labs, vl); @@ -401,7 +426,7 @@ on_select_row (GtkTreeView *treeview, gpointer data) if (! get_selected_tuple (dialog, &value, &label)) return; - + text = value_to_text__ (value, &dialog->format, dialog->encoding); g_signal_handler_block (GTK_ENTRY (dialog->value_entry), @@ -478,11 +503,15 @@ psppire_val_labs_dialog_constructor (GType type, g_signal_connect (dialog->label_entry, "changed", G_CALLBACK (on_label_entry_change), dialog); + g_signal_connect (dialog->label_entry, "activate", + G_CALLBACK (on_label_entry_activate), dialog); dialog->value_handler_id = g_signal_connect (dialog->value_entry, "changed", G_CALLBACK (on_value_entry_change), dialog); + g_signal_connect (dialog->value_entry, "activate", + G_CALLBACK (on_value_entry_activate), dialog); g_signal_connect (dialog->change_button, "clicked",