diff options
author | Owen Taylor <otaylor@redhat.com> | 2001-04-19 20:36:46 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 2001-04-19 20:36:46 +0000 |
commit | bf660df987e2eb2ac2f1f885178e0bbdb7d560b0 (patch) | |
tree | 5d135018addc3f99e185ce572150e9d8693f46ed /gtk/gtkwindow.c | |
parent | e13ec2098affda07023d073a5527f0e61bb24058 (diff) | |
download | gdk-pixbuf-bf660df987e2eb2ac2f1f885178e0bbdb7d560b0.tar.gz |
File containing #defines for XEMBED protocol.
Thu Apr 19 16:11:07 2001 Owen Taylor <otaylor@redhat.com>
* gtk/Makefile.am xembed.h: File containing #defines
for XEMBED protocol.
* gtk/gtkplug.[ch] gtk/gtksocket.[ch]:
- Change protocol from old plug/socket specific protocol
to XEMBED draft
- Various fixes to work with GTK+-2.0
Still quite a bit of work to do here to handle initiation
from the socket side (as specified by XEMBED), to handle
the more advanced features of XEMBED, and to figure out
a good way to handle same-app embedding with less overhead
than using full XEMBED.
Diffstat (limited to 'gtk/gtkwindow.c')
-rw-r--r-- | gtk/gtkwindow.c | 52 |
1 files changed, 25 insertions, 27 deletions
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c index e03cc71fd..52654dab0 100644 --- a/gtk/gtkwindow.c +++ b/gtk/gtkwindow.c @@ -2248,13 +2248,9 @@ static gint gtk_window_focus_in_event (GtkWidget *widget, GdkEventFocus *event) { - GtkWindow *window; + GtkWindow *window = GTK_WINDOW (widget); GdkEventFocus fevent; - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GTK_IS_WINDOW (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - /* It appears spurious focus in events can occur when * the window is hidden. So we'll just check to see if * the window is visible before actually handling the @@ -2262,7 +2258,8 @@ gtk_window_focus_in_event (GtkWidget *widget, */ if (GTK_WIDGET_VISIBLE (widget)) { - window = GTK_WINDOW (widget); + window->has_focus = TRUE; + if (window->focus_widget && window->focus_widget != widget && !GTK_WIDGET_HAS_FOCUS (window->focus_widget)) @@ -2282,14 +2279,11 @@ static gint gtk_window_focus_out_event (GtkWidget *widget, GdkEventFocus *event) { - GtkWindow *window; + GtkWindow *window = GTK_WINDOW (widget); GdkEventFocus fevent; - g_return_val_if_fail (widget != NULL, FALSE); - g_return_val_if_fail (GTK_IS_WINDOW (widget), FALSE); - g_return_val_if_fail (event != NULL, FALSE); - - window = GTK_WINDOW (widget); + window->has_focus = FALSE; + if (window->focus_widget && window->focus_widget != widget && GTK_WIDGET_HAS_FOCUS (window->focus_widget)) @@ -2456,32 +2450,29 @@ gtk_window_real_set_focus (GtkWindow *window, if (window->focus_widget) { - event.type = GDK_FOCUS_CHANGE; - event.window = window->focus_widget->window; - event.in = FALSE; - if (GTK_WIDGET_RECEIVES_DEFAULT (window->focus_widget) && (window->focus_widget != window->default_widget)) { GTK_WIDGET_UNSET_FLAGS (window->focus_widget, GTK_HAS_DEFAULT); - /* if any widget had the default set there should be - a default_widget, but might not so this is a sanity - check */ + if (window->default_widget) GTK_WIDGET_SET_FLAGS (window->default_widget, GTK_HAS_DEFAULT); } - - gtk_widget_event (window->focus_widget, (GdkEvent*) &event); + + if (window->has_focus) + { + event.type = GDK_FOCUS_CHANGE; + event.window = window->focus_widget->window; + event.in = FALSE; + + gtk_widget_event (window->focus_widget, (GdkEvent*) &event); + } } window->focus_widget = focus; if (window->focus_widget) { - event.type = GDK_FOCUS_CHANGE; - event.window = window->focus_widget->window; - event.in = TRUE; - if (GTK_WIDGET_RECEIVES_DEFAULT (window->focus_widget) && (window->focus_widget != window->default_widget)) { @@ -2491,8 +2482,15 @@ gtk_window_real_set_focus (GtkWindow *window, if (window->default_widget) GTK_WIDGET_UNSET_FLAGS (window->default_widget, GTK_HAS_DEFAULT); } - - gtk_widget_event (window->focus_widget, (GdkEvent*) &event); + + if (window->has_focus) + { + event.type = GDK_FOCUS_CHANGE; + event.window = window->focus_widget->window; + event.in = TRUE; + + gtk_widget_event (window->focus_widget, (GdkEvent*) &event); + } } if (window->default_widget && |