summaryrefslogtreecommitdiff
path: root/gtk/gtkwindow.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkwindow.c')
-rw-r--r--gtk/gtkwindow.c52
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 &&