]> Pileus Git - ~andy/gtk/commitdiff
Move from here... ...to here. (_gdk_windowing_window_destroy): Update the
authorRichard Hult <richard@imendio.com>
Fri, 13 Jul 2007 19:09:10 +0000 (19:09 +0000)
committerRichard Hult <rhult@src.gnome.org>
Fri, 13 Jul 2007 19:09:10 +0000 (19:09 +0000)
2007-07-13  Richard Hult  <richard@imendio.com>

* gdk/quartz/gdkprivate-quartz.h:
* gdk/quartz/gdkevents-quartz.c: (gdk_window_is_ancestor): Move
from here...
* gdk/quartz/gdkwindow-quartz.c: (_gdk_quartz_window_is_ancestor):
...to here.
(_gdk_windowing_window_destroy): Update the mouse window if the
destroyed window is an ancestor of the current one, not only if
they are the same.
(gdk_window_hide): Update the mouse window here too.

svn path=/trunk/; revision=18467

ChangeLog
gdk/quartz/gdkevents-quartz.c
gdk/quartz/gdkprivate-quartz.h
gdk/quartz/gdkwindow-quartz.c

index 400546b352fc5c2bc541994e06e3b93ca50ffe3c..4c29e7357b941aefde6acfe31109388ea68b4769 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2007-07-13  Richard Hult  <richard@imendio.com>
+
+       * gdk/quartz/gdkprivate-quartz.h:
+       * gdk/quartz/gdkevents-quartz.c: (gdk_window_is_ancestor): Move
+       from here...
+       * gdk/quartz/gdkwindow-quartz.c: (_gdk_quartz_window_is_ancestor):
+       ...to here.
+       (_gdk_windowing_window_destroy): Update the mouse window if the
+       destroyed window is an ancestor of the current one, not only if
+       they are the same.
+       (gdk_window_hide): Update the mouse window here too.
+
 2007-07-13  Richard Hult  <richard@imendio.com>
 
        * gdk/quartz/gdkcolor-quartz.c: (gdk_colors_alloc),
index 5bae459d7bdda4c0b539fafcc61e4122129e1eaf..8d6b51373cee7a019f7aa73fc2e2bb25c5912883 100644 (file)
@@ -603,17 +603,6 @@ _gdk_quartz_events_update_focus_window (GdkWindow *window,
     }
 }
 
