From 94dfd3dd82492c94beefc1c236d9c4328bc01af2 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Mon, 8 Jan 2001 11:12:21 +0000 Subject: [PATCH] Possibly send focus events when the mouse moves from one window to 2001-01-08 Alexander Larsson * gdk/linux-fb/gdkwindow-fb.c (_gdk_fb_window_find_focus, gdk_fb_window_find_focus, gdk_fb_send_focus_change, gdk_fb_window_send_crossing_events): Possibly send focus events when the mouse moves from one window to another. --- ChangeLog | 8 ++++++++ ChangeLog.pre-2-0 | 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 ++++++++ gdk/linux-fb/gdkwindow-fb.c | 33 ++++++++++++++++++++++++++++++--- 8 files changed, 86 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index 4bbd97d518..7517cc97cc 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2001-01-08 Alexander Larsson + + * gdk/linux-fb/gdkwindow-fb.c (_gdk_fb_window_find_focus, + gdk_fb_window_find_focus, gdk_fb_send_focus_change, + gdk_fb_window_send_crossing_events): + Possibly send focus events when the mouse moves from one + window to another. + 2001-01-07 Tor Lillqvist * gdk/win32/gdkwindow-win32.c (gdk_window_set_title, diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0 index 4bbd97d518..7517cc97cc 100644 --- a/ChangeLog.pre-2-0 +++ b/ChangeLog.pre-2-0 @@ -1,3 +1,11 @@ +2001-01-08 Alexander Larsson + + * gdk/linux-fb/gdkwindow-fb.c (_gdk_fb_window_find_focus, + gdk_fb_window_find_focus, gdk_fb_send_focus_change, + gdk_fb_window_send_crossing_events): + Possibly send focus events when the mouse moves from one + window to another. + 2001-01-07 Tor Lillqvist * gdk/win32/gdkwindow-win32.c (gdk_window_set_title, diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 4bbd97d518..7517cc97cc 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,11 @@ +2001-01-08 Alexander Larsson + + * gdk/linux-fb/gdkwindow-fb.c (_gdk_fb_window_find_focus, + gdk_fb_window_find_focus, gdk_fb_send_focus_change, + gdk_fb_window_send_crossing_events): + Possibly send focus events when the mouse moves from one + window to another. + 2001-01-07 Tor Lillqvist * gdk/win32/gdkwindow-win32.c (gdk_window_set_title, diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2 index 4bbd97d518..7517cc97cc 100644 --- a/ChangeLog.pre-2-2 +++ b/ChangeLog.pre-2-2 @@ -1,3 +1,11 @@ +2001-01-08 Alexander Larsson + + * gdk/linux-fb/gdkwindow-fb.c (_gdk_fb_window_find_focus, + gdk_fb_window_find_focus, gdk_fb_send_focus_change, + gdk_fb_window_send_crossing_events): + Possibly send focus events when the mouse moves from one + window to another. + 2001-01-07 Tor Lillqvist * gdk/win32/gdkwindow-win32.c (gdk_window_set_title, diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4 index 4bbd97d518..7517cc97cc 100644 --- a/ChangeLog.pre-2-4 +++ b/ChangeLog.pre-2-4 @@ -1,3 +1,11 @@ +2001-01-08 Alexander Larsson + + * gdk/linux-fb/gdkwindow-fb.c (_gdk_fb_window_find_focus, + gdk_fb_window_find_focus, gdk_fb_send_focus_change, + gdk_fb_window_send_crossing_events): + Possibly send focus events when the mouse moves from one + window to another. + 2001-01-07 Tor Lillqvist * gdk/win32/gdkwindow-win32.c (gdk_window_set_title, diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 4bbd97d518..7517cc97cc 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,11 @@ +2001-01-08 Alexander Larsson + + * gdk/linux-fb/gdkwindow-fb.c (_gdk_fb_window_find_focus, + gdk_fb_window_find_focus, gdk_fb_send_focus_change, + gdk_fb_window_send_crossing_events): + Possibly send focus events when the mouse moves from one + window to another. + 2001-01-07 Tor Lillqvist * gdk/win32/gdkwindow-win32.c (gdk_window_set_title, diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 4bbd97d518..7517cc97cc 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,11 @@ +2001-01-08 Alexander Larsson + + * gdk/linux-fb/gdkwindow-fb.c (_gdk_fb_window_find_focus, + gdk_fb_window_find_focus, gdk_fb_send_focus_change, + gdk_fb_window_send_crossing_events): + Possibly send focus events when the mouse moves from one + window to another. + 2001-01-07 Tor Lillqvist * gdk/win32/gdkwindow-win32.c (gdk_window_set_title, diff --git a/gdk/linux-fb/gdkwindow-fb.c b/gdk/linux-fb/gdkwindow-fb.c index b74bc25d38..07409217c4 100644 --- a/gdk/linux-fb/gdkwindow-fb.c +++ b/gdk/linux-fb/gdkwindow-fb.c @@ -455,13 +455,13 @@ gdk_fb_redraw_all (void) /* Focus follows pointer */ GdkWindow * -gdk_fb_window_find_focus (void) +_gdk_fb_window_find_focus (GdkWindow *window_with_mouse) { if (_gdk_fb_keyboard_grab_window) return _gdk_fb_keyboard_grab_window; - else if (gdk_fb_window_containing_pointer) + else if (window_with_mouse) { - GdkWindowObject *priv = (GdkWindowObject *)gdk_fb_window_containing_pointer; + GdkWindowObject *priv = (GdkWindowObject *)window_with_mouse; while (priv != (GdkWindowObject *)gdk_parent_root) { if ((priv->parent == (GdkWindowObject *)gdk_parent_root) && priv->mapped) @@ -473,6 +473,32 @@ gdk_fb_window_find_focus (void) return gdk_parent_root; } +GdkWindow * +gdk_fb_window_find_focus (void) +{ + return _gdk_fb_window_find_focus (gdk_fb_window_containing_pointer); +} + + +static void +gdk_fb_send_focus_change (GdkWindow *old_window_containing_pointer, + GdkWindow *new_window_containing_pointer) +{ + GdkEventFocus *event; + GdkWindow *old_win, *new_win; + old_win = _gdk_fb_window_find_focus (old_window_containing_pointer); + new_win = _gdk_fb_window_find_focus (new_window_containing_pointer); + + if (old_win != new_win) + { + event = (GdkEventFocus *)gdk_event_make (old_win, GDK_FOCUS_CHANGE, TRUE); + if (event) + event->in = FALSE; + event = (GdkEventFocus *)gdk_event_make (new_win, GDK_FOCUS_CHANGE, TRUE); + if (event) + event->in = TRUE; + } +} static GdkWindow * gdk_fb_find_common_ancestor (GdkWindow *win1, @@ -679,6 +705,7 @@ gdk_fb_window_send_crossing_events (GdkWindow *dest, if ((mode != GDK_CROSSING_GRAB) && (b != gdk_fb_window_containing_pointer)) { + gdk_fb_send_focus_change (gdk_fb_window_containing_pointer, b); gdk_window_unref (gdk_fb_window_containing_pointer); gdk_fb_window_containing_pointer = gdk_window_ref (b); }