diff options
author | Minh Nguyễn <mxn@1ec5.org> | 2016-07-06 11:21:30 -0700 |
---|---|---|
committer | Konstantin Käfer <mail@kkaefer.com> | 2016-07-07 14:12:24 +0200 |
commit | e603cf46f1477740eb6c1962eec54e1e84412bce (patch) | |
tree | 547d8e83c45e68ed0e76b69b75083bba794054a0 | |
parent | d929e322172511c11bf3cca38b95894083f1df65 (diff) | |
download | qtlocation-mapboxgl-e603cf46f1477740eb6c1962eec54e1e84412bce.tar.gz |
[macos] Use gesture recognizer for context menu
NSView’s built-in context menu handling preempts non-right-click gesture recognizers, so preempt it with a right-click gesture recognizer that does essentially the same thing. With this change, two-finger double-tapping on a trackpad also zooms out, consistent with MapKit.
Fixes #5078.
-rw-r--r-- | platform/macos/CHANGELOG.md | 2 | ||||
-rw-r--r-- | platform/macos/app/AppDelegate.m | 2 | ||||
-rw-r--r-- | platform/macos/src/MGLMapView.mm | 12 |
3 files changed, 15 insertions, 1 deletions
diff --git a/platform/macos/CHANGELOG.md b/platform/macos/CHANGELOG.md index 9d4812d166..675cdd885a 100644 --- a/platform/macos/CHANGELOG.md +++ b/platform/macos/CHANGELOG.md @@ -1,6 +1,8 @@ # Changelog for Mapbox macOS SDK ## master + +* Right-clicking to open MGLMapView’s context menu no longer prevents the user from subsequently panning the map by clicking and dragging. ([#5593](https://github.com/mapbox/mapbox-gl-native/pull/5593)) * Replaced the wireframe debug mask with an overdraw visualization debug mask to match Mapbox GL JS’s overdraw inspector. ([#5403](https://github.com/mapbox/mapbox-gl-native/pull/5403)) ## 0.2.0 diff --git a/platform/macos/app/AppDelegate.m b/platform/macos/app/AppDelegate.m index ce5abcae20..d3fe2d204e 100644 --- a/platform/macos/app/AppDelegate.m +++ b/platform/macos/app/AppDelegate.m @@ -249,7 +249,7 @@ NSString * const MGLLastMapDebugMaskDefaultsKey = @"MGLLastMapDebugMask"; alert.informativeText = @"\ • To scroll, swipe with two fingers on a trackpad, or drag the cursor, or press the arrow keys.\n\ • To zoom in, pinch two fingers apart on a trackpad, or double-click, or hold down Shift while dragging the cursor down, or hold down Option while pressing the up key.\n\ -• To zoom out, pinch two fingers together on a trackpad, or double-tap on a mouse, or hold down Shift while dragging the cursor up, or hold down Option while pressing the down key.\n\ +• To zoom out, pinch two fingers together on a trackpad, or double-tap with two fingers on a trackpad, or double-tap on a mouse, or hold down Shift while dragging the cursor up, or hold down Option while pressing the down key.\n\ • To rotate, move two fingers opposite each other in a circle on a trackpad, or hold down Option while dragging the cursor left and right, or hold down Option while pressing the left and right arrow keys.\n\ • To tilt, hold down Option while dragging the cursor up and down.\n\ • To drop a pin, click and hold.\ diff --git a/platform/macos/src/MGLMapView.mm b/platform/macos/src/MGLMapView.mm index 02c892b356..5785f56e01 100644 --- a/platform/macos/src/MGLMapView.mm +++ b/platform/macos/src/MGLMapView.mm @@ -395,6 +395,10 @@ public: clickGestureRecognizer.delaysPrimaryMouseButtonEvents = NO; [self addGestureRecognizer:clickGestureRecognizer]; + NSClickGestureRecognizer *rightClickGestureRecognizer = [[NSClickGestureRecognizer alloc] initWithTarget:self action:@selector(handleRightClickGesture:)]; + rightClickGestureRecognizer.buttonMask = 0x2; + [self addGestureRecognizer:rightClickGestureRecognizer]; + NSClickGestureRecognizer *doubleClickGestureRecognizer = [[NSClickGestureRecognizer alloc] initWithTarget:self action:@selector(handleDoubleClickGesture:)]; doubleClickGestureRecognizer.numberOfClicksRequired = 2; doubleClickGestureRecognizer.delaysPrimaryMouseButtonEvents = NO; @@ -1359,6 +1363,14 @@ public: } } +/// Right-click to show the context menu. +- (void)handleRightClickGesture:(NSClickGestureRecognizer *)gestureRecognizer { + NSMenu *menu = [self menuForEvent:[NSApp currentEvent]]; + if (menu) { + [NSMenu popUpContextMenu:menu withEvent:[NSApp currentEvent] forView:self]; + } +} + /// Double-click or double-tap to zoom in. - (void)handleDoubleClickGesture:(NSClickGestureRecognizer *)gestureRecognizer { if (!self.zoomEnabled || gestureRecognizer.state != NSGestureRecognizerStateEnded |