summaryrefslogtreecommitdiff
path: root/gtk/gtkmain.c
diff options
context:
space:
mode:
authorTim Janik <timj@gtk.org>1998-03-26 22:18:56 +0000
committerTim Janik <timj@src.gnome.org>1998-03-26 22:18:56 +0000
commit11f79ebe181fcb26a651385cd0d1dd7066f68bcd (patch)
treee101dca7b4305e5d87911342de6d9a0a7dd0678b /gtk/gtkmain.c
parentc2906f2beaf51a3528550e3146fc046ad9b7c65f (diff)
downloadgtk+-11f79ebe181fcb26a651385cd0d1dd7066f68bcd.tar.gz
make a clear distinction between key press/release events, which will be
Thu Mar 26 23:12:54 1998 Tim Janik <timj@gtk.org> * 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).
Diffstat (limited to 'gtk/gtkmain.c')
-rw-r--r--gtk/gtkmain.c51
1 files changed, 23 insertions, 28 deletions
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_unref (widget);
+ 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;
+ }
+ }
}
-
static void
gtk_error (gchar *str)
{