diff options
author | Matthias Clasen <mclasen@redhat.com> | 2005-05-18 16:52:30 +0000 |
---|---|---|
committer | Matthias Clasen <matthiasc@src.gnome.org> | 2005-05-18 16:52:30 +0000 |
commit | e9e878d1bc40e7a20d307b68ae882a812bcbe5ec (patch) | |
tree | 6cf702efbfbd9ac6c918273ef3dbe1e9c69aab1e /gtk/gtkwidget.c | |
parent | 763452a14f7b775097a36de4d72036aecc0f0289 (diff) | |
download | gdk-pixbuf-e9e878d1bc40e7a20d307b68ae882a812bcbe5ec.tar.gz |
Try harder to set the event masks of descendent windows. (#169821, Tommi
2005-05-18 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkwidget.c (gtk_widget_add_events): Try harder to set
the event masks of descendent windows. (#169821, Tommi Komulainen)
Diffstat (limited to 'gtk/gtkwidget.c')
-rw-r--r-- | gtk/gtkwidget.c | 52 |
1 files changed, 33 insertions, 19 deletions
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index 7b925a50c..ba299d1d8 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -5847,6 +5847,32 @@ gtk_widget_set_events (GtkWidget *widget, g_object_notify (G_OBJECT (widget), "events"); } +static void +gtk_widget_add_events_internal (GtkWidget *widget, + gint events, + GList *window_list) +{ + GList *l; + + for (l = window_list; l != NULL; l = l->next) + { + GdkWindow *window = l->data; + gpointer user_data; + + gdk_window_get_user_data (window, &user_data); + if (user_data == widget) + { + GList *children; + + gdk_window_set_events (window, gdk_window_get_events (window) | events); + + children = gdk_window_get_children (window); + gtk_widget_add_events_internal (widget, events, children); + g_list_free (children); + } + } +} + /** * gtk_widget_add_events: * @widget: a #GtkWidget @@ -5885,28 +5911,16 @@ gtk_widget_add_events (GtkWidget *widget, if (GTK_WIDGET_REALIZED (widget)) { - if (GTK_WIDGET_NO_WINDOW (widget)) - { - GList *children = gdk_window_get_children (widget->window); - GList *tmp_list = children; + GList *window_list; - while (tmp_list) - { - GdkWindow *window = tmp_list->data; - gpointer user_data; + if (GTK_WIDGET_NO_WINDOW (widget)) + window_list = gdk_window_get_children (widget->window); + else + window_list = g_list_prepend (NULL, widget->window); - gdk_window_get_user_data (window, &user_data); - if (user_data == widget) - gdk_window_set_events (window, gdk_window_get_events (window) | events); - tmp_list = tmp_list->next; - } + gtk_widget_add_events_internal (widget, events, window_list); - g_list_free (children); - } - else - { - gdk_window_set_events (widget->window, gdk_window_get_events (widget->window) | events); - } + g_list_free (window_list); } g_object_notify (G_OBJECT (widget), "events"); |