summaryrefslogtreecommitdiff
path: root/gtk/gtkfilechooserdialog.c
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@ximian.com>2004-03-12 20:38:54 +0000
committerFederico Mena Quintero <federico@src.gnome.org>2004-03-12 20:38:54 +0000
commitedf8e6f58039f1074249f449ab157c6834e3d4f0 (patch)
tree8cfb57cf2f15e62b216642e878bb98f40ab681b2 /gtk/gtkfilechooserdialog.c
parentc2ddd0e23c8a8698a859ebefba599b16cd9aef3d (diff)
downloadgtk+-edf8e6f58039f1074249f449ab157c6834e3d4f0.tar.gz
Don't ignore the return value of gtk_widget_activate().
2004-03-12 Federico Mena Quintero <federico@ximian.com> * gtk/gtkwindow.c (gtk_window_activate_focus): Don't ignore the return value of gtk_widget_activate(). (gtk_window_activate_default): Likewise. Fixes #137008. * gtk/gtkfilechooserdialog.c (response_cb): Act on positive response IDs we recognize, rather than bailing out on cancellation ones. Fixes #136237; patch by Olivier Andrieu <oliv__a@users.sourceforge.net>. (file_chooser_widget_file_activated): If the dialog doesn't have a default widget, try to find a suitable response widget on our own. People should *really* be using gtk_dialog_set_default_response(), but this is to help lazy programmers. * gtk/gtkdialog.c (_gtk_dialog_get_response_for_widget): New internal function. (get_response_data): Add a "create" argument so that we don't unconditionally create the response data.
Diffstat (limited to 'gtk/gtkfilechooserdialog.c')
-rw-r--r--gtk/gtkfilechooserdialog.c43
1 files changed, 34 insertions, 9 deletions
diff --git a/gtk/gtkfilechooserdialog.c b/gtk/gtkfilechooserdialog.c
index 6de17f1a7a..24ea732b6e 100644
--- a/gtk/gtkfilechooserdialog.c
+++ b/gtk/gtkfilechooserdialog.c
@@ -162,7 +162,35 @@ static void
file_chooser_widget_file_activated (GtkFileChooser *chooser,
GtkFileChooserDialog *dialog)
{
- gtk_window_activate_default (GTK_WINDOW (dialog));
+ GList *children, *l;
+
+ if (gtk_window_activate_default (GTK_WINDOW (dialog)))
+ return;
+
+ /* There probably isn't a default widget, so make things easier for the
+ * programmer by looking for a reasonable button on our own.
+ */
+
+ children = gtk_container_get_children (GTK_CONTAINER (GTK_DIALOG (dialog)->action_area));
+
+ for (l = children; l; l = l->next)
+ {
+ GtkWidget *widget;
+ int response_id;
+
+ widget = GTK_WIDGET (l->data);
+ response_id = _gtk_dialog_get_response_for_widget (GTK_DIALOG (dialog), widget);
+ if (response_id == GTK_RESPONSE_ACCEPT
+ || response_id == GTK_RESPONSE_OK
+ || response_id == GTK_RESPONSE_YES
+ || response_id == GTK_RESPONSE_APPLY)
+ {
+ gtk_widget_activate (widget); /* Should we gtk_dialog_response (dialog, response_id) instead? */
+ break;
+ }
+ }
+
+ g_list_free (children);
}
static void
@@ -465,14 +493,11 @@ response_cb (GtkDialog *dialog,
priv = GTK_FILE_CHOOSER_DIALOG_GET_PRIVATE (dialog);
- /* Ugh, try to filter out cancel-type responses */
- if (response_id == GTK_RESPONSE_NONE
- || response_id == GTK_RESPONSE_REJECT
- || response_id == GTK_RESPONSE_DELETE_EVENT
- || response_id == GTK_RESPONSE_CANCEL
- || response_id == GTK_RESPONSE_CLOSE
- || response_id == GTK_RESPONSE_NO
- || response_id == GTK_RESPONSE_HELP)
+ /* Act only on response IDs we recognize */
+ if (!(response_id == GTK_RESPONSE_ACCEPT
+ || response_id == GTK_RESPONSE_OK
+ || response_id == GTK_RESPONSE_YES
+ || response_id == GTK_RESPONSE_APPLY))
return;
if (!_gtk_file_chooser_embed_should_respond (GTK_FILE_CHOOSER_EMBED (priv->widget)))