summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2002-11-13 21:47:11 +0000
committerOwen Taylor <otaylor@src.gnome.org>2002-11-13 21:47:11 +0000
commit712644fefba2f3ed01e343b4010f5ae17bbe5a83 (patch)
tree97f8fa99301681e3c64aa18ee2cb20e5bf56e02b /gtk
parent050c933b346f5bd34ef74b5eabf7e108085aabe2 (diff)
downloadgdk-pixbuf-712644fefba2f3ed01e343b4010f5ae17bbe5a83.tar.gz
Fix warning.
Wed Nov 13 15:52:53 2002 Owen Taylor <otaylor@redhat.com> * 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)
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkcombo.c51
1 files changed, 41 insertions, 10 deletions
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);
}