summaryrefslogtreecommitdiff
path: root/gdk
diff options
context:
space:
mode:
authorRichard Hult <richard@imendio.com>2007-06-19 22:09:56 +0000
committerRichard Hult <rhult@src.gnome.org>2007-06-19 22:09:56 +0000
commit0932e4be38f9f374d6681ce27c71aa62cb8b80f1 (patch)
tree029a8433b11790641b7b53d263080375ee1e40d2 /gdk
parent708dba5dc64b05e9c802629a861331dc0a920c3e (diff)
downloadgtk+-0932e4be38f9f374d6681ce27c71aa62cb8b80f1.tar.gz
Don't create or update the tracking rect in the window, move it to the
2007-06-20 Richard Hult <richard@imendio.com> * gdk/quartz/gdkwindow-quartz.c (gdk_window_new): * gdk/quartz/GdkQuartzWindow.c (windowDidResize): Don't create or update the tracking rect in the window, move it to the view where it belongs. * gdk/quartz/GdkQuartzView.c (updateTrackingRect) (viewDidMoveToWindow, viewWillMoveToWindow) (setFrame, setBounds): Create and update the tracking rect here. svn path=/trunk/; revision=18197
Diffstat (limited to 'gdk')
-rw-r--r--gdk/quartz/GdkQuartzView.c52
-rw-r--r--gdk/quartz/GdkQuartzView.h1
-rw-r--r--gdk/quartz/GdkQuartzWindow.c13
-rw-r--r--gdk/quartz/gdkwindow-quartz.c31
4 files changed, 67 insertions, 30 deletions
diff --git a/gdk/quartz/GdkQuartzView.c b/gdk/quartz/GdkQuartzView.c
index 500c0b53be..aefcc14074 100644
--- a/gdk/quartz/GdkQuartzView.c
+++ b/gdk/quartz/GdkQuartzView.c
@@ -110,4 +110,56 @@
GDK_QUARTZ_RELEASE_POOL;
}
+/* For information on seting up tracking rects properly, see here:
+ * http://developer.apple.com/documentation/Cocoa/Conceptual/EventOverview/EventOverview.pdf
+ */
+-(void)updateTrackingRect
+{
+ GdkWindowObject *private = GDK_WINDOW_OBJECT (gdk_window);
+ GdkWindowImplQuartz *impl = GDK_WINDOW_IMPL_QUARTZ (private->impl);
+
+ if (trackingRect)
+ {
+ [self removeTrackingRect:trackingRect];
+ trackingRect = nil;
+ }
+
+ if (!impl->toplevel)
+ return;
+
+ trackingRect = [self addTrackingRect:[self bounds]
+ owner:self
+ userData:nil
+ assumeInside:NO];
+}
+
+-(void)viewDidMoveToWindow
+{
+ if (![self window]) /* We are destroyed already */
+ return;
+
+ [self updateTrackingRect];
+}
+
+-(void)viewWillMoveToWindow:(NSWindow *)newWindow
+{
+ if ([self window] && trackingRect)
+ {
+ [self removeTrackingRect:trackingRect];
+ trackingRect = nil;
+ }
+}
+
+-(void)setFrame:(NSRect)frame
+{
+ [super setFrame:frame];
+ [self updateTrackingRect];
+}
+
+-(void)setBounds:(NSRect)bounds
+{
+ [super setBounds:bounds];
+ [self updateTrackingRect];
+}
+
@end
diff --git a/gdk/quartz/GdkQuartzView.h b/gdk/quartz/GdkQuartzView.h
index 28f6a93774..1da55e3773 100644
--- a/gdk/quartz/GdkQuartzView.h
+++ b/gdk/quartz/GdkQuartzView.h
@@ -23,6 +23,7 @@
@interface GdkQuartzView : NSView {
GdkWindow *gdk_window;
+ NSTrackingRectTag trackingRect;
}
-(void)setGdkWindow:(GdkWindow *)window;
diff --git a/gdk/quartz/GdkQuartzWindow.c b/gdk/quartz/GdkQuartzWindow.c
index cd18e7f9be..97c01e79e8 100644
--- a/gdk/quartz/GdkQuartzWindow.c
+++ b/gdk/quartz/GdkQuartzWindow.c
@@ -136,7 +136,6 @@
impl->height = content_rect.size.height;
/* Synthesize a configure event */
-
event = gdk_event_new (GDK_CONFIGURE);
event->configure.window = g_object_ref (window);
event->configure.x = private->x;
@@ -145,13 +144,6 @@
event->configure.height = impl->height;
_gdk_event_queue_append (gdk_display_get_default (), event);
-
- /* Update tracking rectangle */
- [[self contentView] removeTrackingRect:impl->tracking_rect];
- impl->tracking_rect = [impl->view addTrackingRect:NSMakeRect(0, 0, impl->width, impl->height)
- owner:impl->view
- userData:nil
- assumeInside:NO];
}
-(id)initWithContentRect:(NSRect)contentRect styleMask:(unsigned int)styleMask backing:(NSBackingStoreType)backingType defer:(BOOL)flag
@@ -161,12 +153,7 @@
backing:backingType
defer:flag];
-
- /* A possible modification here would be to only accept mouse moved events
- * if any of the child GdkWindows are interested in mouse moved events.
- */
[self setAcceptsMouseMovedEvents:YES];
-
[self setDelegate:self];
[self setReleasedWhenClosed:YES];
diff --git a/gdk/quartz/gdkwindow-quartz.c b/gdk/quartz/gdkwindow-quartz.c
index f538e2100f..a4e62fa929 100644
--- a/gdk/quartz/gdkwindow-quartz.c
+++ b/gdk/quartz/gdkwindow-quartz.c
@@ -643,16 +643,17 @@ gdk_window_new (GdkWindow *parent,
const char *title;
int style_mask;
- switch (attributes->window_type) {
- case GDK_WINDOW_TEMP:
- style_mask = NSBorderlessWindowMask;
- break;
- default:
- style_mask = (NSTitledWindowMask |
- NSClosableWindowMask |
- NSMiniaturizableWindowMask |
- NSResizableWindowMask);
- }
+ switch (attributes->window_type)
+ {
+ case GDK_WINDOW_TEMP:
+ style_mask = NSBorderlessWindowMask;
+ break;
+ default:
+ style_mask = (NSTitledWindowMask |
+ NSClosableWindowMask |
+ NSMiniaturizableWindowMask |
+ NSResizableWindowMask);
+ }
impl->toplevel = [[GdkQuartzWindow alloc] initWithContentRect:content_rect
styleMask:style_mask
@@ -665,7 +666,7 @@ gdk_window_new (GdkWindow *parent,
title = get_default_title ();
gdk_window_set_title (window, title);
-
+
if (draw_impl->colormap == gdk_screen_get_rgba_colormap (_gdk_screen))
{
[impl->toplevel setOpaque:NO];
@@ -675,14 +676,9 @@ gdk_window_new (GdkWindow *parent,
impl->view = [[GdkQuartzView alloc] initWithFrame:content_rect];
[impl->view setGdkWindow:window];
[impl->toplevel setContentView:impl->view];
-
- /* Add a tracking rect */
- impl->tracking_rect = [impl->view addTrackingRect:NSMakeRect(0, 0, impl->width, impl->height)
- owner:impl->view
- userData:nil
- assumeInside:NO];
}
break;
+
case GDK_WINDOW_CHILD:
{
GdkWindowImplQuartz *parent_impl = GDK_WINDOW_IMPL_QUARTZ (GDK_WINDOW_OBJECT (parent)->impl);
@@ -701,6 +697,7 @@ gdk_window_new (GdkWindow *parent,
}
}
break;
+
default:
g_assert_not_reached ();
}