-static gboolean
-gdk_window_is_ancestor (GdkWindow *ancestor,
-                       GdkWindow *window)
-{
-  if (ancestor == NULL || window == NULL)
-    return FALSE;
-
-  return (gdk_window_get_parent (window) == ancestor ||
-         gdk_window_is_ancestor (ancestor, gdk_window_get_parent (window)));
-}
-
 static void
 convert_window_coordinates_to_root (GdkWindow *window,
                                    gdouble    x,
@@ -774,7 +763,7 @@ synthesize_crossing_events (GdkWindow      *window,
   if (window == current_mouse_window)
     return;
 
-  if (gdk_window_is_ancestor (current_mouse_window, window))
+  if (_gdk_quartz_window_is_ancestor (current_mouse_window, window))
     {
       /* Pointer has moved to an inferior window. */
       synthesize_leave_event (current_mouse_window, nsevent, mode, GDK_NOTIFY_INFERIOR);
@@ -791,7 +780,7 @@ synthesize_crossing_events (GdkWindow      *window,
 
       synthesize_enter_event (window, nsevent, mode, GDK_NOTIFY_ANCESTOR);
     }
-  else if (gdk_window_is_ancestor (window, current_mouse_window))
+  else if (_gdk_quartz_window_is_ancestor (window, current_mouse_window))
     {
       /* Pointer has moved to an ancestor window. */
       synthesize_leave_event (current_mouse_window, nsevent, mode, GDK_NOTIFY_ANCESTOR);
@@ -815,7 +804,7 @@ synthesize_crossing_events (GdkWindow      *window,
        common_ancestor = gdk_window_get_parent (tem);
        tem = common_ancestor;
       } while (common_ancestor &&
-              !gdk_window_is_ancestor (common_ancestor, window));
+              !_gdk_quartz_window_is_ancestor (common_ancestor, window));
       if (common_ancestor)
        {
          synthesize_leave_event (current_mouse_window, nsevent, mode, GDK_NOTIFY_NONLINEAR);
@@ -878,8 +867,11 @@ _gdk_quartz_events_send_map_events (GdkWindow *window)
 
 /* Get current mouse window */
 GdkWindow *
-_gdk_quartz_events_get_mouse_window (void)
+_gdk_quartz_events_get_mouse_window (gboolean consider_grabs)
 {
+  if (!consider_grabs)
+    return current_mouse_window;
+
   if (_gdk_quartz_pointer_grab_window && !pointer_grab_owner_events)
     return _gdk_quartz_pointer_grab_window;
   
index 875dadc8b45d89d5e6a198dd7842a168aa93061d..c3b7b0bc63886b56c0d92d3ca49834c4d5fd8130 100644 (file)
@@ -134,6 +134,8 @@ void _gdk_quartz_colormap_get_rgba_from_pixel (GdkColormap *colormap,
                                               gfloat      *alpha);
 
 /* Window */
+gboolean    _gdk_quartz_window_is_ancestor          (GdkWindow *ancestor,
+                                                     GdkWindow *window);
 gint       _gdk_quartz_window_get_inverted_screen_y (gint       y);
 GdkWindow *_gdk_quartz_window_find_child            (GdkWindow *window,
                                                     gint       x,
@@ -144,9 +146,9 @@ void       _gdk_quartz_window_did_become_main       (GdkWindow *window);
 void       _gdk_quartz_window_did_resign_main       (GdkWindow *window);
 
 /* Events */
-void         _gdk_quartz_events_update_focus_window   (GdkWindow *new_window,
-                                                      gboolean   got_focus);
-GdkWindow *  _gdk_quartz_events_get_mouse_window       (void);
+void         _gdk_quartz_events_update_focus_window    (GdkWindow *new_window,
+                                                        gboolean   got_focus);
+GdkWindow *  _gdk_quartz_events_get_mouse_window       (gboolean   consider_grabs);
 void         _gdk_quartz_events_update_mouse_window    (GdkWindow *window);
 void         _gdk_quartz_events_update_cursor          (GdkWindow *window);
 void         _gdk_quartz_events_send_map_events        (GdkWindow *window);
index b4a1997f57415538daa644459b876e0791774b2d..d4fc015675e2b34442d9c9b96c2b75b2c688a1a2 100644 (file)
@@ -436,6 +436,18 @@ get_default_title (void)
   return title;
 }
 
+gboolean
+_gdk_quartz_window_is_ancestor (GdkWindow *ancestor,
+                                GdkWindow *window)
+{
+  if (ancestor == NULL || window == NULL)
+    return FALSE;
+
+  return (gdk_window_get_parent (window) == ancestor ||
+          _gdk_quartz_window_is_ancestor (ancestor, 
+                                          gdk_window_get_parent (window)));
+}
+
 /* FIXME: It would be nice to have one function that takes an NSPoint
  * and flips the coords for any window.
  */
@@ -789,9 +801,12 @@ _gdk_windowing_window_destroy (GdkWindow *window,
   if (!recursing && !foreign_destroy)
     {
       GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (window)->impl);
+      GdkWindow *mouse_window;
 
-      if (window == _gdk_quartz_events_get_mouse_window ()) 
-       _gdk_quartz_events_update_mouse_window (_gdk_root);
+      mouse_window = _gdk_quartz_events_get_mouse_window (FALSE);
+      if (window == mouse_window ||
+          _gdk_quartz_window_is_ancestor (window, mouse_window))
+        _gdk_quartz_events_update_mouse_window (_gdk_root);
 
       GDK_QUARTZ_ALLOC_POOL;
 
@@ -966,12 +981,18 @@ gdk_window_hide (GdkWindow *window)
 {
   GdkWindowObject *private = (GdkWindowObject *)window;
   GdkWindowImplQuartz *impl;
+  GdkWindow *mouse_window;
 
   g_return_if_fail (GDK_IS_WINDOW (window));
 
   if (GDK_WINDOW_DESTROYED (window))
     return;
 
+  mouse_window = _gdk_quartz_events_get_mouse_window (FALSE);
+  if (window == mouse_window || 
+      _gdk_quartz_window_is_ancestor (window, mouse_window))
+    _gdk_quartz_events_update_mouse_window (_gdk_root);
+
   if (GDK_WINDOW_IS_MAPPED (window))
     gdk_synthesize_window_state (window,
                                 0,
@@ -1264,6 +1285,8 @@ gdk_window_set_cursor (GdkWindow *window,
   if (GDK_WINDOW_DESTROYED (window))
     return;
 
+  GDK_QUARTZ_ALLOC_POOL;
+
   if (!cursor)
     nscursor = NULL;
   else 
@@ -1274,7 +1297,9 @@ gdk_window_set_cursor (GdkWindow *window,
 
   impl->nscursor = nscursor;
 
-  _gdk_quartz_events_update_cursor (_gdk_quartz_events_get_mouse_window ());
+  GDK_QUARTZ_RELEASE_POOL;
+
+  _gdk_quartz_events_update_cursor (_gdk_quartz_events_get_mouse_window (TRUE));
 }
 
 void