Move from here... ...to here. (_gdk_windowing_window_destroy): Update the
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
This commit is contained in:
		
				
					committed by
					
						
						Richard Hult
					
				
			
			
				
	
			
			
			
						parent
						
							7f66d205e8
						
					
				
				
					commit
					ed82448b9a
				
			
							
								
								
									
										12
									
								
								ChangeLog
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								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>
 | 
					2007-07-13  Richard Hult  <richard@imendio.com>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	* gdk/quartz/gdkcolor-quartz.c: (gdk_colors_alloc),
 | 
						* gdk/quartz/gdkcolor-quartz.c: (gdk_colors_alloc),
 | 
				
			||||||
 | 
				
			|||||||
@ -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
 | 
					static void
 | 
				
			||||||
convert_window_coordinates_to_root (GdkWindow *window,
 | 
					convert_window_coordinates_to_root (GdkWindow *window,
 | 
				
			||||||
				    gdouble    x,
 | 
									    gdouble    x,
 | 
				
			||||||
@ -774,7 +763,7 @@ synthesize_crossing_events (GdkWindow      *window,
 | 
				
			|||||||
  if (window == current_mouse_window)
 | 
					  if (window == current_mouse_window)
 | 
				
			||||||
    return;
 | 
					    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. */
 | 
					      /* Pointer has moved to an inferior window. */
 | 
				
			||||||
      synthesize_leave_event (current_mouse_window, nsevent, mode, GDK_NOTIFY_INFERIOR);
 | 
					      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);
 | 
					      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. */
 | 
					      /* Pointer has moved to an ancestor window. */
 | 
				
			||||||
      synthesize_leave_event (current_mouse_window, nsevent, mode, GDK_NOTIFY_ANCESTOR);
 | 
					      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);
 | 
						common_ancestor = gdk_window_get_parent (tem);
 | 
				
			||||||
	tem = common_ancestor;
 | 
						tem = common_ancestor;
 | 
				
			||||||
      } while (common_ancestor &&
 | 
					      } while (common_ancestor &&
 | 
				
			||||||
	       !gdk_window_is_ancestor (common_ancestor, window));
 | 
						       !_gdk_quartz_window_is_ancestor (common_ancestor, window));
 | 
				
			||||||
      if (common_ancestor)
 | 
					      if (common_ancestor)
 | 
				
			||||||
	{
 | 
						{
 | 
				
			||||||
	  synthesize_leave_event (current_mouse_window, nsevent, mode, GDK_NOTIFY_NONLINEAR);
 | 
						  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 */
 | 
					/* Get current mouse window */
 | 
				
			||||||
GdkWindow *
 | 
					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)
 | 
					  if (_gdk_quartz_pointer_grab_window && !pointer_grab_owner_events)
 | 
				
			||||||
    return _gdk_quartz_pointer_grab_window;
 | 
					    return _gdk_quartz_pointer_grab_window;
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
 | 
				
			|||||||
@ -134,6 +134,8 @@ void _gdk_quartz_colormap_get_rgba_from_pixel (GdkColormap *colormap,
 | 
				
			|||||||
					       gfloat      *alpha);
 | 
										       gfloat      *alpha);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Window */
 | 
					/* Window */
 | 
				
			||||||
 | 
					gboolean    _gdk_quartz_window_is_ancestor          (GdkWindow *ancestor,
 | 
				
			||||||
 | 
					                                                     GdkWindow *window);
 | 
				
			||||||
gint       _gdk_quartz_window_get_inverted_screen_y (gint       y);
 | 
					gint       _gdk_quartz_window_get_inverted_screen_y (gint       y);
 | 
				
			||||||
