[gtk/wip/chergert/quartz4u] macos: use tracking areas instead of tracking rect
- From: Christian Hergert <chergert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/chergert/quartz4u] macos: use tracking areas instead of tracking rect
- Date: Thu, 7 May 2020 23:25:38 +0000 (UTC)
commit a9a4f2377c9afed56bbb6af74429f129c1f3f7c7
Author: Christian Hergert <chergert redhat com>
Date: Thu May 7 16:23:52 2020 -0700
macos: use tracking areas instead of tracking rect
trackingRect is the pre 10.5 way of doing things, and we can easily drop
that from anything new we're writing.
gdk/macos/GdkMacosBaseView.c | 71 +++++++++++++-------------------------------
gdk/macos/GdkMacosBaseView.h | 5 ++--
gdk/macos/GdkMacosWindow.c | 17 +++++------
3 files changed, 29 insertions(+), 64 deletions(-)
---
diff --git a/gdk/macos/GdkMacosBaseView.c b/gdk/macos/GdkMacosBaseView.c
index af8a8f8f96..730923ed3f 100644
--- a/gdk/macos/GdkMacosBaseView.c
+++ b/gdk/macos/GdkMacosBaseView.c
@@ -49,14 +49,32 @@
{
if ((self = [super initWithFrame: frameRect]))
{
+ NSRect rect = NSMakeRect (0, 0, 0, 0);
+ NSTrackingAreaOptions options;
+
markedRange = NSMakeRange (NSNotFound, 0);
selectedRange = NSMakeRange (0, 0);
[self setValue: @(YES) forKey: @"postsFrameChangedNotifications"];
+
+ options = (NSTrackingMouseEnteredAndExited |
+ NSTrackingMouseMoved |
+ NSTrackingInVisibleRect |
+ NSTrackingActiveAlways);
+ trackingArea = [[NSTrackingArea alloc] initWithRect:rect
+ options:options
+ owner:(id)self
+ userInfo:nil];
+ [self addTrackingArea:trackingArea];
}
return self;
}
+-(BOOL)acceptsFirstMouse
+{
+ return YES;
+}
+
-(BOOL)acceptsFirstResponder
{
GDK_NOTE (EVENTS, g_message ("acceptsFirstResponder"));
@@ -80,58 +98,9 @@
needsInvalidateShadow = invalidate;
}
-/* For information on setting up tracking rects properly, see here:
- * http://developer.apple.com/documentation/Cocoa/Conceptual/EventOverview/EventOverview.pdf
- */
--(void)updateTrackingRect
+-(NSTrackingArea *)trackingArea
{
- NSRect rect;
-
- if (trackingRect)
- {
- [self removeTrackingRect: trackingRect];
- trackingRect = 0;
- }
-
- /* Note, if we want to set assumeInside we can use:
- * NSPointInRect ([[self window] convertScreenToBase:[NSEvent mouseLocation]], rect)
- */
-
- rect = [self bounds];
- trackingRect = [self addTrackingRect: rect
- owner: self
- userData: nil
- assumeInside: NO];
-}
-
--(NSTrackingRectTag)trackingRect
-{
- return trackingRect;
-}
-
--(void)viewDidMoveToWindow
-{
- if (![self window]) /* We are destroyed already */
- return;
-
- [self updateTrackingRect];
-}
-
--(void)viewWillMoveToWindow: (NSWindow *)newWindow
-{
- if (newWindow == nil && trackingRect)
- {
- [self removeTrackingRect: trackingRect];
- trackingRect = 0;
- }
-}
-
--(void)setFrame: (NSRect)frame
-{
- [super setFrame: frame];
-
- if ([self window])
- [self updateTrackingRect];
+ return trackingArea;
}
-(GdkMacosSurface *)getGdkSurface
diff --git a/gdk/macos/GdkMacosBaseView.h b/gdk/macos/GdkMacosBaseView.h
index 3e07d2ae6a..4617135a85 100644
--- a/gdk/macos/GdkMacosBaseView.h
+++ b/gdk/macos/GdkMacosBaseView.h
@@ -29,7 +29,7 @@
@interface GdkMacosBaseView : NSView
{
- NSTrackingRectTag trackingRect;
+ NSTrackingArea *trackingArea;
BOOL needsInvalidateShadow;
NSRange markedRange;
NSRange selectedRange;
@@ -38,7 +38,6 @@
-(GdkMacosSurface *)getGdkSurface;
-(GdkMacosDisplay *)getGdkDisplay;
-(void)setNeedsInvalidateShadow: (BOOL)invalidate;
--(void)updateTrackingRect;
--(NSTrackingRectTag)trackingRect;
+-(NSTrackingArea *)trackingArea;
@end
diff --git a/gdk/macos/GdkMacosWindow.c b/gdk/macos/GdkMacosWindow.c
index c1b93c615b..da120193d6 100644
--- a/gdk/macos/GdkMacosWindow.c
+++ b/gdk/macos/GdkMacosWindow.c
@@ -131,10 +131,11 @@
-(void)sendEvent:(NSEvent *)event
{
- switch ((int)[event type])
- {
- case NSEventTypeLeftMouseUp:
+ NSEventType event_type = [event type];
+
+ switch ((int)event_type)
{
+ case NSEventTypeLeftMouseUp: {
GdkDisplay *display = gdk_surface_get_display (GDK_SURFACE (gdkSurface));
double time = ((double)[event timestamp]) * 1000.0;
@@ -186,7 +187,7 @@
windowNumber: [self windowNumber]
context: NULL
eventNumber: 0
- trackingNumber: [view trackingRect]
+ trackingNumber: (NSInteger)[view trackingArea]
userData: nil];
[NSApp postEvent:event atStart:NO];
@@ -241,16 +242,14 @@
[[self contentView] setFrame:NSMakeRect (0, 0, surface->width, surface->height)];
+ _gdk_surface_update_size (surface);
+
/* Synthesize a configure event */
event = gdk_configure_event_new (surface,
content_rect.size.width,
content_rect.size.height);
_gdk_event_queue_append (display, event);
- surface->width = content_rect.size.width;
- surface->height = content_rect.size.height;
- _gdk_surface_update_size (surface);
-
[self checkSendEnterNotify];
}
@@ -301,8 +300,6 @@
inShowOrHide = NO;
[self checkSendEnterNotify];
-
- [(GdkMacosBaseView *)[self contentView] updateTrackingRect];
}
-(void)hide
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]