diff options
author | Federico Mena Quintero <federico@ximian.com> | 2004-03-12 20:38:54 +0000 |
---|---|---|
committer | Federico Mena Quintero <federico@src.gnome.org> | 2004-03-12 20:38:54 +0000 |
commit | edf8e6f58039f1074249f449ab157c6834e3d4f0 (patch) | |
tree | 8cfb57cf2f15e62b216642e878bb98f40ab681b2 /gtk/gtkfilechooserdialog.c | |
parent | c2ddd0e23c8a8698a859ebefba599b16cd9aef3d (diff) | |
download | gtk+-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.c | 43 |
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))) |