forked from AuroraMiddleware/gtk
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:
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
|
||||||
|
Loading…
Reference in New Issue
Block a user