diff options
author | Richard Hult <richard@imendio.com> | 2007-06-19 22:09:56 +0000 |
---|---|---|
committer | Richard Hult <rhult@src.gnome.org> | 2007-06-19 22:09:56 +0000 |
commit | 0932e4be38f9f374d6681ce27c71aa62cb8b80f1 (patch) | |
tree | 029a8433b11790641b7b53d263080375ee1e40d2 /gdk | |
parent | 708dba5dc64b05e9c802629a861331dc0a920c3e (diff) | |
download | gtk+-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.c | 52 | ||||
-rw-r--r-- | gdk/quartz/GdkQuartzView.h | 1 | ||||
-rw-r--r-- | gdk/quartz/GdkQuartzWindow.c | 13 | ||||
-rw-r--r-- | gdk/quartz/gdkwindow-quartz.c | 31 |
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 (); } |