#define GRIP_WIDTH 15
#define GRIP_HEIGHT 15
+#define WINDOW_IS_TOPLEVEL(window) \
+ (GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD && \
+ GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN && \
+ GDK_WINDOW_TYPE (window) != GDK_WINDOW_OFFSCREEN)
+
/* This is the window corresponding to the key window */
static GdkWindow *current_keyboard_window;
info = _gdk_display_get_pointer_info (display, display->core_pointer);
toplevel = info->toplevel_under_pointer;
- if (toplevel)
+ if (toplevel && WINDOW_IS_TOPLEVEL (toplevel))
{
GdkWindowObject *private;
NSWindow *nswindow;
grab = _gdk_display_get_last_device_grab (display, device);
if (grab && grab->window && !grab->owner_events)
{
- window = gdk_window_get_toplevel (grab->window);
+ window = gdk_window_get_effective_toplevel (grab->window);
break;
}
}
*/
grab = _gdk_display_get_last_device_grab (display,
display->core_pointer);
- if (grab)
+ if (WINDOW_IS_TOPLEVEL (toplevel) && grab)
{
/* Implicit grabs do not go through XGrabPointer and thus the
* event mask should not be checked.
GdkWindowObject *grab_private;
NSWindow *grab_nswindow;
- grab_toplevel = gdk_window_get_toplevel (grab->window);
+ grab_toplevel = gdk_window_get_effective_toplevel (grab->window);
grab_private = (GdkWindowObject *)grab_toplevel;
grab_nswindow = ((GdkWindowImplQuartz *)grab_private->impl)->toplevel;
toplevel_under_pointer = find_toplevel_under_pointer (display,
screen_point,
&x_tmp, &y_tmp);
- if (toplevel_under_pointer)
+ if (toplevel_under_pointer
+ && WINDOW_IS_TOPLEVEL (toplevel_under_pointer))
{
GdkWindowObject *toplevel_private;
GdkWindowImplQuartz *toplevel_impl;
{
GdkWindow *toplevel;
- toplevel = gdk_window_get_toplevel (window);
- if (toplevel)
+ toplevel = gdk_window_get_effective_toplevel (window);
+ if (toplevel && WINDOW_IS_TOPLEVEL (toplevel))
{
GdkWindowObject *toplevel_private;
GdkWindowImplQuartz *toplevel_impl;
}
}
- _gdk_quartz_window_set_needs_display_in_region (window, region);
+ if (WINDOW_IS_TOPLEVEL (window))
+ _gdk_quartz_window_set_needs_display_in_region (window, region);
+ else
+ _gdk_window_process_updates_recurse (window, region);
/* NOTE: I'm not sure if we should displayIfNeeded here. It slows down a
* lot (since it triggers the beam syncing) and things seem to work
if (new_window &&
new_window != window &&
GDK_WINDOW_IS_MAPPED (new_window) &&
- GDK_WINDOW_OBJECT (new_window)->window_type != GDK_WINDOW_TEMP)
+ WINDOW_IS_TOPLEVEL (new_window))
{
GdkWindowObject *private = (GdkWindowObject *) new_window;
GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
(attributes->cursor) :
NULL));
+ impl->view = NULL;
+
switch (attributes->window_type)
{
case GDK_WINDOW_TOPLEVEL:
else
focus_on_map = TRUE;
- if (impl->toplevel)
+ if (WINDOW_IS_TOPLEVEL (window) && impl->toplevel)
{
gboolean make_key;
impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
- if (impl->toplevel)
+ if (WINDOW_IS_TOPLEVEL (window))
{
/* Update main window. */
main_window_stack = g_slist_remove (main_window_stack, window);