From c30e743f8e5484f6ea3633c098a16953da3fe9cf Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Fri, 2 Feb 2001 18:35:29 +0000 Subject: [PATCH] When a grab widget is in effect, give the grab widget a first crack at Fri Feb 2 13:20:12 2001 Owen Taylor * gtk/gtkmain.c (gtk_propagate_event): When a grab widget is in effect, give the grab widget a first crack at KEY_PRESS/RELEASE events. (#424) --- ChangeLog | 6 ++++++ ChangeLog.pre-2-0 | 6 ++++++ ChangeLog.pre-2-10 | 6 ++++++ ChangeLog.pre-2-2 | 6 ++++++ ChangeLog.pre-2-4 | 6 ++++++ ChangeLog.pre-2-6 | 6 ++++++ ChangeLog.pre-2-8 | 6 ++++++ gtk/gtkmain.c | 26 ++++++++++++++++++++------ 8 files changed, 62 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index ee445cdef5..38697283d2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +Fri Feb 2 13:20:12 2001 Owen Taylor + + * gtk/gtkmain.c (gtk_propagate_event): When a grab + widget is in effect, give the grab widget a first + crack at KEY_PRESS/RELEASE events. (#424) + Fri Feb 2 12:02:23 2001 Owen Taylor * gtk/gtkrc.c Makefile.am: Use $(libdir), not $(exe_prefix), diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index ee445cdef5..38697283d2 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,9 @@ +Fri Feb 2 13:20:12 2001 Owen Taylor + + * gtk/gtkmain.c (gtk_propagate_event): When a grab + widget is in effect, give the grab widget a first + crack at KEY_PRESS/RELEASE events. (#424) + Fri Feb 2 12:02:23 2001 Owen Taylor * gtk/gtkrc.c Makefile.am: Use $(libdir), not $(exe_prefix), diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index ee445cdef5..38697283d2 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,9 @@ +Fri Feb 2 13:20:12 2001 Owen Taylor + + * gtk/gtkmain.c (gtk_propagate_event): When a grab + widget is in effect, give the grab widget a first + crack at KEY_PRESS/RELEASE events. (#424) + Fri Feb 2 12:02:23 2001 Owen Taylor * gtk/gtkrc.c Makefile.am: Use $(libdir), not $(exe_prefix), diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index ee445cdef5..38697283d2 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,9 @@ +Fri Feb 2 13:20:12 2001 Owen Taylor + + * gtk/gtkmain.c (gtk_propagate_event): When a grab + widget is in effect, give the grab widget a first + crack at KEY_PRESS/RELEASE events. (#424) + Fri Feb 2 12:02:23 2001 Owen Taylor * gtk/gtkrc.c Makefile.am: Use $(libdir), not $(exe_prefix), diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index ee445cdef5..38697283d2 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,9 @@ +Fri Feb 2 13:20:12 2001 Owen Taylor + + * gtk/gtkmain.c (gtk_propagate_event): When a grab + widget is in effect, give the grab widget a first + crack at KEY_PRESS/RELEASE events. (#424) + Fri Feb 2 12:02:23 2001 Owen Taylor * gtk/gtkrc.c Makefile.am: Use $(libdir), not $(exe_prefix), diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index ee445cdef5..38697283d2 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,9 @@ +Fri Feb 2 13:20:12 2001 Owen Taylor + + * gtk/gtkmain.c (gtk_propagate_event): When a grab + widget is in effect, give the grab widget a first + crack at KEY_PRESS/RELEASE events. (#424) + Fri Feb 2 12:02:23 2001 Owen Taylor * gtk/gtkrc.c Makefile.am: Use $(libdir), not $(exe_prefix), diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index ee445cdef5..38697283d2 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,9 @@ +Fri Feb 2 13:20:12 2001 Owen Taylor + + * gtk/gtkmain.c (gtk_propagate_event): When a grab + widget is in effect, give the grab widget a first + crack at KEY_PRESS/RELEASE events. (#424) + Fri Feb 2 12:02:23 2001 Owen Taylor * gtk/gtkrc.c Makefile.am: Use $(libdir), not $(exe_prefix), diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c index 775f9164ce..d4efdd43d3 100644 --- a/gtk/gtkmain.c +++ b/gtk/gtkmain.c @@ -1292,13 +1292,27 @@ gtk_propagate_event (GtkWidget *widget, GtkWidget *window; window = gtk_widget_get_ancestor (widget, GTK_TYPE_WINDOW); - if (window) - { - if (GTK_WIDGET_IS_SENSITIVE (window)) - gtk_widget_event (window, event); - handled_event = TRUE; /* don't send to widget */ - } + /* If there is a grab within the window, give the grab widget + * a first crack at the key event + */ + if (widget != window && GTK_WIDGET_HAS_GRAB (widget)) + { + gtk_widget_ref (widget); + handled_event = gtk_widget_event (widget, event); + gtk_widget_unref (widget); + } + + if (!handled_event) + { + if (window) + { + if (GTK_WIDGET_IS_SENSITIVE (window)) + gtk_widget_event (window, event); + + handled_event = TRUE; /* don't send to widget */ + } + } } /* Other events get propagated up the widget tree