GdkWindow *_gdk_quartz_window_find_child            (GdkWindow *window,
 | 
					GdkWindow *_gdk_quartz_window_find_child            (GdkWindow *window,
 | 
				
			||||||
						     gint       x,
 | 
											     gint       x,
 | 
				
			||||||
@ -144,9 +146,9 @@ void       _gdk_quartz_window_did_become_main       (GdkWindow *window);
 | 
				
			|||||||
void       _gdk_quartz_window_did_resign_main       (GdkWindow *window);
 | 
					void       _gdk_quartz_window_did_resign_main       (GdkWindow *window);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Events */
 | 
					/* Events */
 | 
				
			||||||
void         _gdk_quartz_events_update_focus_window   (GdkWindow *new_window,
 | 
					void         _gdk_quartz_events_update_focus_window    (GdkWindow *new_window,
 | 
				
			||||||
						       gboolean   got_focus);
 | 
					                                                        gboolean   got_focus);
 | 
				
			||||||
GdkWindow *  _gdk_quartz_events_get_mouse_window       (void);
 | 
					GdkWindow *  _gdk_quartz_events_get_mouse_window       (gboolean   consider_grabs);
 | 
				
			||||||
void         _gdk_quartz_events_update_mouse_window    (GdkWindow *window);
 | 
					void         _gdk_quartz_events_update_mouse_window    (GdkWindow *window);
 | 
				
			||||||
void         _gdk_quartz_events_update_cursor          (GdkWindow *window);
 | 
					void         _gdk_quartz_events_update_cursor          (GdkWindow *window);
 | 
				
			||||||
void         _gdk_quartz_events_send_map_events        (GdkWindow *window);
 | 
					void         _gdk_quartz_events_send_map_events        (GdkWindow *window);
 | 
				
			||||||
 | 
				
			|||||||
@ -436,6 +436,18 @@ get_default_title (void)
 | 
				
			|||||||
  return title;
 | 
					  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
 | 
					/* FIXME: It would be nice to have one function that takes an NSPoint
 | 
				
			||||||
 * and flips the coords for any window.
 | 
					 * and flips the coords for any window.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
@ -789,9 +801,12 @@ _gdk_windowing_window_destroy (GdkWindow *window,
 | 
				
			|||||||
  if (!recursing && !foreign_destroy)
 | 
					  if (!recursing && !foreign_destroy)
 | 
				
			||||||
    {
 | 
					    {
 | 
				
			||||||
      GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (window)->impl);
 | 
					      GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (window)->impl);
 | 
				
			||||||
 | 
					      GdkWindow *mouse_window;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      if (window == _gdk_quartz_events_get_mouse_window ()) 
 | 
					      mouse_window = _gdk_quartz_events_get_mouse_window (FALSE);
 | 
				
			||||||
	_gdk_quartz_events_update_mouse_window (_gdk_root);
 | 
					      if (window == mouse_window ||
 | 
				
			||||||
 | 
					          _gdk_quartz_window_is_ancestor (window, mouse_window))
 | 
				
			||||||
 | 
					        _gdk_quartz_events_update_mouse_window (_gdk_root);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
      GDK_QUARTZ_ALLOC_POOL;
 | 
					      GDK_QUARTZ_ALLOC_POOL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -966,12 +981,18 @@ gdk_window_hide (GdkWindow *window)
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  GdkWindowObject *private = (GdkWindowObject *)window;
 | 
					  GdkWindowObject *private = (GdkWindowObject *)window;
 | 
				
			||||||
  GdkWindowImplQuartz *impl;
 | 
					  GdkWindowImplQuartz *impl;
 | 
				
			||||||
 | 
					  GdkWindow *mouse_window;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  g_return_if_fail (GDK_IS_WINDOW (window));
 | 
					  g_return_if_fail (GDK_IS_WINDOW (window));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (GDK_WINDOW_DESTROYED (window))
 | 
					  if (GDK_WINDOW_DESTROYED (window))
 | 
				
			||||||
    return;
 | 
					    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))
 | 
					  if (GDK_WINDOW_IS_MAPPED (window))
 | 
				
			||||||
    gdk_synthesize_window_state (window,
 | 
					    gdk_synthesize_window_state (window,
 | 
				
			||||||
				 0,
 | 
									 0,
 | 
				
			||||||
@ -1264,6 +1285,8 @@ gdk_window_set_cursor (GdkWindow *window,
 | 
				
			|||||||
  if (GDK_WINDOW_DESTROYED (window))
 | 
					  if (GDK_WINDOW_DESTROYED (window))
 | 
				
			||||||
    return;
 | 
					    return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  GDK_QUARTZ_ALLOC_POOL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if (!cursor)
 | 
					  if (!cursor)
 | 
				
			||||||
    nscursor = NULL;
 | 
					    nscursor = NULL;
 | 
				
			||||||
  else 
 | 
					  else 
 | 
				
			||||||
@ -1274,7 +1297,9 @@ gdk_window_set_cursor (GdkWindow *window,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  impl->nscursor = nscursor;
 | 
					  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
 | 
					void
 | 
				
			||||||
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user