summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdk/quartz/GdkQuartzView.c8
-rw-r--r--gdk/quartz/GdkQuartzWindow.c40
-rw-r--r--gdk/quartz/Makefile.am2
-rw-r--r--gdk/quartz/gdkdevice-core.c10
-rw-r--r--gdk/quartz/gdkdrawable-quartz.c232
-rw-r--r--gdk/quartz/gdkdrawable-quartz.h71
-rw-r--r--gdk/quartz/gdkevents-quartz.c58
-rw-r--r--gdk/quartz/gdkgeometry-quartz.c3
-rw-r--r--gdk/quartz/gdkinput.c14
-rw-r--r--gdk/quartz/gdkprivate-quartz.h6
-rw-r--r--gdk/quartz/gdkwindow-quartz.c742
-rw-r--r--gdk/quartz/gdkwindow-quartz.h19
12 files changed, 467 insertions, 738 deletions
diff --git a/gdk/quartz/GdkQuartzView.c b/gdk/quartz/GdkQuartzView.c
index 8c6132b2ab..cf34e8302a 100644
--- a/gdk/quartz/GdkQuartzView.c
+++ b/gdk/quartz/GdkQuartzView.c
@@ -68,8 +68,7 @@
-(void)drawRect:(NSRect)rect
{
GdkRectangle gdk_rect;
- GdkWindowObject *private = GDK_WINDOW_OBJECT (gdk_window);
- GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (gdk_window->impl);
const NSRect *drawn_rects;
NSInteger count;
int i;
@@ -78,7 +77,7 @@
if (GDK_WINDOW_DESTROYED (gdk_window))
return;
- if (!(private->event_mask & GDK_EXPOSURE_MASK))
+ if (!(gdk_window->event_mask & GDK_EXPOSURE_MASK))
return;
if (NSEqualRects (rect, NSZeroRect))
@@ -127,8 +126,7 @@
*/
-(void)updateTrackingRect
{
- GdkWindowObject *private = GDK_WINDOW_OBJECT (gdk_window);
- GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (gdk_window->impl);
NSRect rect;
if (!impl->toplevel)
diff --git a/gdk/quartz/GdkQuartzWindow.c b/gdk/quartz/GdkQuartzWindow.c
index eb3cce8947..6fd0c9b75e 100644
--- a/gdk/quartz/GdkQuartzWindow.c
+++ b/gdk/quartz/GdkQuartzWindow.c
@@ -140,7 +140,6 @@
-(void)windowDidMove:(NSNotification *)aNotification
{
GdkWindow *window = [[self contentView] gdkWindow];
- GdkWindowObject *private = (GdkWindowObject *)window;
GdkEvent *event;
_gdk_quartz_window_update_position (window);
@@ -148,10 +147,10 @@
/* Synthesize a configure event */
event = gdk_event_new (GDK_CONFIGURE);
event->configure.window = g_object_ref (window);
- event->configure.x = private->x;
- event->configure.y = private->y;
- event->configure.width = private->width;
- event->configure.height = private->height;
+ event->configure.x = window->x;
+ event->configure.y = window->y;
+ event->configure.width = window->width;
+ event->configure.height = window->height;
_gdk_event_queue_append (gdk_display_get_default (), event);
}
@@ -160,23 +159,22 @@
{
NSRect content_rect = [self contentRectForFrameRect:[self frame]];
GdkWindow *window = [[self contentView] gdkWindow];
- GdkWindowObject *private = (GdkWindowObject *)window;
GdkEvent *event;
- private->width = content_rect.size.width;
- private->height = content_rect.size.height;
+ window->width = content_rect.size.width;
+ window->height = content_rect.size.height;
- [[self contentView] setFrame:NSMakeRect (0, 0, private->width, private->height)];
+ [[self contentView] setFrame:NSMakeRect (0, 0, window->width, window->height)];
_gdk_window_update_size (window);
/* Synthesize a configure event */
event = gdk_event_new (GDK_CONFIGURE);
event->configure.window = g_object_ref (window);
- event->configure.x = private->x;
- event->configure.y = private->y;
- event->configure.width = private->width;
- event->configure.height = private->height;
+ event->configure.x = window->x;
+ event->configure.y = window->y;
+ event->configure.width = window->width;
+ event->configure.height = window->height;
_gdk_event_queue_append (gdk_display_get_default (), event);
}
@@ -199,8 +197,7 @@
-(BOOL)canBecomeMainWindow
{
GdkWindow *window = [[self contentView] gdkWindow];
- GdkWindowObject *private = (GdkWindowObject *)window;
- GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
switch (impl->type_hint)
{
@@ -229,16 +226,15 @@
-(BOOL)canBecomeKeyWindow
{
GdkWindow *window = [[self contentView] gdkWindow];
- GdkWindowObject *private = (GdkWindowObject *)window;
- GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
- if (!private->accept_focus)
+ if (!window->accept_focus)
return NO;
/* Popup windows should not be able to get focused in the window
* manager sense, it's only handled through grabs.
*/
- if (private->window_type == GDK_WINDOW_TEMP)
+ if (window->window_type == GDK_WINDOW_TEMP)
return NO;
switch (impl->type_hint)
@@ -268,8 +264,7 @@
- (void)showAndMakeKey:(BOOL)makeKey
{
GdkWindow *window = [[self contentView] gdkWindow];
- GdkWindowObject *private = (GdkWindowObject *)window;
- GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
inShowOrHide = YES;
@@ -284,8 +279,7 @@
- (void)hide
{
GdkWindow *window = [[self contentView] gdkWindow];
- GdkWindowObject *private = (GdkWindowObject *)window;
- GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
inShowOrHide = YES;
[impl->toplevel orderOut:nil];
diff --git a/gdk/quartz/Makefile.am b/gdk/quartz/Makefile.am
index b0a967d1e8..f7ffd5a326 100644
--- a/gdk/quartz/Makefile.am
+++ b/gdk/quartz/Makefile.am
@@ -27,8 +27,6 @@ libgdk_quartz_la_SOURCES = \
gdkdevicemanager-core.c \
gdkdisplay-quartz.c \
gdkdnd-quartz.c \
- gdkdrawable-quartz.c \
- gdkdrawable-quartz.h \
gdkevents-quartz.c \
gdkeventloop-quartz.c \
gdkgeometry-quartz.c \
diff --git a/gdk/quartz/gdkdevice-core.c b/gdk/quartz/gdkdevice-core.c
index 57dc3de728..25f9a1e479 100644
--- a/gdk/quartz/gdkdevice-core.c
+++ b/gdk/quartz/gdkdevice-core.c
@@ -188,8 +188,7 @@ gdk_device_core_query_state_helper (GdkWindow *window,
gint *y,
GdkModifierType *mask)
{
- GdkWindowObject *toplevel;
- GdkWindowObject *private;
+ GdkWindow *toplevel;
NSPoint point;
gint x_tmp, y_tmp;
GdkWindow *found_window;
@@ -204,7 +203,7 @@ gdk_device_core_query_state_helper (GdkWindow *window,
return NULL;
}
- toplevel = GDK_WINDOW_OBJECT (gdk_window_get_effective_toplevel (window));
+ toplevel = gdk_window_get_effective_toplevel (window);
*mask = _gdk_quartz_events_get_current_event_mask ();
@@ -220,15 +219,14 @@ gdk_device_core_query_state_helper (GdkWindow *window,
NSWindow *nswindow;
impl = GDK_WINDOW_IMPL_QUARTZ (toplevel->impl);
- private = GDK_WINDOW_OBJECT (toplevel);
nswindow = impl->toplevel;
point = [nswindow mouseLocationOutsideOfEventStream];
x_tmp = point.x;
- y_tmp = private->height - point.y;
+ y_tmp = toplevel->height - point.y;
- window = (GdkWindow *)toplevel;
+ window = toplevel;
}
found_window = _gdk_quartz_window_find_child (window, x_tmp, y_tmp,
diff --git a/gdk/quartz/gdkdrawable-quartz.c b/gdk/quartz/gdkdrawable-quartz.c
deleted file mode 100644
index 632f0cd009..0000000000
--- a/gdk/quartz/gdkdrawable-quartz.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/* gdkdrawable-quartz.c
- *
- * Copyright (C) 2005-2007 Imendio AB
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#include "config.h"
-#include <sys/time.h>
-#include <cairo-quartz.h>
-#include "gdkprivate-quartz.h"
-
-static gpointer parent_class;
-
-static cairo_user_data_key_t gdk_quartz_cairo_key;
-
-typedef struct {
- GdkDrawable *drawable;
- CGContextRef cg_context;
-} GdkQuartzCairoSurfaceData;
-
-static void
-gdk_quartz_cairo_surface_destroy (void *data)
-{
- GdkQuartzCairoSurfaceData *surface_data = data;
- GdkDrawableImplQuartz *impl = GDK_DRAWABLE_IMPL_QUARTZ (surface_data->drawable);
-
- impl->cairo_surface = NULL;
-
- gdk_quartz_drawable_release_context (surface_data->drawable,
- surface_data->cg_context);
-
- g_free (surface_data);
-}
-
-static cairo_surface_t *
-gdk_quartz_create_cairo_surface (GdkDrawable *drawable,
- int width,
- int height)
-{
- CGContextRef cg_context;
- GdkQuartzCairoSurfaceData *surface_data;
- cairo_surface_t *surface;
-
- cg_context = gdk_quartz_drawable_get_context (drawable, TRUE);
-
- if (!cg_context)
- return NULL;
-
- surface_data = g_new (GdkQuartzCairoSurfaceData, 1);
- surface_data->drawable = drawable;
- surface_data->cg_context = cg_context;
-
- surface = cairo_quartz_surface_create_for_cg_context (cg_context,
- width, height);
-
- cairo_surface_set_user_data (surface, &gdk_quartz_cairo_key,
- surface_data,
- gdk_quartz_cairo_surface_destroy);
-
- return surface;
-}
-
-static cairo_surface_t *
-gdk_quartz_ref_cairo_surface (GdkDrawable *drawable)
-{
- GdkDrawableImplQuartz *impl = GDK_DRAWABLE_IMPL_QUARTZ (drawable);
-
- if (GDK_IS_WINDOW_IMPL_QUARTZ (drawable) &&
- GDK_WINDOW_DESTROYED (impl->wrapper))
- return NULL;
-
- if (!impl->cairo_surface)
- {
- impl->cairo_surface =
- gdk_quartz_create_cairo_surface (drawable,
- gdk_window_get_width (impl->wrapper),
- gdk_window_get_height (impl->wrapper));
- }
- else
- cairo_surface_reference (impl->cairo_surface);
-
- return impl->cairo_surface;
-}
-
-static void
-gdk_drawable_impl_quartz_finalize (GObject *object)
-{
- G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-gdk_drawable_impl_quartz_class_init (GdkDrawableImplQuartzClass *klass)
-{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GdkDrawableClass *drawable_class = GDK_DRAWABLE_CLASS (klass);
-
- parent_class = g_type_class_peek_parent (klass);
-
- object_class->finalize = gdk_drawable_impl_quartz_finalize;
-
- drawable_class->ref_cairo_surface = gdk_quartz_ref_cairo_surface;
- drawable_class->create_cairo_surface = gdk_quartz_create_cairo_surface;
-}
-
-GType
-gdk_drawable_impl_quartz_get_type (void)
-{
- static GType object_type = 0;
-
- if (!object_type)
- {
- const GTypeInfo object_info =
- {
- sizeof (GdkDrawableImplQuartzClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) gdk_drawable_impl_quartz_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (GdkDrawableImplQuartz),
- 0, /* n_preallocs */
- (GInstanceInitFunc) NULL,
- };
-
- object_type = g_type_register_static (GDK_TYPE_DRAWABLE,
- "GdkDrawableImplQuartz",
- &object_info, 0);
- }
-
- return object_type;
-}
-
-CGContextRef
-gdk_quartz_drawable_get_context (GdkDrawable *drawable,
- gboolean antialias)
-{
- if (!GDK_DRAWABLE_IMPL_QUARTZ_GET_CLASS (drawable)->get_context)
- {
- g_warning ("%s doesn't implement GdkDrawableImplQuartzClass::get_context()",
- G_OBJECT_TYPE_NAME (drawable));
- return NULL;
- }
-
- return GDK_DRAWABLE_IMPL_QUARTZ_GET_CLASS (drawable)->get_context (drawable, antialias);
-}
-
-void
-gdk_quartz_drawable_release_context (GdkDrawable *drawable,
- CGContextRef cg_context)
-{
- if (!GDK_DRAWABLE_IMPL_QUARTZ_GET_CLASS (drawable)->release_context)
- {
- g_warning ("%s doesn't implement GdkDrawableImplQuartzClass::release_context()",
- G_OBJECT_TYPE_NAME (drawable));
- return;
- }
-
- GDK_DRAWABLE_IMPL_QUARTZ_GET_CLASS (drawable)->release_context (drawable, cg_context);
-}
-
-/* Help preventing "beam sync penalty" where CG makes all graphics code
- * block until the next vsync if we try to flush (including call display on
- * a view) too often. We do this by limiting the manual flushing done
- * outside of expose calls to less than some frequency when measured over
- * the last 4 flushes. This is a bit arbitray, but seems to make it possible
- * for some quick manual flushes (such as gtkruler or gimp's marching ants)
- * without hitting the max flush frequency.
- *
- * If drawable NULL, no flushing is done, only registering that a flush was
- * done externally.
- */
-void
-_gdk_quartz_drawable_flush (GdkDrawable *drawable)
-{
- static struct timeval prev_tv;
- static gint intervals[4];
- static gint index;
- struct timeval tv;
- gint ms;
-
- gettimeofday (&tv, NULL);
- ms = (tv.tv_sec - prev_tv.tv_sec) * 1000 + (tv.tv_usec - prev_tv.tv_usec) / 1000;
- intervals[index++ % 4] = ms;
-
- if (drawable)
- {
- ms = intervals[0] + intervals[1] + intervals[2] + intervals[3];
-
- /* ~25Hz on average. */
- if (ms > 4*40)
- {
- if (GDK_IS_WINDOW_IMPL_QUARTZ (drawable))
- {
- GdkWindowImplQuartz *window_impl = GDK_WINDOW_IMPL_QUARTZ (drawable);
-
- [window_impl->toplevel flushWindow];
- }
-
- prev_tv = tv;
- }
- }
- else
- prev_tv = tv;
-}
-
-void
-_gdk_quartz_drawable_finish (GdkDrawable *drawable)
-{
- GdkDrawableImplQuartz *impl = GDK_DRAWABLE_IMPL_QUARTZ (drawable);
-
- if (impl->cairo_surface)
- {
- cairo_surface_finish (impl->cairo_surface);
- cairo_surface_set_user_data (impl->cairo_surface, &gdk_quartz_cairo_key,
- NULL, NULL);
- impl->cairo_surface = NULL;
- }
-}
diff --git a/gdk/quartz/gdkdrawable-quartz.h b/gdk/quartz/gdkdrawable-quartz.h
deleted file mode 100644
index 24d17d83ea..0000000000
--- a/gdk/quartz/gdkdrawable-quartz.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/* gdkdrawable-quartz.h
- *
- * Copyright (C) 2005 Imendio AB
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the
- * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- */
-
-#ifndef __GDK_DRAWABLE_QUARTZ_H__
-#define __GDK_DRAWABLE_QUARTZ_H__
-
-#include <gdk/gdkdrawable.h>
-
-#include <AppKit/AppKit.h>
-
-G_BEGIN_DECLS
-
-/* Drawable implementation for Quartz
- */
-
-typedef struct _GdkDrawableImplQuartz GdkDrawableImplQuartz;
-typedef struct _GdkDrawableImplQuartzClass GdkDrawableImplQuartzClass;
-
-#define GDK_TYPE_DRAWABLE_IMPL_QUARTZ (gdk_drawable_impl_quartz_get_type ())
-#define GDK_DRAWABLE_IMPL_QUARTZ(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), GDK_TYPE_DRAWABLE_IMPL_QUARTZ, GdkDrawableImplQuartz))
-#define GDK_DRAWABLE_IMPL_QUARTZ_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GDK_TYPE_DRAWABLE_IMPL_QUARTZ, GdkDrawableImplQuartzClass))
-#define GDK_IS_DRAWABLE_IMPL_QUARTZ(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_DRAWABLE_IMPL_QUARTZ))
-#define GDK_IS_DRAWABLE_IMPL_QUARTZ_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GDK_TYPE_DRAWABLE_IMPL_QUARTZ))
-#define GDK_DRAWABLE_IMPL_QUARTZ_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GDK_TYPE_DRAWABLE_IMPL_QUARTZ, GdkDrawableImplQuartzClass))
-
-struct _GdkDrawableImplQuartz
-{
- GdkDrawable parent_instance;
-
- GdkDrawable *wrapper;
-
- cairo_surface_t *cairo_surface;
-};
-
-struct _GdkDrawableImplQuartzClass
-{
- GdkDrawableClass parent_class;
-
- /* vtable */
- CGContextRef (*get_context) (GdkDrawable* drawable,
- gboolean antialias);
- void (*release_context) (GdkDrawable *drawable,
- CGContextRef cg_context);
-};
-
-GType gdk_drawable_impl_quartz_get_type (void);
-CGContextRef gdk_quartz_drawable_get_context (GdkDrawable *drawable,
- gboolean antialias);
-void gdk_quartz_drawable_release_context (GdkDrawable *drawable,
- CGContextRef context);
-
-G_END_DECLS
-
-#endif /* __GDK_DRAWABLE_QUARTZ_H__ */
diff --git a/gdk/quartz/gdkevents-quartz.c b/gdk/quartz/gdkevents-quartz.c
index 44f10cbbf4..9cbfdda8e6 100644
--- a/gdk/quartz/gdkevents-quartz.c
+++ b/gdk/quartz/gdkevents-quartz.c
@@ -374,7 +374,6 @@ generate_motion_event (GdkWindow *window)
NSPoint screen_point;
NSWindow *nswindow;
GdkQuartzView *view;
- GdkWindowObject *private;
GdkEvent *event;
gint x, y, x_root, y_root;
GdkDisplay *display;
@@ -383,8 +382,7 @@ generate_motion_event (GdkWindow *window)
event->any.window = NULL;
event->any.send_event = TRUE;
- private = (GdkWindowObject *)window;
- nswindow = ((GdkWindowImplQuartz *)private->impl)->toplevel;
+ nswindow = ((GdkWindowImplQuartz *)window->impl)->toplevel;
view = (GdkQuartzView *)[nswindow contentView];
display = gdk_window_get_display (window);
@@ -396,7 +394,7 @@ generate_motion_event (GdkWindow *window)
point = [nswindow convertScreenToBase:screen_point];
x = point.x;
- y = private->height - point.y;
+ y = window->height - point.y;
event->any.type = GDK_MOTION_NOTIFY;
event->motion.window = window;
@@ -464,7 +462,6 @@ _gdk_quartz_events_send_enter_notify_event (GdkWindow *window)
NSPoint point;
NSPoint screen_point;
NSWindow *nswindow;
- GdkWindowObject *private;
GdkEvent *event;
gint x, y, x_root, y_root;
@@ -472,8 +469,7 @@ _gdk_quartz_events_send_enter_notify_event (GdkWindow *window)
event->any.window = NULL;
event->any.send_event = FALSE;
- private = (GdkWindowObject *)window;
- nswindow = ((GdkWindowImplQuartz *)private->impl)->toplevel;
+ nswindow = ((GdkWindowImplQuartz *)window->impl)->toplevel;
screen_point = [NSEvent mouseLocation];
@@ -482,7 +478,7 @@ _gdk_quartz_events_send_enter_notify_event (GdkWindow *window)
point = [nswindow convertScreenToBase:screen_point];
x = point.x;
- y = private->height - point.y;
+ y = window->height - point.y;
event->crossing.window = window;
event->crossing.subwindow = NULL;
@@ -503,13 +499,12 @@ _gdk_quartz_events_send_enter_notify_event (GdkWindow *window)
void
_gdk_quartz_events_send_map_event (GdkWindow *window)
{
- GdkWindowObject *private = (GdkWindowObject *)window;
- GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
if (!impl->toplevel)
return;
- if (private->event_mask & GDK_STRUCTURE_MASK)
+ if (window->event_mask & GDK_STRUCTURE_MASK)
{
GdkEvent event;
@@ -533,17 +528,15 @@ find_toplevel_under_pointer (GdkDisplay *display,
toplevel = info->toplevel_under_pointer;
if (toplevel && WINDOW_IS_TOPLEVEL (toplevel))
{
- GdkWindowObject *private;
NSWindow *nswindow;
NSPoint point;
- private = (GdkWindowObject *)toplevel;
- nswindow = ((GdkWindowImplQuartz *)private->impl)->toplevel;
+ nswindow = ((GdkWindowImplQuartz *)toplevel->impl)->toplevel;
point = [nswindow convertScreenToBase:screen_point];
*x = point.x;
- *y = private->height - point.y;
+ *y = toplevel->height - point.y;
}
return toplevel;
@@ -599,13 +592,11 @@ find_toplevel_for_mouse_event (NSEvent *nsevent,
GdkQuartzView *view;
GdkDisplay *display;
GdkDeviceGrabInfo *grab;
- GdkWindowObject *private;
view = (GdkQuartzView *)[[nsevent window] contentView];
toplevel = [view gdkWindow];
display = gdk_window_get_display (toplevel);
- private = GDK_WINDOW_OBJECT (toplevel);
event_type = [nsevent type];
point = [nsevent locationInWindow];
@@ -657,18 +648,16 @@ find_toplevel_for_mouse_event (NSEvent *nsevent,
{
/* Finally check the grab window. */
GdkWindow *grab_toplevel;
- GdkWindowObject *grab_private;
NSWindow *grab_nswindow;
grab_toplevel = gdk_window_get_effective_toplevel (grab->window);
- grab_private = (GdkWindowObject *)grab_toplevel;
- grab_nswindow = ((GdkWindowImplQuartz *)grab_private->impl)->toplevel;
+ grab_nswindow = ((GdkWindowImplQuartz *)grab_toplevel->impl)->toplevel;
point = [grab_nswindow convertScreenToBase:screen_point];
/* Note: x_root and y_root are already right. */
*x = point.x;
- *y = grab_private->height - point.y;
+ *y = grab_toplevel->height - point.y;
return grab_toplevel;
}
@@ -699,13 +688,11 @@ find_toplevel_for_mouse_event (NSEvent *nsevent,
if (toplevel_under_pointer
&& WINDOW_IS_TOPLEVEL (toplevel_under_pointer))
{
- GdkWindowObject *toplevel_private;
GdkWindowImplQuartz *toplevel_impl;
toplevel = toplevel_under_pointer;
- toplevel_private = (GdkWindowObject *)toplevel;
- toplevel_impl = (GdkWindowImplQuartz *)toplevel_private->impl;
+ toplevel_impl = (GdkWindowImplQuartz *)toplevel->impl;
if ([toplevel_impl->toplevel showsResizeIndicator])
{
@@ -756,17 +743,15 @@ find_window_for_ns_event (NSEvent *nsevent,
NSPoint screen_point;
NSEventType event_type;
GdkWindow *toplevel;
- GdkWindowObject *private;
view = (GdkQuartzView *)[[nsevent window] contentView];
toplevel = [view gdkWindow];
- private = GDK_WINDOW_OBJECT (toplevel);
point = [nsevent locationInWindow];
screen_point = [[nsevent window] convertBaseToScreen:point];
*x = point.x;
- *y = private->height - point.y;
+ *y = toplevel->height - point.y;
_gdk_quartz_window_nspoint_to_gdk_xy (screen_point, x_root, y_root);
@@ -934,11 +919,8 @@ fill_scroll_event (GdkWindow *window,
gint y_root,
GdkScrollDirection direction)
{
- GdkWindowObject *private;
NSPoint point;
- private = GDK_WINDOW_OBJECT (window);
-
point = [nsevent locationInWindow];
event->any.type = GDK_SCROLL;
@@ -1083,17 +1065,13 @@ synthesize_crossing_event (GdkWindow *window,
gint x_root,
gint y_root)
{
- GdkWindowObject *private;
-
- private = GDK_WINDOW_OBJECT (window);
-
switch ([nsevent type])
{
case NSMouseEntered:
/* Enter events are considered always to be from the root window as we
* can't know for sure from what window we enter.
*/
- if (!(private->event_mask & GDK_ENTER_NOTIFY_MASK))
+ if (!(window->event_mask & GDK_ENTER_NOTIFY_MASK))
return FALSE;
fill_crossing_event (window, event, nsevent,
@@ -1109,7 +1087,7 @@ synthesize_crossing_event (GdkWindow *window,
* since there is no way to reliably get information about what new
* window is entered when exiting one.
*/
- if (!(private->event_mask & GDK_LEAVE_NOTIFY_MASK))
+ if (!(window->event_mask & GDK_LEAVE_NOTIFY_MASK))
return FALSE;
fill_crossing_event (window, event, nsevent,
@@ -1220,14 +1198,13 @@ gdk_event_translate (GdkEvent *event,
/* Apply any window filters. */
if (GDK_IS_WINDOW (window))
{
- GdkWindowObject *filter_private = (GdkWindowObject *) window;
GdkFilterReturn result;
- if (filter_private->filters)
+ if (window->filters)
{
g_object_ref (window);
- result = gdk_event_apply_filters (nsevent, event, &filter_private->filters);
+ result = gdk_event_apply_filters (nsevent, event, &window->filters);
g_object_unref (window);
@@ -1248,8 +1225,7 @@ gdk_event_translate (GdkEvent *event,
event_type == NSOtherMouseDown ||
event_type == NSLeftMouseDown))
{
- GdkWindowObject *private = (GdkWindowObject *)window;
- GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
if (![NSApp isActive])
{
diff --git a/gdk/quartz/gdkgeometry-quartz.c b/gdk/quartz/gdkgeometry-quartz.c
index bd602e33df..8434151405 100644
--- a/gdk/quartz/gdkgeometry-quartz.c
+++ b/gdk/quartz/gdkgeometry-quartz.c
@@ -29,8 +29,7 @@ _gdk_quartz_window_translate (GdkWindow *window,
gint dy)
{
cairo_region_t *invalidate, *scrolled;
- GdkWindowObject *private = (GdkWindowObject *)window;
- GdkWindowImplQuartz *impl = (GdkWindowImplQuartz *)private->impl;
+ GdkWindowImplQuartz *impl = (GdkWindowImplQuartz *)window->impl;
GdkRectangle extents;
cairo_region_get_extents (area, &extents);
diff --git a/gdk/quartz/gdkinput.c b/gdk/quartz/gdkinput.c
index 31d1bd2c18..3677d8a4c3 100644
--- a/gdk/quartz/gdkinput.c
+++ b/gdk/quartz/gdkinput.c
@@ -65,7 +65,7 @@ _gdk_input_select_device_events (GdkWindow *impl_window,
GdkDevice *device)
{
guint event_mask;
- GdkWindowObject *w;
+ GdkWindow *w;
GdkInputWindow *iw;
GdkInputMode mode;
gboolean has_cursor;
@@ -73,7 +73,7 @@ _gdk_input_select_device_events (GdkWindow *impl_window,
GList *l;
event_mask = 0;
- iw = ((GdkWindowObject *)impl_window)->input_window;
+ iw = impl_window->input_window;
g_object_get (device,
"type", &type,
@@ -140,16 +140,14 @@ gdk_input_set_extension_events (GdkWindow *window,
gint mask,
GdkExtensionMode mode)
{
- GdkWindowObject *window_private;
- GdkWindowObject *impl_window;
GList *tmp_list;
GdkInputWindow *iw;
+ GdkWindow *impl_window;
g_return_if_fail (window != NULL);
g_return_if_fail (GDK_WINDOW_IS_QUARTZ (window));
- window_private = (GdkWindowObject*) window;
- impl_window = (GdkWindowObject *)_gdk_window_get_impl_window (window);
+ impl_window = (GdkWindow *)_gdk_window_get_impl_window (window);
if (mode == GDK_EXTENSION_EVENTS_NONE)
mask = 0;
@@ -166,7 +164,7 @@ gdk_input_set_extension_events (GdkWindow *window,
iw->grabbed = FALSE;
_gdk_input_windows = g_list_append (_gdk_input_windows, iw);
- window_private->extension_events = mask;
+ window->extension_events = mask;
/* Add enter window events to the event mask */
/* FIXME, this is not needed for XINPUT_NONE */
@@ -183,7 +181,7 @@ gdk_input_set_extension_events (GdkWindow *window,
g_free (iw);
}
- window_private->extension_events = 0;
+ window->extension_events = 0;
}
for (tmp_list = _gdk_input_devices; tmp_list; tmp_list = tmp_list->next)
diff --git a/gdk/quartz/gdkprivate-quartz.h b/gdk/quartz/gdkprivate-quartz.h
index ca9eae30b1..9a70054746 100644
--- a/gdk/quartz/gdkprivate-quartz.h
+++ b/gdk/quartz/gdkprivate-quartz.h
@@ -62,7 +62,7 @@ extern GdkWindow *_gdk_root;
extern GdkDragContext *_gdk_quartz_drag_source_context;
-#define GDK_WINDOW_IS_QUARTZ(win) (GDK_IS_WINDOW_IMPL_QUARTZ (((GdkWindowObject *)win)->impl))
+#define GDK_WINDOW_IS_QUARTZ(win) (GDK_IS_WINDOW_IMPL_QUARTZ (((GdkWindow *)win)->impl))
/* Initialization */
void _gdk_windowing_update_window_sizes (GdkScreen *screen);
@@ -130,10 +130,6 @@ void _gdk_quartz_event_loop_release_event (NSEvent *event);
GdkEventType _gdk_quartz_keys_event_type (NSEvent *event);
gboolean _gdk_quartz_keys_is_modifier (guint keycode);
-/* Drawable */
-void _gdk_quartz_drawable_finish (GdkDrawable *drawable);
-void _gdk_quartz_drawable_flush (GdkDrawable *drawable);
-
/* Geometry */
void _gdk_quartz_window_scroll (GdkWindow *window,
gint dx,
diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c
index a27163ca4b..c912e26b4d 100644
--- a/gdk/quartz/gdkwindow-quartz.c
+++ b/gdk/quartz/gdkwindow-quartz.c
@@ -29,6 +29,9 @@
#include "gdkscreen-quartz.h"
#include "gdkinputprivate.h"
+#include <sys/time.h>
+#include <cairo-quartz.h>
+
static gpointer parent_class;
static gpointer root_window_parent_class;
@@ -37,6 +40,8 @@ static gboolean in_process_all_updates = FALSE;
static GSList *main_window_stack;
+void _gdk_quartz_window_flush (GdkWindowImplQuartz *window_impl);
+
#define FULLSCREEN_DATA "fullscreen-data"
typedef struct
@@ -57,39 +62,31 @@ static FullscreenSavedGeometry *get_fullscreen_geometry (GdkWindow *window);
GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN && \
GDK_WINDOW_TYPE (window) != GDK_WINDOW_OFFSCREEN)
-static void gdk_window_impl_iface_init (GdkWindowImplIface *iface);
-
NSView *
gdk_quartz_window_get_nsview (GdkWindow *window)
{
- GdkWindowObject *private = (GdkWindowObject *)window;
-
if (GDK_WINDOW_DESTROYED (window))
return NULL;
- return ((GdkWindowImplQuartz *)private->impl)->view;
+ return ((GdkWindowImplQuartz *)window->impl)->view;
}
NSWindow *
gdk_quartz_window_get_nswindow (GdkWindow *window)
{
- GdkWindowObject *private = (GdkWindowObject *)window;
-
if (GDK_WINDOW_DESTROYED (window))
return NULL;
- return ((GdkWindowImplQuartz *)private->impl)->toplevel;
+ return ((GdkWindowImplQuartz *)window->impl)->toplevel;
}
static CGContextRef
-gdk_window_impl_quartz_get_context (GdkDrawable *drawable,
- gboolean antialias)
+gdk_window_impl_quartz_get_context (GdkWindowImplQuartz *window_impl,
+ gboolean antialias)
{
- GdkDrawableImplQuartz *drawable_impl = GDK_DRAWABLE_IMPL_QUARTZ (drawable);
- GdkWindowImplQuartz *window_impl = GDK_WINDOW_IMPL_QUARTZ (drawable);
CGContextRef cg_context;
- if (GDK_WINDOW_DESTROYED (drawable_impl->wrapper))
+ if (GDK_WINDOW_DESTROYED (window_impl->wrapper))
return NULL;
/* Lock focus when not called as part of a drawRect call. This
@@ -143,18 +140,16 @@ gdk_window_impl_quartz_get_context (GdkDrawable *drawable,
}
static void
-gdk_window_impl_quartz_release_context (GdkDrawable *drawable,
- CGContextRef cg_context)
+gdk_window_impl_quartz_release_context (GdkWindowImplQuartz *window_impl,
+ CGContextRef cg_context)
{
- GdkWindowImplQuartz *window_impl = GDK_WINDOW_IMPL_QUARTZ (drawable);
-
CGContextRestoreGState (cg_context);
CGContextSetAllowsAntialiasing (cg_context, TRUE);
- /* See comment in gdk_quartz_drawable_get_context(). */
+ /* See comment in gdk_quartz_window_get_context(). */
if (window_impl->in_paint_rect_count == 0)
{
- _gdk_quartz_drawable_flush (drawable);
+ _gdk_quartz_window_flush (window_impl);
[window_impl->view unlockFocus];
}
}
@@ -210,7 +205,7 @@ gdk_window_impl_quartz_finalize (GObject *object)
{
GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (object);
- check_grab_destroy (GDK_DRAWABLE_IMPL_QUARTZ (object)->wrapper);
+ check_grab_destroy (GDK_WINDOW_IMPL_QUARTZ (object)->wrapper);
if (impl->paint_clip_region)
cairo_region_destroy (impl->paint_clip_region);
@@ -221,18 +216,114 @@ gdk_window_impl_quartz_finalize (GObject *object)
G_OBJECT_CLASS (parent_class)->finalize (object);
}
+/* Help preventing "beam sync penalty" where CG makes all graphics code
+ * block until the next vsync if we try to flush (including call display on
+ * a view) too often. We do this by limiting the manual flushing done
+ * outside of expose calls to less than some frequency when measured over
+ * the last 4 flushes. This is a bit arbitray, but seems to make it possible
+ * for some quick manual flushes (such as gtkruler or gimp's marching ants)
+ * without hitting the max flush frequency.
+ *
+ * If drawable NULL, no flushing is done, only registering that a flush was
+ * done externally.
+ */
+void
+_gdk_quartz_window_flush (GdkWindowImplQuartz *window_impl)
+{
+ static struct timeval prev_tv;
+ static gint intervals[4];
+ static gint index;
+ struct timeval tv;
+ gint ms;
+
+ gettimeofday (&tv, NULL);
+ ms = (tv.tv_sec - prev_tv.tv_sec) * 1000 + (tv.tv_usec - prev_tv.tv_usec) / 1000;
+ intervals[index++ % 4] = ms;
+
+ if (window_impl)
+ {
+ ms = intervals[0] + intervals[1] + intervals[2] + intervals[3];
+
+ /* ~25Hz on average. */
+ if (ms > 4*40)
+ {
+ if (window_impl)
+ [window_impl->toplevel flushWindow];
+
+ prev_tv = tv;
+ }
+ }
+ else
+ prev_tv = tv;
+}
+
+static cairo_user_data_key_t gdk_quartz_cairo_key;
+
+typedef struct {
+ GdkWindowImplQuartz *window_impl;
+ CGContextRef cg_context;
+} GdkQuartzCairoSurfaceData;
+
static void
-gdk_window_impl_quartz_class_init (GdkWindowImplQuartzClass *klass)
+gdk_quartz_cairo_surface_destroy (void *data)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
- GdkDrawableImplQuartzClass *drawable_quartz_class = GDK_DRAWABLE_IMPL_QUARTZ_CLASS (klass);
+ GdkQuartzCairoSurfaceData *surface_data = data;
- parent_class = g_type_class_peek_parent (klass);
+ surface_data->window_impl->cairo_surface = NULL;
- object_class->finalize = gdk_window_impl_quartz_finalize;
+ gdk_quartz_window_release_context (surface_data->window_impl,
+ surface_data->cg_context);
- drawable_quartz_class->get_context = gdk_window_impl_quartz_get_context;
- drawable_quartz_class->release_context = gdk_window_impl_quartz_release_context;
+ g_free (surface_data);
+}
+
+static cairo_surface_t *
+gdk_quartz_create_cairo_surface (GdkWindowImplQuartz *impl,
+ int width,
+ int height)
+{
+ CGContextRef cg_context;
+ GdkQuartzCairoSurfaceData *surface_data;
+ cairo_surface_t *surface;
+
+ cg_context = gdk_quartz_window_get_context (impl, TRUE);
+
+ if (!cg_context)
+ return NULL;
+
+ surface_data = g_new (GdkQuartzCairoSurfaceData, 1);
+ surface_data->window_impl = impl;
+ surface_data->cg_context = cg_context;
+
+ surface = cairo_quartz_surface_create_for_cg_context (cg_context,
+ width, height);
+
+ cairo_surface_set_user_data (surface, &gdk_quartz_cairo_key,
+ surface_data,
+ gdk_quartz_cairo_surface_destroy);
+
+ return surface;
+}
+
+static cairo_surface_t *
+gdk_quartz_ref_cairo_surface (GdkWindow *window)
+{
+ GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
+
+ if (GDK_WINDOW_DESTROYED (window))
+ return NULL;
+
+ if (!impl->cairo_surface)
+ {
+ impl->cairo_surface =
+ gdk_quartz_create_cairo_surface (impl,
+ gdk_window_get_width (impl->wrapper),
+ gdk_window_get_height (impl->wrapper));
+ }
+ else
+ cairo_surface_reference (impl->cairo_surface);
+
+ return impl->cairo_surface;
}
static void
@@ -247,16 +338,15 @@ gdk_window_impl_quartz_begin_paint_region (GdkPaintable *paintable,
const cairo_region_t *region)
{
GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (paintable);
- GdkWindowObject *private = (GdkWindowObject*) window;
cairo_region_t *clipped_and_offset_region;
cairo_t *cr;
clipped_and_offset_region = cairo_region_copy (region);
cairo_region_intersect (clipped_and_offset_region,
- private->clip_region_with_children);
+ window->clip_region_with_children);
cairo_region_translate (clipped_and_offset_region,
- private->abs_x, private->abs_y);
+ window->abs_x, window->abs_y);
if (impl->begin_paint_count == 0)
impl->paint_clip_region = cairo_region_reference (clipped_and_offset_region);
@@ -270,19 +360,19 @@ gdk_window_impl_quartz_begin_paint_region (GdkPaintable *paintable,
cr = gdk_cairo_create (window);
- cairo_translate (cr, -private->abs_x, -private->abs_y);
+ cairo_translate (cr, -window->abs_x, -window->abs_y);
gdk_cairo_region (cr, clipped_and_offset_region);
cairo_clip (cr);
- while (private->background == NULL && private->parent)
+ while (window->background == NULL && window->parent)
{
- cairo_translate (cr, -private->x, private->y);
- private = private->parent;
+ cairo_translate (cr, -window->x, window->y);
+ window = window->parent;
}
- if (private->background)
- cairo_set_source (cr, private->background);
+ if (window->background)
+ cairo_set_source (cr, window->background);
else
cairo_set_source_rgba (cr, 0, 0, 0, 0);
@@ -313,12 +403,10 @@ void
_gdk_quartz_window_set_needs_display_in_region (GdkWindow *window,
cairo_region_t *region)
{
- GdkWindowObject *private;
GdkWindowImplQuartz *impl;
int i, n_rects;
- private = GDK_WINDOW_OBJECT (window);
- impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
if (!impl->needs_display_region)
impl->needs_display_region = cairo_region_create ();
@@ -349,12 +437,10 @@ _gdk_windowing_window_process_updates_recurse (GdkWindow *window,
toplevel = gdk_window_get_effective_toplevel (window);
if (toplevel && WINDOW_IS_TOPLEVEL (toplevel))
{
- GdkWindowObject *toplevel_private;
GdkWindowImplQuartz *toplevel_impl;
NSWindow *nswindow;
- toplevel_private = (GdkWindowObject *)toplevel;
- toplevel_impl = (GdkWindowImplQuartz *)toplevel_private->impl;
+ toplevel_impl = (GdkWindowImplQuartz *)toplevel->impl;
nswindow = toplevel_impl->toplevel;
/* In theory, we could skip the flush disabling, since we only
@@ -402,7 +488,7 @@ _gdk_windowing_after_process_all_updates (void)
[[nswindow contentView] displayIfNeeded];
- _gdk_quartz_drawable_flush (NULL);
+ _gdk_quartz_window_flush (NULL);
[nswindow enableFlushWindow];
[nswindow flushWindow];
@@ -425,54 +511,6 @@ gdk_window_impl_quartz_paintable_init (GdkPaintableIface *iface)
iface->end_paint = gdk_window_impl_quartz_end_paint;
}
-GType
-_gdk_window_impl_quartz_get_type (void)
-{
- static GType object_type = 0;
-
- if (!object_type)
- {
- const GTypeInfo object_info =
- {
- sizeof (GdkWindowImplQuartzClass),
- (GBaseInitFunc) NULL,
- (GBaseFinalizeFunc) NULL,
- (GClassInitFunc) gdk_window_impl_quartz_class_init,
- NULL, /* class_finalize */
- NULL, /* class_data */
- sizeof (GdkWindowImplQuartz),
- 0, /* n_preallocs */
- (GInstanceInitFunc) gdk_window_impl_quartz_init,
- };
-
- const GInterfaceInfo paintable_info =
- {
- (GInterfaceInitFunc) gdk_window_impl_quartz_paintable_init,
- NULL,
- NULL
- };
-
- const GInterfaceInfo window_impl_info =
- {
- (GInterfaceInitFunc) gdk_window_impl_iface_init,
- NULL,
- NULL
- };
-
- object_type = g_type_register_static (GDK_TYPE_DRAWABLE_IMPL_QUARTZ,
- "GdkWindowImplQuartz",
- &object_info, 0);
- g_type_add_interface_static (object_type,
- GDK_TYPE_PAINTABLE,
- &paintable_info);
- g_type_add_interface_static (object_type,
- GDK_TYPE_WINDOW_IMPL,
- &window_impl_info);
- }
-
- return object_type;
-}
-
static const gchar *
get_default_title (void)
{
@@ -493,15 +531,12 @@ get_ancestor_coordinates_from_child (GdkWindow *child_window,
gint *ancestor_x,
gint *ancestor_y)
{
- GdkWindowObject *child_private = GDK_WINDOW_OBJECT (child_window);
- GdkWindowObject *ancestor_private = GDK_WINDOW_OBJECT (ancestor_window);
-
- while (child_private != ancestor_private)
+ while (child_window != ancestor_window)
{
- child_x += child_private->x;
- child_y += child_private->y;
+ child_x += child_window->x;
+ child_y += child_window->y;
- child_private = child_private->parent;
+ child_window = child_window->parent;
}
*ancestor_x = child_x;
@@ -511,7 +546,6 @@ get_ancestor_coordinates_from_child (GdkWindow *child_window,
void
_gdk_quartz_window_debug_highlight (GdkWindow *window, gint number)
{
- GdkWindowObject *private = GDK_WINDOW_OBJECT (window);
gint x, y;
gint gx, gy;
GdkWindow *toplevel;
@@ -542,10 +576,10 @@ _gdk_quartz_window_debug_highlight (GdkWindow *window, gint number)
x += tx;
y += ty;
- _gdk_quartz_window_gdk_xy_to_xy (x, y + private->height,
+ _gdk_quartz_window_gdk_xy_to_xy (x, y + window->height,
&gx, &gy);
- rect = NSMakeRect (gx, gy, private->width, private->height);
+ rect = NSMakeRect (gx, gy, window->width, window->height);
if (debug_window[number] && NSEqualRects (rect, old_rect[number]))
return;
@@ -659,22 +693,22 @@ find_child_window_helper (GdkWindow *window,
GdkWindowImplQuartz *impl;
GList *l;
- impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (window)->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
if (window == _gdk_root)
update_toplevel_order ();
for (l = impl->sorted_children; l; l = l->next)
{
- GdkWindowObject *child_private = l->data;
- GdkWindowImplQuartz *child_impl = GDK_WINDOW_IMPL_QUARTZ (child_private->impl);
+ GdkWindow *child = l->data;
+ GdkWindowImplQuartz *child_impl = GDK_WINDOW_IMPL_QUARTZ (child->impl);
int temp_x, temp_y;
- if (!GDK_WINDOW_IS_MAPPED (child_private))
+ if (!GDK_WINDOW_IS_MAPPED (child))
continue;
- temp_x = x_offset + child_private->x;
- temp_y = y_offset + child_private->y;
+ temp_x = x_offset + child->x;
+ temp_y = y_offset + child->y;
/* Special-case the root window. We have to include the title
* bar in the checks, otherwise the window below the title bar
@@ -698,7 +732,7 @@ find_child_window_helper (GdkWindow *window,
if (titlebar_height > 0 &&
x >= temp_x && y >= temp_y - titlebar_height &&
- x < temp_x + child_private->width && y < temp_y)
+ x < temp_x + child->width && y < temp_y)
{
/* The root means "unknown" i.e. a window not managed by
* GDK.
@@ -709,7 +743,7 @@ find_child_window_helper (GdkWindow *window,
if ((!get_toplevel || (get_toplevel && window == _gdk_root)) &&
x >= temp_x && y >= temp_y &&
- x < temp_x + child_private->width && y < temp_y + child_private->height)
+ x < temp_x + child->width && y < temp_y + child->height)
{
/* Look for child windows. */
return find_child_window_helper (l->data,
@@ -732,9 +766,7 @@ _gdk_quartz_window_find_child (GdkWindow *window,
gint y,
gboolean get_toplevel)
{
- GdkWindowObject *private = GDK_WINDOW_OBJECT (window);
-
- if (x >= 0 && y >= 0 && x < private->width && y < private->height)
+ if (x >= 0 && y >= 0 && x < window->width && y < window->height)
return find_child_window_helper (window, x, y, 0, 0, get_toplevel);
return NULL;
@@ -746,7 +778,7 @@ _gdk_quartz_window_did_become_main (GdkWindow *window)
{
main_window_stack = g_slist_remove (main_window_stack, window);
- if (GDK_WINDOW_OBJECT (window)->window_type != GDK_WINDOW_TEMP)
+ if (window->window_type != GDK_WINDOW_TEMP)
main_window_stack = g_slist_prepend (main_window_stack, window);
clear_toplevel_order ();
@@ -774,8 +806,7 @@ _gdk_quartz_window_did_resign_main (GdkWindow *window)
GDK_WINDOW_IS_MAPPED (new_window) &&
WINDOW_IS_TOPLEVEL (new_window))
{
- GdkWindowObject *private = (GdkWindowObject *) new_window;
- GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (new_window->impl);
[impl->toplevel makeKeyAndOrderFront:impl->toplevel];
}
@@ -819,35 +850,30 @@ _gdk_window_impl_new (GdkWindow *window,
GdkWindowAttr *attributes,
gint attributes_mask)
{
- GdkWindowObject *private;
GdkWindowImplQuartz *impl;
- GdkDrawableImplQuartz *draw_impl;
GdkWindowImplQuartz *parent_impl;
GDK_QUARTZ_ALLOC_POOL;
- private = (GdkWindowObject *)window;
-
impl = g_object_new (GDK_TYPE_WINDOW_IMPL_QUARTZ, NULL);
- private->impl = (GdkDrawable *)impl;
- draw_impl = GDK_DRAWABLE_IMPL_QUARTZ (impl);
- draw_impl->wrapper = GDK_DRAWABLE (window);
+ window->impl = GDK_WINDOW_IMPL (impl);
+ impl->wrapper = window;
- parent_impl = GDK_WINDOW_IMPL_QUARTZ (private->parent->impl);
+ parent_impl = GDK_WINDOW_IMPL_QUARTZ (window->parent->impl);
- switch (private->window_type)
+ switch (window->window_type)
{
case GDK_WINDOW_TOPLEVEL:
case GDK_WINDOW_TEMP:
- if (GDK_WINDOW_TYPE (private->parent) != GDK_WINDOW_ROOT)
+ if (GDK_WINDOW_TYPE (window->parent) != GDK_WINDOW_ROOT)
{
/* The common code warns for this case */
- parent_impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (_gdk_root)->impl);
+ parent_impl = GDK_WINDOW_IMPL_QUARTZ (_gdk_root->impl);
}
}
/* Maintain the z-ordered list of children. */
- if (private->parent != (GdkWindowObject *)_gdk_root)
+ if (window->parent != _gdk_root)
parent_impl->sorted_children = g_list_prepend (parent_impl->sorted_children, window);
else
clear_toplevel_order ();
@@ -875,16 +901,16 @@ _gdk_window_impl_new (GdkWindow *window,
* to find the screen the window will be on and correct the
* content_rect coordinates to be relative to that screen.
*/
- _gdk_quartz_window_gdk_xy_to_xy (private->x, private->y, &nx, &ny);
+ _gdk_quartz_window_gdk_xy_to_xy (window->x, window->y, &nx, &ny);
screen = get_nsscreen_for_point (nx, ny);
screen_rect = [screen frame];
nx -= screen_rect.origin.x;
ny -= screen_rect.origin.y;
- content_rect = NSMakeRect (nx, ny - private->height,
- private->width,
- private->height);
+ content_rect = NSMakeRect (nx, ny - window->height,
+ window->width,
+ window->height);
if (attributes->window_type == GDK_WINDOW_TEMP ||
attributes->type_hint == GDK_WINDOW_TYPE_HINT_SPLASHSCREEN)
@@ -930,14 +956,14 @@ _gdk_window_impl_new (GdkWindow *window,
case GDK_WINDOW_CHILD:
{
- GdkWindowImplQuartz *parent_impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (private->parent)->impl);
+ GdkWindowImplQuartz *parent_impl = GDK_WINDOW_IMPL_QUARTZ (window->parent->impl);
- if (!private->input_only)
+ if (!window->input_only)
{
- NSRect frame_rect = NSMakeRect (private->x + private->parent->abs_x,
- private->y + private->parent->abs_y,
- private->width,
- private->height);
+ NSRect frame_rect = NSMakeRect (window->x + window->parent->abs_x,
+ window->y + window->parent->abs_y,
+ window->width,
+ window->height);
impl->view = [[GdkQuartzView alloc] initWithFrame:frame_rect];
@@ -966,8 +992,7 @@ _gdk_quartz_window_update_position (GdkWindow *window)
{
NSRect frame_rect;
NSRect content_rect;
- GdkWindowObject *private = (GdkWindowObject *)window;
- GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
GDK_QUARTZ_ALLOC_POOL;
@@ -976,7 +1001,7 @@ _gdk_quartz_window_update_position (GdkWindow *window)
_gdk_quartz_window_xy_to_gdk_xy (content_rect.origin.x,
content_rect.origin.y + content_rect.size.height,
- &private->x, &private->y);
+ &window->x, &window->y);
GDK_QUARTZ_RELEASE_POOL;
@@ -986,7 +1011,6 @@ void
_gdk_windowing_update_window_sizes (GdkScreen *screen)
{
GList *windows, *list;
- GdkWindowObject *private = (GdkWindowObject *)_gdk_root;
/* The size of the root window is so that it can contain all
* monitors attached to this machine. The monitors are laid out
@@ -995,12 +1019,12 @@ _gdk_windowing_update_window_sizes (GdkScreen *screen)
*
* This data is updated when the monitor configuration is changed.
*/
- private->x = 0;
- private->y = 0;
- private->abs_x = 0;
- private->abs_y = 0;
- private->width = gdk_screen_get_width (screen);
- private->height = gdk_screen_get_height (screen);
+ _gdk_root->x = 0;
+ _gdk_root->y = 0;
+ _gdk_root->abs_x = 0;
+ _gdk_root->abs_y = 0;
+ _gdk_root->width = gdk_screen_get_width (screen);
+ _gdk_root->height = gdk_screen_get_height (screen);
windows = gdk_screen_get_toplevel_windows (screen);
@@ -1013,31 +1037,26 @@ _gdk_windowing_update_window_sizes (GdkScreen *screen)
void
_gdk_windowing_window_init (void)
{
- GdkWindowObject *private;
GdkWindowImplQuartz *impl;
- GdkDrawableImplQuartz *drawable_impl;
g_assert (_gdk_root == NULL);
_gdk_root = g_object_new (GDK_TYPE_WINDOW, NULL);
- private = (GdkWindowObject *)_gdk_root;
- private->impl = g_object_new (_gdk_root_window_impl_quartz_get_type (), NULL);
- private->impl_window = private;
- private->visual = gdk_screen_get_system_visual (_gdk_screen);
+ _gdk_root->impl = g_object_new (_gdk_root_window_impl_quartz_get_type (), NULL);
+ _gdk_root->impl_window = _gdk_root;
+ _gdk_root->visual = gdk_screen_get_system_visual (_gdk_screen);
- impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (_gdk_root)->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (_gdk_root->impl);
_gdk_windowing_update_window_sizes (_gdk_screen);
- private->state = 0; /* We don't want GDK_WINDOW_STATE_WITHDRAWN here */
- private->window_type = GDK_WINDOW_ROOT;
- private->depth = 24;
- private->viewable = TRUE;
+ _gdk_root->state = 0; /* We don't want GDK_WINDOW_STATE_WITHDRAWN here */
+ _gdk_root->window_type = GDK_WINDOW_ROOT;
+ _gdk_root->depth = 24;
+ _gdk_root->viewable = TRUE;
- drawable_impl = GDK_DRAWABLE_IMPL_QUARTZ (private->impl);
-
- drawable_impl->wrapper = GDK_DRAWABLE (private);
+ impl->wrapper = _gdk_root;
}
static void
@@ -1045,19 +1064,17 @@ _gdk_quartz_window_destroy (GdkWindow *window,
gboolean recursing,
gboolean foreign_destroy)
{
- GdkWindowObject *private;
GdkWindowImplQuartz *impl;
- GdkWindowObject *parent;
+ GdkWindow *parent;
- private = GDK_WINDOW_OBJECT (window);
- impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
main_window_stack = g_slist_remove (main_window_stack, window);
g_list_free (impl->sorted_children);
impl->sorted_children = NULL;
- parent = private->parent;
+ parent = window->parent;
if (parent)
{
GdkWindowImplQuartz *parent_impl = GDK_WINDOW_IMPL_QUARTZ (parent->impl);
@@ -1065,7 +1082,13 @@ _gdk_quartz_window_destroy (GdkWindow *window,
parent_impl->sorted_children = g_list_remove (parent_impl->sorted_children, window);
}
- _gdk_quartz_drawable_finish (GDK_DRAWABLE (impl));
+ if (impl->cairo_surface)
+ {
+ cairo_surface_finish (impl->cairo_surface);
+ cairo_surface_set_user_data (impl->cairo_surface, &gdk_quartz_cairo_key,
+ NULL, NULL);
+ impl->cairo_surface = NULL;
+ }
if (!recursing && !foreign_destroy)
{
@@ -1104,14 +1127,13 @@ _gdk_windowing_window_destroy_foreign (GdkWindow *window)
static void
gdk_window_quartz_show (GdkWindow *window, gboolean already_mapped)
{
- GdkWindowObject *private = (GdkWindowObject *)window;
- GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
gboolean focus_on_map;
GDK_QUARTZ_ALLOC_POOL;
if (!GDK_WINDOW_IS_MAPPED (window))
- focus_on_map = private->focus_on_map;
+ focus_on_map = window->focus_on_map;
else
focus_on_map = TRUE;
@@ -1119,8 +1141,8 @@ gdk_window_quartz_show (GdkWindow *window, gboolean already_mapped)
{
gboolean make_key;
- make_key = (private->accept_focus && focus_on_map &&
- private->window_type != GDK_WINDOW_TEMP);
+ make_key = (window->accept_focus && focus_on_map &&
+ window->window_type != GDK_WINDOW_TEMP);
[(GdkQuartzWindow*)impl->toplevel showAndMakeKey:make_key];
clear_toplevel_order ();
@@ -1136,10 +1158,10 @@ gdk_window_quartz_show (GdkWindow *window, gboolean already_mapped)
gdk_synthesize_window_state (window, GDK_WINDOW_STATE_WITHDRAWN, 0);
- if (private->state & GDK_WINDOW_STATE_MAXIMIZED)
+ if (window->state & GDK_WINDOW_STATE_MAXIMIZED)
gdk_window_maximize (window);
- if (private->state & GDK_WINDOW_STATE_ICONIFIED)
+ if (window->state & GDK_WINDOW_STATE_ICONIFIED)
gdk_window_iconify (window);
if (impl->transient_for && !GDK_WINDOW_DESTROYED (impl->transient_for))
@@ -1158,7 +1180,7 @@ _gdk_quartz_window_detach_from_parent (GdkWindow *window)
g_return_if_fail (GDK_IS_WINDOW (window));
- impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (window)->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
g_return_if_fail (impl->toplevel != NULL);
@@ -1166,7 +1188,7 @@ _gdk_quartz_window_detach_from_parent (GdkWindow *window)
{
GdkWindowImplQuartz *parent_impl;
- parent_impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (impl->transient_for)->impl);
+ parent_impl = GDK_WINDOW_IMPL_QUARTZ (impl->transient_for->impl);
[parent_impl->toplevel removeChildWindow:impl->toplevel];
clear_toplevel_order ();
}
@@ -1180,7 +1202,7 @@ _gdk_quartz_window_attach_to_parent (GdkWindow *window)
g_return_if_fail (GDK_IS_WINDOW (window));
- impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (window)->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
g_return_if_fail (impl->toplevel != NULL);
@@ -1188,7 +1210,7 @@ _gdk_quartz_window_attach_to_parent (GdkWindow *window)
{
GdkWindowImplQuartz *parent_impl;
- parent_impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (impl->transient_for)->impl);
+ parent_impl = GDK_WINDOW_IMPL_QUARTZ (impl->transient_for->impl);
[parent_impl->toplevel addChildWindow:impl->toplevel ordered:NSWindowAbove];
clear_toplevel_order ();
}
@@ -1197,7 +1219,6 @@ _gdk_quartz_window_attach_to_parent (GdkWindow *window)
void
gdk_window_quartz_hide (GdkWindow *window)
{
- GdkWindowObject *private = (GdkWindowObject *)window;
GdkWindowImplQuartz *impl;
/* Make sure we're not stuck in fullscreen mode. */
@@ -1208,7 +1229,7 @@ gdk_window_quartz_hide (GdkWindow *window)
_gdk_window_clear_update_area (window);
- impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
if (WINDOW_IS_TOPLEVEL (window))
{
@@ -1241,7 +1262,6 @@ move_resize_window_internal (GdkWindow *window,
gint width,
gint height)
{
- GdkWindowObject *private = (GdkWindowObject *)window;
GdkWindowImplQuartz *impl;
GdkRectangle old_visible;
GdkRectangle new_visible;
@@ -1253,12 +1273,12 @@ move_resize_window_internal (GdkWindow *window,
if (GDK_WINDOW_DESTROYED (window))
return;
- impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
- if ((x == -1 || (x == private->x)) &&
- (y == -1 || (y == private->y)) &&
- (width == -1 || (width == private->width)) &&
- (height == -1 || (height == private->height)))
+ if ((x == -1 || (x == window->x)) &&
+ (y == -1 || (y == window->y)) &&
+ (width == -1 || (width == window->width)) &&
+ (height == -1 || (height == window->height)))
{
return;
}
@@ -1268,17 +1288,17 @@ move_resize_window_internal (GdkWindow *window,
/* The previously visible area of this window in a coordinate
* system rooted at the origin of this window.
*/
- old_visible.x = -private->x;
- old_visible.y = -private->y;
+ old_visible.x = -window->x;
+ old_visible.y = -window->y;
- old_visible.width = private->width;
- old_visible.height = private->height;
+ old_visible.width = window->width;
+ old_visible.height = window->height;
}
if (x != -1)
{
- delta.width = x - private->x;
- private->x = x;
+ delta.width = x - window->x;
+ window->x = x;
}
else
{
@@ -1287,8 +1307,8 @@ move_resize_window_internal (GdkWindow *window,
if (y != -1)
{
- delta.height = y - private->y;
- private->y = y;
+ delta.height = y - window->y;
+ window->y = y;
}
else
{
@@ -1296,10 +1316,10 @@ move_resize_window_internal (GdkWindow *window,
}
if (width != -1)
- private->width = width;
+ window->width = width;
if (height != -1)
- private->height = height;
+ window->height = height;
GDK_QUARTZ_ALLOC_POOL;
@@ -1309,27 +1329,27 @@ move_resize_window_internal (GdkWindow *window,
NSRect frame_rect;
gint gx, gy;
- _gdk_quartz_window_gdk_xy_to_xy (private->x, private->y + private->height,
+ _gdk_quartz_window_gdk_xy_to_xy (window->x, window->y + window->height,
&gx, &gy);
- content_rect = NSMakeRect (gx, gy, private->width, private->height);
+ content_rect = NSMakeRect (gx, gy, window->width, window->height);
frame_rect = [impl->toplevel frameRectForContentRect:content_rect];
[impl->toplevel setFrame:frame_rect display:YES];
}
else
{
- if (!private->input_only)
+ if (!window->input_only)
{
NSRect nsrect;
- nsrect = NSMakeRect (private->x, private->y, private->width, private->height);
+ nsrect = NSMakeRect (window->x, window->y, window->width, window->height);
/* The newly visible area of this window in a coordinate
* system rooted at the origin of this window.
*/
- new_visible.x = -private->x;
- new_visible.y = -private->y;
+ new_visible.x = -window->x;
+ new_visible.y = -window->y;
new_visible.width = old_visible.width; /* parent has not changed size */
new_visible.height = old_visible.height; /* parent has not changed size */
@@ -1381,7 +1401,7 @@ window_quartz_move (GdkWindow *window,
{
g_return_if_fail (GDK_IS_WINDOW (window));
- if (((GdkWindowObject *)window)->state & GDK_WINDOW_STATE_FULLSCREEN)
+ if (window->state & GDK_WINDOW_STATE_FULLSCREEN)
return;
move_resize_window_internal (window, x, y, -1, -1);
@@ -1394,7 +1414,7 @@ window_quartz_resize (GdkWindow *window,
{
g_return_if_fail (GDK_IS_WINDOW (window));
- if (((GdkWindowObject *)window)->state & GDK_WINDOW_STATE_FULLSCREEN)
+ if (window->state & GDK_WINDOW_STATE_FULLSCREEN)
return;
if (width < 1)
@@ -1448,7 +1468,7 @@ gdk_window_quartz_reparent (GdkWindow *window,
gint x,
gint y)
{
- GdkWindowObject *private, *old_parent_private, *new_parent_private;
+ GdkWindow *old_parent;
GdkWindowImplQuartz *impl, *old_parent_impl, *new_parent_impl;
NSView *view, *new_parent_view;
@@ -1459,16 +1479,14 @@ gdk_window_quartz_reparent (GdkWindow *window,
return FALSE;
}
- private = GDK_WINDOW_OBJECT (window);
- impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
view = impl->view;
- new_parent_private = GDK_WINDOW_OBJECT (new_parent);
- new_parent_impl = GDK_WINDOW_IMPL_QUARTZ (new_parent_private->impl);
+ new_parent_impl = GDK_WINDOW_IMPL_QUARTZ (new_parent->impl);
new_parent_view = new_parent_impl->view;
- old_parent_private = GDK_WINDOW_OBJECT (private->parent);
- old_parent_impl = GDK_WINDOW_IMPL_QUARTZ (old_parent_private->impl);
+ old_parent = window->parent;
+ old_parent_impl = GDK_WINDOW_IMPL_QUARTZ (old_parent->impl);
[view retain];
@@ -1477,9 +1495,9 @@ gdk_window_quartz_reparent (GdkWindow *window,
[view release];
- private->parent = new_parent_private;
+ window->parent = new_parent;
- if (old_parent_private)
+ if (old_parent)
{
old_parent_impl->sorted_children = g_list_remove (old_parent_impl->sorted_children, window);
}
@@ -1496,14 +1514,12 @@ gdk_window_quartz_reparent (GdkWindow *window,
static void
update_toplevel_order (void)
{
- GdkWindowObject *root;
GdkWindowImplQuartz *root_impl;
NSEnumerator *enumerator;
id nswindow;
GList *toplevels = NULL;
- root = GDK_WINDOW_OBJECT (_gdk_root);
- root_impl = GDK_WINDOW_IMPL_QUARTZ (root->impl);
+ root_impl = GDK_WINDOW_IMPL_QUARTZ (_gdk_root->impl);
if (root_impl->sorted_children)
return;
@@ -1530,11 +1546,9 @@ update_toplevel_order (void)
static void
clear_toplevel_order (void)
{
- GdkWindowObject *root;
GdkWindowImplQuartz *root_impl;
- root = GDK_WINDOW_OBJECT (_gdk_root);
- root_impl = GDK_WINDOW_IMPL_QUARTZ (root->impl);
+ root_impl = GDK_WINDOW_IMPL_QUARTZ (_gdk_root->impl);
g_list_free (root_impl->sorted_children);
root_impl->sorted_children = NULL;
@@ -1550,14 +1564,14 @@ gdk_window_quartz_raise (GdkWindow *window)
{
GdkWindowImplQuartz *impl;
- impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (window)->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
[impl->toplevel orderFront:impl->toplevel];
clear_toplevel_order ();
}
else
{
- GdkWindowObject *parent = GDK_WINDOW_OBJECT (window)->parent;
+ GdkWindow *parent = window->parent;
if (parent)
{
@@ -1581,14 +1595,14 @@ gdk_window_quartz_lower (GdkWindow *window)
{
GdkWindowImplQuartz *impl;
- impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (window)->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
[impl->toplevel orderBack:impl->toplevel];
clear_toplevel_order ();
}
else
{
- GdkWindowObject *parent = GDK_WINDOW_OBJECT (window)->parent;
+ GdkWindow *parent = window->parent;
if (parent)
{
@@ -1648,14 +1662,12 @@ gdk_window_quartz_get_geometry (GdkWindow *window,
gint *height)
{
GdkWindowImplQuartz *impl;
- GdkWindowObject *private;
NSRect ns_rect;
if (GDK_WINDOW_DESTROYED (window))
return;
- impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (window)->impl);
- private = GDK_WINDOW_OBJECT (window);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
if (window == _gdk_root)
{
if (x)
@@ -1664,9 +1676,9 @@ gdk_window_quartz_get_geometry (GdkWindow *window,
*y = 0;
if (width)
- *width = private->width;
+ *width = window->width;
if (height)
- *height = private->height;
+ *height = window->height;
}
else if (WINDOW_IS_TOPLEVEL (window))
{
@@ -1721,7 +1733,6 @@ gdk_window_quartz_get_root_coords (GdkWindow *window,
gint *root_x,
gint *root_y)
{
- GdkWindowObject *private;
int tmp_x = 0, tmp_y = 0;
GdkWindow *toplevel;
NSRect content_rect;
@@ -1747,10 +1758,8 @@ gdk_window_quartz_get_root_coords (GdkWindow *window,
return 1;
}
- private = GDK_WINDOW_OBJECT (window);
-
toplevel = gdk_window_get_toplevel (window);
- impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (toplevel)->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (toplevel->impl);
content_rect = [impl->toplevel contentRectForFrameRect:[impl->toplevel frame]];
@@ -1761,15 +1770,15 @@ gdk_window_quartz_get_root_coords (GdkWindow *window,
tmp_x += x;
tmp_y += y;
- while (private != GDK_WINDOW_OBJECT (toplevel))
+ while (window != toplevel)
{
- if (_gdk_window_has_impl ((GdkWindow *)private))
+ if (_gdk_window_has_impl ((GdkWindow *)window))
{
- tmp_x += private->x;
- tmp_y += private->y;
+ tmp_x += window->x;
+ tmp_y += window->y;
}
- private = private->parent;
+ window = window->parent;
}
if (root_x)
@@ -1807,10 +1816,9 @@ gdk_window_quartz_get_device_state_helper (GdkWindow *window,
gint *y,
GdkModifierType *mask)
{
- GdkWindowObject *toplevel;
- GdkWindowObject *private;
NSPoint point;
gint x_tmp, y_tmp;
+ GdkWindow *toplevel;
GdkWindow *found_window;
g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL);
@@ -1823,7 +1831,7 @@ gdk_window_quartz_get_device_state_helper (GdkWindow *window,
return NULL;
}
- toplevel = GDK_WINDOW_OBJECT (gdk_window_get_toplevel (window));
+ toplevel = gdk_window_get_toplevel (window);
*mask = _gdk_quartz_events_get_current_event_mask ();
@@ -1839,13 +1847,12 @@ gdk_window_quartz_get_device_state_helper (GdkWindow *window,
NSWindow *nswindow;
impl = GDK_WINDOW_IMPL_QUARTZ (toplevel->impl);
- private = GDK_WINDOW_OBJECT (toplevel);
nswindow = impl->toplevel;
point = [nswindow mouseLocationOutsideOfEventStream];
x_tmp = point.x;
- y_tmp = private->height - point.y;
+ y_tmp = toplevel->height - point.y;
window = (GdkWindow *)toplevel;
}
@@ -1917,18 +1924,15 @@ _gdk_windowing_window_at_pointer (GdkDisplay *display,
&tmp_mask);
if (found_window)
{
- GdkWindowObject *private;
-
/* The coordinates returned above are relative the root, we want
* coordinates relative the window here.
*/
- private = GDK_WINDOW_OBJECT (found_window);
- while (private != GDK_WINDOW_OBJECT (_gdk_root))
+ while (found_window != _gdk_root)
{
- x -= private->x;
- y -= private->y;
+ x -= found_window->x;
+ y -= found_window->y;
- private = private->parent;
+ found_window = found_window->parent;
}
*win_x = x;
@@ -1946,21 +1950,19 @@ _gdk_windowing_window_at_pointer (GdkDisplay *display,
if (get_toplevel)
{
- GdkWindowObject *w = (GdkWindowObject *)found_window;
/* Requested toplevel, find it. */
/* TODO: This can be implemented more efficient by never
recursing into children in the first place */
- if (w)
+ if (found_window)
{
/* Convert to toplevel */
- while (w->parent != NULL &&
- w->parent->window_type != GDK_WINDOW_ROOT)
+ while (found_window->parent != NULL &&
+ found_window->parent->window_type != GDK_WINDOW_ROOT)
{
- *win_x += w->x;
- *win_y += w->y;
- w = w->parent;
+ *win_x += found_window->x;
+ *win_y += found_window->y;
+ found_window = found_window->parent;
}
- found_window = (GdkWindow *)w;
}
}
@@ -1988,7 +1990,7 @@ gdk_window_quartz_get_events (GdkWindow *window)
if (GDK_WINDOW_DESTROYED (window))
return 0;
else
- return GDK_WINDOW_OBJECT (window)->event_mask;
+ return window->event_mask;
}
static void
@@ -2022,7 +2024,7 @@ gdk_window_set_geometry_hints (GdkWindow *window,
!WINDOW_IS_TOPLEVEL (window))
return;
- impl = GDK_WINDOW_IMPL_QUARTZ (((GdkWindowObject *) window)->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
if (!impl->toplevel)
return;
@@ -2099,7 +2101,7 @@ gdk_window_set_title (GdkWindow *window,
!WINDOW_IS_TOPLEVEL (window))
return;
- impl = GDK_WINDOW_IMPL_QUARTZ (((GdkWindowObject *)window)->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
if (impl->toplevel)
{
@@ -2131,7 +2133,7 @@ gdk_window_set_transient_for (GdkWindow *window,
!WINDOW_IS_TOPLEVEL (window))
return;
- window_impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (window)->impl);
+ window_impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
if (!window_impl->toplevel)
return;
@@ -2145,7 +2147,7 @@ gdk_window_set_transient_for (GdkWindow *window,
window_impl->transient_for = NULL;
}
- parent_impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (parent)->impl);
+ parent_impl = GDK_WINDOW_IMPL_QUARTZ (parent->impl);
if (parent_impl->toplevel)
{
/* We save the parent because it needs to be unset/reset when
@@ -2165,7 +2167,7 @@ gdk_window_set_transient_for (GdkWindow *window,
* be shown unconditionally here. If it is not shown, the
* window will be added in show() instead.
*/
- if (!(GDK_WINDOW_OBJECT (window)->state & GDK_WINDOW_STATE_WITHDRAWN))
+ if (!(window->state & GDK_WINDOW_STATE_WITHDRAWN))
_gdk_quartz_window_attach_to_parent (window);
}
}
@@ -2202,11 +2204,7 @@ void
gdk_window_set_accept_focus (GdkWindow *window,
gboolean accept_focus)
{
- GdkWindowObject *private;
-
- private = (GdkWindowObject *)window;
-
- private->accept_focus = accept_focus != FALSE;
+ window->accept_focus = accept_focus != FALSE;
}
static gboolean
@@ -2225,11 +2223,7 @@ void
gdk_window_set_focus_on_map (GdkWindow *window,
gboolean focus_on_map)
{
- GdkWindowObject *private;
-
- private = (GdkWindowObject *)window;
-
- private->focus_on_map = focus_on_map != FALSE;
+ window->focus_on_map = focus_on_map != FALSE;
}
void
@@ -2243,17 +2237,15 @@ void
gdk_window_focus (GdkWindow *window,
guint32 timestamp)
{
- GdkWindowObject *private;
GdkWindowImplQuartz *impl;
- private = (GdkWindowObject*) window;
- impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
if (GDK_WINDOW_DESTROYED (window) ||
!WINDOW_IS_TOPLEVEL (window))
return;
- if (private->accept_focus && private->window_type != GDK_WINDOW_TEMP)
+ if (window->accept_focus && window->window_type != GDK_WINDOW_TEMP)
{
GDK_QUARTZ_ALLOC_POOL;
[impl->toplevel makeKeyAndOrderFront:impl->toplevel];
@@ -2339,7 +2331,7 @@ gdk_window_set_type_hint (GdkWindow *window,
!WINDOW_IS_TOPLEVEL (window))
return;
- impl = GDK_WINDOW_IMPL_QUARTZ (((GdkWindowObject *) window)->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
impl->type_hint = hint;
@@ -2358,7 +2350,7 @@ gdk_window_get_type_hint (GdkWindow *window)
!WINDOW_IS_TOPLEVEL (window))
return GDK_WINDOW_TYPE_HINT_NORMAL;
- return GDK_WINDOW_IMPL_QUARTZ (((GdkWindowObject *) window)->impl)->type_hint;
+ return GDK_WINDOW_IMPL_QUARTZ (window->impl)->type_hint;
}
void
@@ -2402,7 +2394,6 @@ gdk_window_begin_resize_drag (GdkWindow *window,
gint root_y,
guint32 timestamp)
{
- GdkWindowObject *private;
GdkWindowImplQuartz *impl;
g_return_if_fail (GDK_IS_WINDOW (window));
@@ -2416,8 +2407,7 @@ gdk_window_begin_resize_drag (GdkWindow *window,
if (GDK_WINDOW_DESTROYED (window))
return;
- private = GDK_WINDOW_OBJECT (window);
- impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
if (!impl->toplevel)
{
@@ -2435,15 +2425,13 @@ gdk_window_begin_move_drag (GdkWindow *window,
gint root_y,
guint32 timestamp)
{
- GdkWindowObject *private;
GdkWindowImplQuartz *impl;
if (GDK_WINDOW_DESTROYED (window) ||
!WINDOW_IS_TOPLEVEL (window))
return;
- private = GDK_WINDOW_OBJECT (window);
- impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
if (!impl->toplevel)
{
@@ -2465,14 +2453,12 @@ void
gdk_window_get_frame_extents (GdkWindow *window,
GdkRectangle *rect)
{
- GdkWindowObject *private;
GdkWindow *toplevel;
GdkWindowImplQuartz *impl;
NSRect ns_rect;
g_return_if_fail (rect != NULL);
- private = GDK_WINDOW_OBJECT (window);
rect->x = 0;
rect->y = 0;
@@ -2480,7 +2466,7 @@ gdk_window_get_frame_extents (GdkWindow *window,
rect->height = 1;
toplevel = gdk_window_get_effective_toplevel (window);
- impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (toplevel)->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (toplevel->impl);
ns_rect = [impl->toplevel frame];
@@ -2504,7 +2490,7 @@ gdk_window_set_decorations (GdkWindow *window,
!WINDOW_IS_TOPLEVEL (window))
return;
- impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (window)->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
if (decorations == 0 || GDK_WINDOW_TYPE (window) == GDK_WINDOW_TEMP ||
impl->type_hint == GDK_WINDOW_TYPE_HINT_SPLASHSCREEN )
@@ -2580,7 +2566,7 @@ gdk_window_get_decorations (GdkWindow *window,
!WINDOW_IS_TOPLEVEL (window))
return FALSE;
- impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (window)->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
if (decorations)
{
@@ -2640,7 +2626,7 @@ gdk_window_maximize (GdkWindow *window)
!WINDOW_IS_TOPLEVEL (window))
return;
- impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (window)->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
if (GDK_WINDOW_IS_MAPPED (window))
{
@@ -2668,7 +2654,7 @@ gdk_window_unmaximize (GdkWindow *window)
!WINDOW_IS_TOPLEVEL (window))
return;
- impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (window)->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
if (GDK_WINDOW_IS_MAPPED (window))
{
@@ -2696,7 +2682,7 @@ gdk_window_iconify (GdkWindow *window)
!WINDOW_IS_TOPLEVEL (window))
return;
- impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (window)->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
if (GDK_WINDOW_IS_MAPPED (window))
{
@@ -2724,7 +2710,7 @@ gdk_window_deiconify (GdkWindow *window)
!WINDOW_IS_TOPLEVEL (window))
return;
- impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (window)->impl);
+ impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
if (GDK_WINDOW_IS_MAPPED (window))
{
@@ -2753,7 +2739,6 @@ void
gdk_window_fullscreen (GdkWindow *window)
{
FullscreenSavedGeometry *geometry;
- GdkWindowObject *private = (GdkWindowObject *) window;
NSRect frame;
if (GDK_WINDOW_DESTROYED (window) ||
@@ -2765,10 +2750,10 @@ gdk_window_fullscreen (GdkWindow *window)
{
geometry = g_new (FullscreenSavedGeometry, 1);
- geometry->x = private->x;
- geometry->y = private->y;
- geometry->width = private->width;
- geometry->height = private->height;
+ geometry->x = window->x;
+ geometry->y = window->y;
+ geometry->width = window->width;
+ geometry->height = window->height;
if (!gdk_window_get_decorations (window, &geometry->decor))
geometry->decor = GDK_DECOR_ALL;
@@ -2821,8 +2806,7 @@ gdk_window_unfullscreen (GdkWindow *window)
void
gdk_window_set_keep_above (GdkWindow *window, gboolean setting)
{
- GdkWindowObject *private = (GdkWindowObject *) window;
- GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
gint level;
g_return_if_fail (GDK_IS_WINDOW (window));
@@ -2840,8 +2824,7 @@ gdk_window_set_keep_above (GdkWindow *window, gboolean setting)
void
gdk_window_set_keep_below (GdkWindow *window, gboolean setting)
{
- GdkWindowObject *private = (GdkWindowObject *) window;
- GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
gint level;
g_return_if_fail (GDK_IS_WINDOW (window));
@@ -2919,8 +2902,7 @@ void
gdk_window_set_opacity (GdkWindow *window,
gdouble opacity)
{
- GdkWindowObject *private = (GdkWindowObject *) window;
- GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+ GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (window->impl);
g_return_if_fail (GDK_IS_WINDOW (window));
g_return_if_fail (WINDOW_IS_TOPLEVEL (window));
@@ -2956,45 +2938,125 @@ gdk_quartz_window_get_input_shape (GdkWindow *window)
return NULL;
}
+
static void
-gdk_window_impl_iface_init (GdkWindowImplIface *iface)
-{
- iface->show = gdk_window_quartz_show;
- iface->hide = gdk_window_quartz_hide;
- iface->withdraw = gdk_window_quartz_withdraw;
- iface->set_events = gdk_window_quartz_set_events;
- iface->get_events = gdk_window_quartz_get_events;
- iface->raise = gdk_window_quartz_raise;
- iface->lower = gdk_window_quartz_lower;
- iface->restack_toplevel = gdk_window_quartz_restack_toplevel;
- iface->move_resize = gdk_window_quartz_move_resize;
- iface->set_background = gdk_window_quartz_set_background;
- iface->reparent = gdk_window_quartz_reparent;
- iface->set_device_cursor = gdk_window_quartz_set_device_cursor;
- iface->get_geometry = gdk_window_quartz_get_geometry;
- iface->get_root_coords = gdk_window_quartz_get_root_coords;
- iface->get_device_state = gdk_window_quartz_get_device_state;
- iface->shape_combine_region = gdk_window_quartz_shape_combine_region;
- iface->input_shape_combine_region = gdk_window_quartz_input_shape_combine_region;
- iface->set_static_gravities = gdk_window_quartz_set_static_gravities;
- iface->queue_antiexpose = _gdk_quartz_window_queue_antiexpose;
- iface->translate = _gdk_quartz_window_translate;
- iface->destroy = _gdk_quartz_window_destroy;
- iface->resize_cairo_surface = gdk_window_quartz_resize_cairo_surface;
- iface->get_shape = gdk_quartz_window_get_shape;
- iface->get_input_shape = gdk_quartz_window_get_input_shape;
+gdk_window_impl_quartz_class_init (GdkWindowImplQuartzClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+ GdkWindowImplClass *impl_class = GDK_WINDOW_IMPL_CLASS (klass);
+ GdkWindowImplQuartzClass *impl_quartz_class = GDK_WINDOW_IMPL_QUARTZ_CLASS (klass);
+
+ parent_class = g_type_class_peek_parent (klass);
+
+ object_class->finalize = gdk_window_impl_quartz_finalize;
+
+ impl_class->ref_cairo_surface = gdk_quartz_ref_cairo_surface;
+ impl_class->show = gdk_window_quartz_show;
+ impl_class->hide = gdk_window_quartz_hide;
+ impl_class->withdraw = gdk_window_quartz_withdraw;
+ impl_class->set_events = gdk_window_quartz_set_events;
+ impl_class->get_events = gdk_window_quartz_get_events;
+ impl_class->raise = gdk_window_quartz_raise;
+ impl_class->lower = gdk_window_quartz_lower;
+ impl_class->restack_toplevel = gdk_window_quartz_restack_toplevel;
+ impl_class->move_resize = gdk_window_quartz_move_resize;
+ impl_class->set_background = gdk_window_quartz_set_background;
+ impl_class->reparent = gdk_window_quartz_reparent;
+ impl_class->set_device_cursor = gdk_window_quartz_set_device_cursor;
+ impl_class->get_geometry = gdk_window_quartz_get_geometry;
+ impl_class->get_root_coords = gdk_window_quartz_get_root_coords;
+ impl_class->get_device_state = gdk_window_quartz_get_device_state;
+ impl_class->shape_combine_region = gdk_window_quartz_shape_combine_region;
+ impl_class->input_shape_combine_region = gdk_window_quartz_input_shape_combine_region;
+ impl_class->set_static_gravities = gdk_window_quartz_set_static_gravities;
+ impl_class->queue_antiexpose = _gdk_quartz_window_queue_antiexpose;
+ impl_class->translate = _gdk_quartz_window_translate;
+ impl_class->destroy = _gdk_quartz_window_destroy;
+ impl_class->resize_cairo_surface = gdk_window_quartz_resize_cairo_surface;
+ impl_class->get_shape = gdk_quartz_window_get_shape;
+ impl_class->get_input_shape = gdk_quartz_window_get_input_shape;
+
+ impl_quartz_class->get_context = gdk_window_impl_quartz_get_context;
+ impl_quartz_class->release_context = gdk_window_impl_quartz_release_context;
}
+GType
+_gdk_window_impl_quartz_get_type (void)
+{
+ static GType object_type = 0;
+
+ if (!object_type)
+ {
+ const GTypeInfo object_info =
+ {
+ sizeof (GdkWindowImplQuartzClass),
+ (GBaseInitFunc) NULL,
+ (GBaseFinalizeFunc) NULL,
+ (GClassInitFunc) gdk_window_impl_quartz_class_init,
+ NULL, /* class_finalize */
+ NULL, /* class_data */
+ sizeof (GdkWindowImplQuartz),
+ 0, /* n_preallocs */
+ (GInstanceInitFunc) gdk_window_impl_quartz_init,
+ };
+
+ const GInterfaceInfo paintable_info =
+ {
+ (GInterfaceInitFunc) gdk_window_impl_quartz_paintable_init,
+ NULL,
+ NULL
+ };
+
+ object_type = g_type_register_static (GDK_TYPE_WINDOW_IMPL,
+ "GdkWindowImplQuartz",
+ &object_info, 0);
+ g_type_add_interface_static (object_type,
+ GDK_TYPE_PAINTABLE,
+ &paintable_info);
+ }
+
+ return object_type;
+}
+
+CGContextRef
+gdk_quartz_window_get_context (GdkWindowImplQuartz *window,
+ gboolean antialias)
+{
+ if (!GDK_WINDOW_IMPL_QUARTZ_GET_CLASS (window)->get_context)
+ {
+ g_warning ("%s doesn't implement GdkWindowImplQuartzClass::get_context()",
+ G_OBJECT_TYPE_NAME (window));
+ return NULL;
+ }
+
+ return GDK_WINDOW_IMPL_QUARTZ_GET_CLASS (window)->get_context (window, antialias);
+}
+
+void
+gdk_quartz_window_release_context (GdkWindowImplQuartz *window,
+ CGContextRef cg_context)
+{
+ if (!GDK_WINDOW_IMPL_QUARTZ_GET_CLASS (window)->release_context)
+ {
+ g_warning ("%s doesn't implement GdkWindowImplQuartzClass::release_context()",
+ G_OBJECT_TYPE_NAME (window));
+ return;
+ }
+
+ GDK_WINDOW_IMPL_QUARTZ_GET_CLASS (window)->release_context (window, cg_context);
+}
+
+
static CGContextRef
-gdk_root_window_impl_quartz_get_context (GdkDrawable *drawable,
- gboolean antialias)
+gdk_root_window_impl_quartz_get_context (GdkWindowImplQuartz *window,
+ gboolean antialias)
{
- GdkDrawableImplQuartz *drawable_impl = GDK_DRAWABLE_IMPL_QUARTZ (drawable);
CGColorSpaceRef colorspace;
CGContextRef cg_context;
+ GdkWindowImplQuartz *window_impl = GDK_WINDOW_IMPL_QUARTZ (window);
- if (GDK_WINDOW_DESTROYED (drawable_impl->wrapper))
+ if (GDK_WINDOW_DESTROYED (window_impl->wrapper))
return NULL;
/* We do not have the notion of a root window on OS X. We fake this
@@ -3010,8 +3072,8 @@ gdk_root_window_impl_quartz_get_context (GdkDrawable *drawable,
}
static void
-gdk_root_window_impl_quartz_release_context (GdkDrawable *drawable,
- CGContextRef cg_context)
+gdk_root_window_impl_quartz_release_context (GdkWindowImplQuartz *window,
+ CGContextRef cg_context)
{
CGContextRelease (cg_context);
}
@@ -3019,12 +3081,12 @@ gdk_root_window_impl_quartz_release_context (GdkDrawable *drawable,
static void
gdk_root_window_impl_quartz_class_init (GdkRootWindowImplQuartzClass *klass)
{
- GdkDrawableImplQuartzClass *drawable_quartz_class = GDK_DRAWABLE_IMPL_QUARTZ_CLASS (klass);
+ GdkWindowImplQuartzClass *window_quartz_class = GDK_WINDOW_IMPL_QUARTZ_CLASS (klass);
root_window_parent_class = g_type_class_peek_parent (klass);
- drawable_quartz_class->get_context = gdk_root_window_impl_quartz_get_context;
- drawable_quartz_class->release_context = gdk_root_window_impl_quartz_release_context;
+ window_quartz_class->get_context = gdk_root_window_impl_quartz_get_context;
+ window_quartz_class->release_context = gdk_root_window_impl_quartz_release_context;
}
static void
diff --git a/gdk/quartz/gdkwindow-quartz.h b/gdk/quartz/gdkwindow-quartz.h
index b591eebc81..f55bbb33e9 100644
--- a/gdk/quartz/gdkwindow-quartz.h
+++ b/gdk/quartz/gdkwindow-quartz.h
@@ -21,9 +21,9 @@
#ifndef __GDK_WINDOW_QUARTZ_H__
#define __GDK_WINDOW_QUARTZ_H__
-#include <gdk/quartz/gdkdrawable-quartz.h>
#import <gdk/quartz/GdkQuartzView.h>
#import <gdk/quartz/GdkQuartzWindow.h>
+#include "gdk/gdkwindowimpl.h"
G_BEGIN_DECLS
@@ -42,7 +42,9 @@ typedef struct _GdkWindowImplQuartzClass GdkWindowImplQuartzClass;
struct _GdkWindowImplQuartz
{
- GdkDrawableImplQuartz parent_instance;
+ GdkWindowImpl parent_instance;
+
+ GdkWindow *wrapper;
NSWindow *toplevel;
NSTrackingRectTag tracking_rect;
@@ -60,15 +62,26 @@ struct _GdkWindowImplQuartz
GList *sorted_children;
cairo_region_t *needs_display_region;
+
+ cairo_surface_t *cairo_surface;
};
struct _GdkWindowImplQuartzClass
{
- GdkDrawableImplQuartzClass parent_class;
+ GdkWindowImplClass parent_class;
+
+ CGContextRef (* get_context) (GdkWindowImplQuartz *window,
+ gboolean antialias);
+ void (* release_context) (GdkWindowImplQuartz *window,
+ CGContextRef cg_context);
};
GType _gdk_window_impl_quartz_get_type (void);
+CGContextRef gdk_quartz_window_get_context (GdkWindowImplQuartz *window,
+ gboolean antialias);
+void gdk_quartz_window_release_context (GdkWindowImplQuartz *window,
+ CGContextRef context);
/* Root window implementation for Quartz
*/