From 712644fefba2f3ed01e343b4010f5ae17bbe5a83 Mon Sep 17 00:00:00 2001 From: Owen Taylor Date: Wed, 13 Nov 2002 21:47:11 +0000 Subject: [PATCH] Fix warning. Wed Nov 13 15:52:53 2002 Owen Taylor * gtk/gtkcombo.c (gtk_combo_activate): Fix warning. * gtk/gtkcombo.c: Fix code that was meant to delay grabbing events on the list until we had an enter-notify. (#54353, reported by Mike Fulbright, others) --- ChangeLog | 8 ++++++++ ChangeLog.pre-2-10 | 8 ++++++++ ChangeLog.pre-2-2 | 8 ++++++++ ChangeLog.pre-2-4 | 8 ++++++++ ChangeLog.pre-2-6 | 8 ++++++++ ChangeLog.pre-2-8 | 8 ++++++++ gtk/gtkcombo.c | 51 +++++++++++++++++++++++++++++++++++++--------- 7 files changed, 89 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 8c8dd8f9a..185f2517e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +Wed Nov 13 15:52:53 2002 Owen Taylor + + * gtk/gtkcombo.c (gtk_combo_activate): Fix warning. + + * gtk/gtkcombo.c: Fix code that was meant to delay + grabbing events on the list until we had an enter-notify. + (#54353, reported by Mike Fulbright, others) + 2002-11-13 Matthias Clasen * gtk/theme-bits/decompose-bits.c (do_part): Add a const here. diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 8c8dd8f9a..185f2517e 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,11 @@ +Wed Nov 13 15:52:53 2002 Owen Taylor + + * gtk/gtkcombo.c (gtk_combo_activate): Fix warning. + + * gtk/gtkcombo.c: Fix code that was meant to delay + grabbing events on the list until we had an enter-notify. + (#54353, reported by Mike Fulbright, others) + 2002-11-13 Matthias Clasen * gtk/theme-bits/decompose-bits.c (do_part): Add a const here. diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 8c8dd8f9a..185f2517e 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,11 @@ +Wed Nov 13 15:52:53 2002 Owen Taylor + + * gtk/gtkcombo.c (gtk_combo_activate): Fix warning. + + * gtk/gtkcombo.c: Fix code that was meant to delay + grabbing events on the list until we had an enter-notify. + (#54353, reported by Mike Fulbright, others) + 2002-11-13 Matthias Clasen * gtk/theme-bits/decompose-bits.c (do_part): Add a const here. diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 8c8dd8f9a..185f2517e 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,11 @@ +Wed Nov 13 15:52:53 2002 Owen Taylor + + * gtk/gtkcombo.c (gtk_combo_activate): Fix warning. + + * gtk/gtkcombo.c: Fix code that was meant to delay + grabbing events on the list until we had an enter-notify. + (#54353, reported by Mike Fulbright, others) + 2002-11-13 Matthias Clasen * gtk/theme-bits/decompose-bits.c (do_part): Add a const here. diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 8c8dd8f9a..185f2517e 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,11 @@ +Wed Nov 13 15:52:53 2002 Owen Taylor + + * gtk/gtkcombo.c (gtk_combo_activate): Fix warning. + + * gtk/gtkcombo.c: Fix code that was meant to delay + grabbing events on the list until we had an enter-notify. + (#54353, reported by Mike Fulbright, others) + 2002-11-13 Matthias Clasen * gtk/theme-bits/decompose-bits.c (do_part): Add a const here. diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 8c8dd8f9a..185f2517e 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,11 @@ +Wed Nov 13 15:52:53 2002 Owen Taylor + + * gtk/gtkcombo.c (gtk_combo_activate): Fix warning. + + * gtk/gtkcombo.c: Fix code that was meant to delay + grabbing events on the list until we had an enter-notify. + (#54353, reported by Mike Fulbright, others) + 2002-11-13 Matthias Clasen * gtk/theme-bits/decompose-bits.c (do_part): Add a const here. diff --git a/gtk/gtkcombo.c b/gtk/gtkcombo.c index 4cdecc0a7..701027a4c 100644 --- a/gtk/gtkcombo.c +++ b/gtk/gtkcombo.c @@ -601,7 +601,7 @@ gtk_combo_activate (GtkWidget *widget, if (!combo->button->window || !popup_grab_on_window (combo->button->window, gtk_get_current_event_time ())) - return FALSE; + return; gtk_combo_popup_list (combo); @@ -641,8 +641,6 @@ gtk_combo_popup_button_press (GtkWidget *button, gtk_button_pressed (GTK_BUTTON (button)); gtk_grab_add (combo->popwin); - GTK_LIST (combo->list)->drag_selection = TRUE; - gtk_grab_add (combo->list); return TRUE; } @@ -759,6 +757,29 @@ gtk_combo_button_event_after (GtkWidget *widget, gtk_combo_popdown_list (combo); } +static void +find_child_foreach (GtkWidget *widget, + gpointer data) +{ + GdkEventButton *event = data; + + if (!event->window) + { + if (event->x >= widget->allocation.x && + event->x < widget->allocation.x + widget->allocation.width && + event->y >= widget->allocation.y && + event->y < widget->allocation.y + widget->allocation.height) + event->window = g_object_ref (widget->window); + } +} + +static void +find_child_window (GtkContainer *container, + GdkEventButton *event) +{ + gtk_container_foreach (container, find_child_foreach, event); +} + static gint gtk_combo_list_enter (GtkWidget *widget, GdkEventCrossing *event, @@ -767,7 +788,7 @@ gtk_combo_list_enter (GtkWidget *widget, GtkWidget *event_widget; event_widget = gtk_get_event_widget ((GdkEvent*) event); - + if ((event_widget == combo->list) && (combo->current_button != 0) && (!GTK_WIDGET_HAS_GRAB (combo->list))) @@ -783,7 +804,6 @@ gtk_combo_list_enter (GtkWidget *widget, */ gdk_window_get_pointer (combo->list->window, &x, &y, &mask); - tmp_event->button.window = g_object_ref (combo->list->window); tmp_event->button.send_event = TRUE; tmp_event->button.time = GDK_CURRENT_TIME; /* bad */ tmp_event->button.x = x; @@ -794,6 +814,19 @@ gtk_combo_list_enter (GtkWidget *widget, tmp_event->button.button = combo->current_button; tmp_event->button.state = mask; + find_child_window (GTK_CONTAINER (combo->list), &tmp_event->button); + if (!tmp_event->button.window) + { + GtkWidget *child; + + if (GTK_LIST (combo->list)->children) + child = GTK_LIST (combo->list)->children->data; + else + child = combo->list; + + tmp_event->button.window = g_object_ref (child->window); + } + gtk_widget_event (combo->list, tmp_event); gdk_event_free (tmp_event); } @@ -915,14 +948,12 @@ gtk_combo_init (GtkCombo * combo) g_signal_connect (combo->popwin, "button_press_event", G_CALLBACK (gtk_combo_button_press), combo); + g_signal_connect (combo->popwin, "event_after", + G_CALLBACK (gtk_combo_button_event_after), combo); g_signal_connect (combo->list, "event_after", G_CALLBACK (gtk_combo_button_event_after), combo); - /* We connect here on the button, because we'll have a grab on it - * when the event occurs. But we are actually interested in enters - * for the combo->list. - */ - g_signal_connect (combo->button, "enter_notify_event", + g_signal_connect (combo->list, "enter_notify_event", G_CALLBACK (gtk_combo_list_enter), combo); } -- 2.43.2