From 34738f6fd728de47856ee6a37761c1349b82cb38 Mon Sep 17 00:00:00 2001 From: Yevgen Muntyan <17531749+muntyan@users.noreply.github.com> Date: Sat, 30 Dec 2006 22:20:41 -0600 Subject: [PATCH] Send key press events to focused widget first --- moo/mooutils/moowindow.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/moo/mooutils/moowindow.c b/moo/mooutils/moowindow.c index d5d6c5b1..2c91fa5c 100644 --- a/moo/mooutils/moowindow.c +++ b/moo/mooutils/moowindow.c @@ -109,6 +109,8 @@ static void moo_window_add_action (MooWindow *window, static void moo_window_remove_action (MooWindow *window, const char *action_id); +static gboolean moo_window_key_press_event (GtkWidget *widget, + GdkEventKey *event); static gboolean moo_window_delete_event (GtkWidget *widget, GdkEventAny *event); @@ -152,6 +154,7 @@ static guint signals[LAST_SIGNAL] = {0}; /* MOO_TYPE_WINDOW */ G_DEFINE_TYPE (MooWindow, moo_window, GTK_TYPE_WINDOW) +static gpointer moo_window_grand_parent_class; static void @@ -160,12 +163,15 @@ moo_window_class_init (MooWindowClass *klass) GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); + moo_window_grand_parent_class = g_type_class_peek_parent (moo_window_parent_class); + gobject_class->constructor = moo_window_constructor; gobject_class->dispose = moo_window_dispose; gobject_class->set_property = moo_window_set_property; gobject_class->get_property = moo_window_get_property; widget_class->delete_event = moo_window_delete_event; + widget_class->key_press_event = moo_window_key_press_event; moo_window_class_set_id (klass, "MooWindow", "Window"); @@ -418,6 +424,18 @@ moo_window_delete_event (GtkWidget *widget, } +static gboolean +moo_window_key_press_event (GtkWidget *widget, + GdkEventKey *event) +{ + return gtk_window_propagate_key_event (GTK_WINDOW (widget), event) || + gtk_window_activate_key (GTK_WINDOW (widget), event) || + /* GtkWindowClass would call two guys above again and then chain up + * to the parent, so it's a shortcut */ + GTK_WIDGET_CLASS (moo_window_grand_parent_class)->key_press_event (widget, event); +} + + static gboolean save_size (MooWindow *window) {