From 11f79ebe181fcb26a651385cd0d1dd7066f68bcd Mon Sep 17 00:00:00 2001 From: Tim Janik Date: Thu, 26 Mar 1998 22:18:56 +0000 Subject: [PATCH] make a clear distinction between key press/release events, which will be Thu Mar 26 23:12:54 1998 Tim Janik * gtk/gtkmain.c (gtk_propagate_event): make a clear distinction between key press/release events, which will be sent to a widgets toplevel ancestor and be forwarded from there, and all other events that need to get propagated up the widget tree (pointed out by Owen Taylor). --- ChangeLog | 7 +++++++ ChangeLog.pre-2-0 | 7 +++++++ ChangeLog.pre-2-10 | 7 +++++++ ChangeLog.pre-2-2 | 7 +++++++ ChangeLog.pre-2-4 | 7 +++++++ ChangeLog.pre-2-6 | 7 +++++++ ChangeLog.pre-2-8 | 7 +++++++ gtk/gtkmain.c | 51 +++++++++++++++++++++------------------------- 8 files changed, 72 insertions(+), 28 deletions(-) diff --git a/ChangeLog b/ChangeLog index b9dd909cec..43ce42a30a 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +Thu Mar 26 23:12:54 1998 Tim Janik + + * gtk/gtkmain.c (gtk_propagate_event): make a clear distinction between + key press/release events, which will be sent to a widgets toplevel + ancestor and be forwarded from there, and all other events that need to + get propagated up the widget tree (pointed out by Owen Taylor). + Thu Mar 26 21:37:57 1998 Tim Janik * gtk/gtkradiobutton.c (gtk_radio_button_draw_indicator): always diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index b9dd909cec..43ce42a30a 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,10 @@ +Thu Mar 26 23:12:54 1998 Tim Janik + + * gtk/gtkmain.c (gtk_propagate_event): make a clear distinction between + key press/release events, which will be sent to a widgets toplevel + ancestor and be forwarded from there, and all other events that need to + get propagated up the widget tree (pointed out by Owen Taylor). + Thu Mar 26 21:37:57 1998 Tim Janik * gtk/gtkradiobutton.c (gtk_radio_button_draw_indicator): always diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index b9dd909cec..43ce42a30a 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,10 @@ +Thu Mar 26 23:12:54 1998 Tim Janik + + * gtk/gtkmain.c (gtk_propagate_event): make a clear distinction between + key press/release events, which will be sent to a widgets toplevel + ancestor and be forwarded from there, and all other events that need to + get propagated up the widget tree (pointed out by Owen Taylor). + Thu Mar 26 21:37:57 1998 Tim Janik * gtk/gtkradiobutton.c (gtk_radio_button_draw_indicator): always diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index b9dd909cec..43ce42a30a 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,10 @@ +Thu Mar 26 23:12:54 1998 Tim Janik + + * gtk/gtkmain.c (gtk_propagate_event): make a clear distinction between + key press/release events, which will be sent to a widgets toplevel + ancestor and be forwarded from there, and all other events that need to + get propagated up the widget tree (pointed out by Owen Taylor). + Thu Mar 26 21:37:57 1998 Tim Janik * gtk/gtkradiobutton.c (gtk_radio_button_draw_indicator): always diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index b9dd909cec..43ce42a30a 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,10 @@ +Thu Mar 26 23:12:54 1998 Tim Janik + + * gtk/gtkmain.c (gtk_propagate_event): make a clear distinction between + key press/release events, which will be sent to a widgets toplevel + ancestor and be forwarded from there, and all other events that need to + get propagated up the widget tree (pointed out by Owen Taylor). + Thu Mar 26 21:37:57 1998 Tim Janik * gtk/gtkradiobutton.c (gtk_radio_button_draw_indicator): always diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index b9dd909cec..43ce42a30a 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,10 @@ +Thu Mar 26 23:12:54 1998 Tim Janik + + * gtk/gtkmain.c (gtk_propagate_event): make a clear distinction between + key press/release events, which will be sent to a widgets toplevel + ancestor and be forwarded from there, and all other events that need to + get propagated up the widget tree (pointed out by Owen Taylor). + Thu Mar 26 21:37:57 1998 Tim Janik * gtk/gtkradiobutton.c (gtk_radio_button_draw_indicator): always diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index b9dd909cec..43ce42a30a 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,10 @@ +Thu Mar 26 23:12:54 1998 Tim Janik + + * gtk/gtkmain.c (gtk_propagate_event): make a clear distinction between + key press/release events, which will be sent to a widgets toplevel + ancestor and be forwarded from there, and all other events that need to + get propagated up the widget tree (pointed out by Owen Taylor). + Thu Mar 26 21:37:57 1998 Tim Janik * gtk/gtkradiobutton.c (gtk_radio_button_draw_indicator): always diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c index b8d9f566be..e31c2c90cc 100644 --- a/gtk/gtkmain.c +++ b/gtk/gtkmain.c @@ -1516,50 +1516,45 @@ static void gtk_propagate_event (GtkWidget *widget, GdkEvent *event) { - GtkWidget *parent; - GtkWidget *tmp; - gint handled_event; - g_return_if_fail (widget != NULL); g_return_if_fail (event != NULL); - handled_event = FALSE; - gtk_widget_ref (widget); - if ((event->type == GDK_KEY_PRESS) || (event->type == GDK_KEY_RELEASE)) { - /* Only send key events to window widgets. * The window widget will in turn pass the * key event on to the currently focused widget * for that window. */ - parent = gtk_widget_get_ancestor (widget, gtk_window_get_type ()); - handled_event = (parent && - GTK_WIDGET_IS_SENSITIVE (parent) && - gtk_widget_event (parent, event)); - handled_event |= parent == widget; + + widget = gtk_widget_get_ancestor (widget, gtk_window_get_type ()); + if (widget && GTK_WIDGET_IS_SENSITIVE (widget)) + gtk_widget_event (widget, event); } - - /* Other events get propagated up the widget tree - * so that parents can see the button and motion - * events of the children. - */ - tmp = widget; - while (!handled_event && tmp) + else { - gtk_widget_ref (tmp); - handled_event = !GTK_WIDGET_IS_SENSITIVE (tmp) || gtk_widget_event (tmp, event); - parent = tmp->parent; - gtk_widget_unref (tmp); - tmp = parent; + gint handled_event; + + /* Other events get propagated up the widget tree + * so that parents can see the button and motion + * events of the children. + */ + + handled_event = FALSE; + while (!handled_event && widget) + { + GtkWidget *tmp; + + gtk_widget_ref (widget); + handled_event = !GTK_WIDGET_IS_SENSITIVE (widget) || gtk_widget_event (widget, event); + tmp = widget->parent; + gtk_widget_unref (widget); + widget = tmp; + } } - - gtk_widget_unref (widget); } - static void gtk_error (gchar *str) {