Index: src/fe-gnome/util.c =================================================================== --- src/fe-gnome/util.c (revision 10165) +++ src/fe-gnome/util.c (working copy) @@ -21,6 +21,7 @@ #include #include +#include #include #include "util.h" @@ -71,3 +72,28 @@ return result; } + +gboolean +dialog_escape_key_handler_destroy (GtkWidget *widget, GdkEventKey *event, gpointer data) +{ + if (event->keyval == GDK_Escape) { + g_signal_stop_emission_by_name (widget, "key-press-event"); + gtk_widget_destroy (widget); + return TRUE; + } + + return FALSE; +} + +gboolean +dialog_escape_key_handler_hide (GtkWidget *widget, GdkEventKey *event, gpointer data) +{ + if (event->keyval == GDK_Escape) { + g_signal_stop_emission_by_name (widget, "key-press-event"); + gtk_widget_hide (widget); + return TRUE; + } + + return FALSE; +} + Index: src/fe-gnome/util.h =================================================================== --- src/fe-gnome/util.h (revision 10165) +++ src/fe-gnome/util.h (working copy) @@ -26,5 +26,7 @@ void error_dialog (const gchar *header, const gchar *message); gint gtk_tree_iter_sort_func_nocase (GtkTreeModel *model, GtkTreeIter *a, GtkTreeIter *b, gpointer data); +gboolean dialog_escape_key_handler_destroy (GtkWidget *widget, GdkEventKey *event, gpointer data); +gboolean dialog_escape_key_handler_hide (GtkWidget *widget, GdkEventKey *event, gpointer data); #endif Index: src/fe-gnome/preferences-dialog.c =================================================================== --- src/fe-gnome/preferences-dialog.c (revision 10165) +++ src/fe-gnome/preferences-dialog.c (working copy) @@ -23,6 +23,7 @@ #include #include "preferences-dialog.h" #include "pixmaps.h" +#include "util.h" static GtkDialogClass *parent_class; @@ -109,6 +110,7 @@ gtk_container_set_border_width (GTK_CONTAINER (p), 6); gtk_container_add (GTK_CONTAINER (GTK_DIALOG (p)->vbox), p->toplevel); gtk_dialog_set_has_separator (GTK_DIALOG (p), FALSE); + g_signal_connect (G_OBJECT (p), "key-press-event", G_CALLBACK (dialog_escape_key_handler_hide), NULL); gtk_notebook_set_show_tabs (GTK_NOTEBOOK (p->settings_notebook), FALSE); Index: src/fe-gnome/connect-dialog.c =================================================================== --- src/fe-gnome/connect-dialog.c (revision 10165) +++ src/fe-gnome/connect-dialog.c (working copy) @@ -24,6 +24,7 @@ #include "connect-dialog.h" #include "navigation-tree.h" #include "gui.h" +#include "util.h" #include "../common/xchat.h" #include "../common/servlist.h" @@ -146,6 +147,7 @@ gtk_window_set_title (GTK_WINDOW (dialog), _("Connect")); gtk_dialog_set_response_sensitive (GTK_DIALOG (dialog), GTK_RESPONSE_OK, FALSE); g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (dialog_response), NULL); + g_signal_connect (G_OBJECT (dialog), "key-press-event", G_CALLBACK (dialog_escape_key_handler_destroy), NULL); } GType Index: src/fe-gnome/dcc-window.c =================================================================== --- src/fe-gnome/dcc-window.c (revision 10165) +++ src/fe-gnome/dcc-window.c (working copy) @@ -116,6 +116,7 @@ gtk_window_set_default_size (GTK_WINDOW (window), 300, 400); gtk_window_set_title (GTK_WINDOW (window), _("File Transfers")); + g_signal_connect (G_OBJECT (window), "key-press-event", G_CALLBACK (dialog_escape_key_handler_hide), NULL); window->progress_column = gtk_tree_view_column_new (); window->info_column = gtk_tree_view_column_new (); @@ -188,13 +189,6 @@ return dcc_window_type; } -static gboolean -dcc_window_delete_event (GtkWidget *window, GdkEvent *event, gpointer data) -{ - gtk_widget_hide (window); - return TRUE; -} - DccWindow * dcc_window_new (void) { @@ -204,7 +198,7 @@ return NULL; } - g_signal_connect (G_OBJECT (window), "delete-event", G_CALLBACK (dcc_window_delete_event), NULL); + g_signal_connect (G_OBJECT (window), "delete-event", G_CALLBACK (gtk_widget_hide_on_delete), NULL); return window; } Index: src/fe-gnome/channel-list.c =================================================================== --- src/fe-gnome/channel-list.c (revision 10165) +++ src/fe-gnome/channel-list.c (working copy) @@ -23,6 +23,7 @@ #include #include #include +#include #include #include "channel-list.h" #include "../common/xchat.h" @@ -90,6 +91,18 @@ } static gboolean +chanlist_key_press (GtkWidget *widget, GdkEventKey *event, gpointer data) +{ + if (event->keyval == GDK_Escape) { + g_signal_stop_emission_by_name (widget, "key-press-event"); + chanlist_delete (widget, NULL, data); + return TRUE; + } + + return FALSE; +} + +static gboolean resensitize (channel_list_window *win) { win->refresh_calls++; @@ -285,6 +298,7 @@ gtk_window_set_title (GTK_WINDOW (widget), title); g_free (title); g_signal_connect (G_OBJECT (widget), "delete-event", G_CALLBACK (chanlist_delete), win); + g_signal_connect (G_OBJECT (widget), "key-press-event", G_CALLBACK (chanlist_key_press), win); treeview = glade_xml_get_widget (win->xml, "channel list"); gtk_tree_view_set_search_column (GTK_TREE_VIEW (treeview), 1);