From 95ab1e7123534178d4ce1783293eeb66ccc9438b Mon Sep 17 00:00:00 2001 From: Tor Lillqvist Date: Sun, 9 Jan 2005 19:26:25 +0000 Subject: [PATCH] Set current cursor also when changing the cursor of a window that is the 2005-01-09 Tor Lillqvist * gdk/win32/gdkwindow-win32.c (gdk_window_set_cursor): Set current cursor also when changing the cursor of a window that is the first ancestor of the window containing the pointer that has a cursor defined. (#163035, Ivan Wong) --- ChangeLog | 7 +++++++ ChangeLog.pre-2-10 | 7 +++++++ ChangeLog.pre-2-6 | 7 +++++++ ChangeLog.pre-2-8 | 7 +++++++ gdk/win32/gdkwindow-win32.c | 29 +++++++++++++++++++++++++---- 5 files changed, 53 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 28e6eac39a..d0dd954630 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2005-01-09 Tor Lillqvist + + * gdk/win32/gdkwindow-win32.c (gdk_window_set_cursor): Set current + cursor also when changing the cursor of a window that is the first + ancestor of the window containing the pointer that has a cursor + defined. (#163035, Ivan Wong) + 2005-01-09 Anders Carlsson * gtk/gtkcellrenderertext.c: (get_size): diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index 28e6eac39a..d0dd954630 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,3 +1,10 @@ +2005-01-09 Tor Lillqvist + + * gdk/win32/gdkwindow-win32.c (gdk_window_set_cursor): Set current + cursor also when changing the cursor of a window that is the first + ancestor of the window containing the pointer that has a cursor + defined. (#163035, Ivan Wong) + 2005-01-09 Anders Carlsson * gtk/gtkcellrenderertext.c: (get_size): diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6 index 28e6eac39a..d0dd954630 100644 --- a/ChangeLog.pre-2-6 +++ b/ChangeLog.pre-2-6 @@ -1,3 +1,10 @@ +2005-01-09 Tor Lillqvist + + * gdk/win32/gdkwindow-win32.c (gdk_window_set_cursor): Set current + cursor also when changing the cursor of a window that is the first + ancestor of the window containing the pointer that has a cursor + defined. (#163035, Ivan Wong) + 2005-01-09 Anders Carlsson * gtk/gtkcellrenderertext.c: (get_size): diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8 index 28e6eac39a..d0dd954630 100644 --- a/ChangeLog.pre-2-8 +++ b/ChangeLog.pre-2-8 @@ -1,3 +1,10 @@ +2005-01-09 Tor Lillqvist + + * gdk/win32/gdkwindow-win32.c (gdk_window_set_cursor): Set current + cursor also when changing the cursor of a window that is the first + ancestor of the window containing the pointer that has a cursor + defined. (#163035, Ivan Wong) + 2005-01-09 Anders Carlsson * gtk/gtkcellrenderertext.c: (get_size): diff --git a/gdk/win32/gdkwindow-win32.c b/gdk/win32/gdkwindow-win32.c index 99a2e02bed..bb7502ac72 100644 --- a/gdk/win32/gdkwindow-win32.c +++ b/gdk/win32/gdkwindow-win32.c @@ -1823,10 +1823,31 @@ gdk_window_set_cursor (GdkWindow *window, hcursor, impl->hcursor)); } - /* If the pointer is over our window, set new cursor if given */ - if (gdk_window_get_pointer(window, NULL, NULL, NULL) == window) - if (impl->hcursor != NULL) - SetCursor (impl->hcursor); + if (impl->hcursor != NULL) + { + /* If the pointer is over our window, set new cursor */ + GdkWindow *curr_window = gdk_window_get_pointer (window, NULL, NULL, NULL); + if (curr_window == window) + SetCursor (impl->hcursor); + else + { + /* Climb up the tree and find whether our window is the + * first ancestor that has cursor defined, and if so, set + * new cursor. + */ + GdkWindowObject *curr_window_obj = GDK_WINDOW_OBJECT (curr_window); + while (curr_window_obj && + !GDK_WINDOW_IMPL_WIN32 (curr_window_obj->impl)->hcursor) + { + curr_window_obj = curr_window_obj->parent; + if (curr_window_obj == GDK_WINDOW_OBJECT (window)) + { + SetCursor (impl->hcursor); + break; + } + } + } + } /* Destroy the previous cursor: Need to make sure it's no longer in * use before we destroy it, in case we're not over our window but