summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2002-05-20 15:52:08 +0000
committerOwen Taylor <otaylor@src.gnome.org>2002-05-20 15:52:08 +0000
commitc1b5a2d0ef9eac044c9e256b26be1d9a3c811b9c (patch)
treeb1eeef334f0d2c0e05135d82cac6a3b2cd2a6d12 /gtk
parent785183c7fb34a4ee9cf2e406463965162efe9313 (diff)
downloadgdk-pixbuf-c1b5a2d0ef9eac044c9e256b26be1d9a3c811b9c.tar.gz
Undo an accidental revert of fixes of May 16. (Caught by Padraig O'Briain)
Mon May 20 11:47:59 2002 Owen Taylor <otaylor@redhat.com> * gtk/gtkplug.c: Undo an accidental revert of fixes of May 16. (Caught by Padraig O'Briain)
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkplug.c32
1 files changed, 28 insertions, 4 deletions
diff --git a/gtk/gtkplug.c b/gtk/gtkplug.c
index 8daa05192..fd2320d61 100644
--- a/gtk/gtkplug.c
+++ b/gtk/gtkplug.c
@@ -48,6 +48,8 @@ static void gtk_plug_size_allocate (GtkWidget *widget,
GtkAllocation *allocation);
static gboolean gtk_plug_key_press_event (GtkWidget *widget,
GdkEventKey *event);
+static gboolean gtk_plug_focus_event (GtkWidget *widget,
+ GdkEventFocus *event);
static void gtk_plug_set_focus (GtkWindow *window,
GtkWidget *focus);
static gboolean gtk_plug_focus (GtkWidget *widget,
@@ -123,6 +125,8 @@ gtk_plug_class_init (GtkPlugClass *class)
widget_class->realize = gtk_plug_realize;
widget_class->unrealize = gtk_plug_unrealize;
widget_class->key_press_event = gtk_plug_key_press_event;
+ widget_class->focus_in_event = gtk_plug_focus_event;
+ widget_class->focus_out_event = gtk_plug_focus_event;
widget_class->show = gtk_plug_show;
widget_class->hide = gtk_plug_hide;
@@ -593,6 +597,17 @@ gtk_plug_key_press_event (GtkWidget *widget,
return FALSE;
}
+static gboolean
+gtk_plug_focus_event (GtkWidget *widget,
+ GdkEventFocus *event)
+{
+ /* We eat focus-in events and focus-out events, since they
+ * can be generated by something like a keyboard grab on
+ * a child of the plug.
+ */
+ return FALSE;
+}
+
static void
gtk_plug_set_focus (GtkWindow *window,
GtkWidget *focus)
@@ -938,15 +953,24 @@ handle_xembed_message (GtkPlug *plug,
case XEMBED_FOCUS_OUT:
{
+ GtkWidget *widget = GTK_WIDGET (plug);
GdkEvent event;
event.focus_change.type = GDK_FOCUS_CHANGE;
- event.focus_change.window = GTK_WIDGET (plug)->window;
+ event.focus_change.window = widget->window;
event.focus_change.send_event = TRUE;
- event.focus_change.in = (message == XEMBED_FOCUS_IN);
-
- gtk_widget_event (GTK_WIDGET (plug), &event);
+ if (message == XEMBED_FOCUS_IN)
+ {
+ event.focus_change.in = TRUE;
+ GTK_WIDGET_CLASS (parent_class)->focus_in_event (widget, (GdkEventFocus *)&event);
+ }
+ else
+ {
+ event.focus_change.in = FALSE;
+ GTK_WIDGET_CLASS (parent_class)->focus_out_event (widget, (GdkEventFocus *)&event);
+ }
+
break;
}