summaryrefslogtreecommitdiffstats
path: root/video/out/cocoa
diff options
context:
space:
mode:
authorStefano Pigozzi <stefano.pigozzi@gmail.com>2014-10-17 19:15:17 +0200
committerStefano Pigozzi <stefano.pigozzi@gmail.com>2014-10-17 19:19:45 +0200
commiteb902efb0450b0080688fd210951049579d316b6 (patch)
treeec589a437eb64566cc23356feff39c0224b8db5a /video/out/cocoa
parent49b6fa877938e9f53ca905467975ef580d3a4ab2 (diff)
downloadmpv-eb902efb0450b0080688fd210951049579d316b6.tar.bz2
mpv-eb902efb0450b0080688fd210951049579d316b6.tar.xz
cocoa: allow mouse events to bubble up with no-input-cursor
Previously we didn't report events to the core, but still prevented the events to travel on the responder chain.
Diffstat (limited to 'video/out/cocoa')
-rw-r--r--video/out/cocoa/events_view.m113
-rw-r--r--video/out/cocoa/mpvadapter.h2
2 files changed, 101 insertions, 14 deletions
diff --git a/video/out/cocoa/events_view.m b/video/out/cocoa/events_view.m
index fd088cb5e6..c3e626b0fe 100644
--- a/video/out/cocoa/events_view.m
+++ b/video/out/cocoa/events_view.m
@@ -31,6 +31,8 @@
- (BOOL)hasDock:(NSScreen*)screen;
- (BOOL)hasMenubar:(NSScreen*)screen;
- (int)mpvButtonNumber:(NSEvent*)event;
+- (void)mouseDownEvent:(NSEvent *)event;
+- (void)mouseUpEvent:(NSEvent *)event;
@end
@implementation MpvEventsView
@@ -94,7 +96,11 @@
- (void)updateTrackingAreas
{
- if (self.tracker) [self removeTrackingArea:self.tracker];
+ if (self.tracker)
+ [self removeTrackingArea:self.tracker];
+
+ if (![self.adapter mouseEnabled])
+ return;
NSTrackingAreaOptions trackingOptions =
NSTrackingEnabledDuringMouseDrag |
@@ -127,9 +133,18 @@
return CGRectContainsPoint(clippedBounds, pt);
}
-- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent { return YES; }
-- (BOOL)acceptsFirstResponder { return YES; }
-- (BOOL)becomeFirstResponder { return YES; }
+- (BOOL)acceptsFirstMouse:(NSEvent *)theEvent
+{
+ return [self.adapter mouseEnabled];
+}
+- (BOOL)acceptsFirstResponder {
+ return [self.adapter keyboardEnabled] || [self.adapter mouseEnabled];
+}
+
+- (BOOL)becomeFirstResponder {
+ return [self.adapter keyboardEnabled] || [self.adapter mouseEnabled];
+}
+
- (BOOL)resignFirstResponder { return YES; }
- (void)keyDown:(NSEvent *)event {
@@ -147,12 +162,16 @@
- (void)mouseEntered:(NSEvent *)event
{
- // do nothing!
+ [super mouseEntered:event];
}
- (void)mouseExited:(NSEvent *)event
{
- [self.adapter putKey:MP_KEY_MOUSE_LEAVE withModifiers:0];
+ if ([self.adapter mouseEnabled]) {
+ [self.adapter putKey:MP_KEY_MOUSE_LEAVE withModifiers:0];
+ } else {
+ [super mouseExited:event];
+ }
}
- (void)setFrameSize:(NSSize)size
@@ -183,14 +202,75 @@
[self.adapter signalMouseMovement:p];
}
-- (void)mouseMoved:(NSEvent *)event { [self signalMouseMovement:event]; }
-- (void)mouseDragged:(NSEvent *)event { [self signalMouseMovement:event]; }
-- (void)mouseDown:(NSEvent *)evt { [self mouseDownEvent:evt]; }
-- (void)mouseUp:(NSEvent *)evt { [self mouseUpEvent:evt]; }
-- (void)rightMouseDown:(NSEvent *)evt { [self mouseDownEvent:evt]; }
-- (void)rightMouseUp:(NSEvent *)evt { [self mouseUpEvent:evt]; }
-- (void)otherMouseDown:(NSEvent *)evt { [self mouseDownEvent:evt]; }
-- (void)otherMouseUp:(NSEvent *)evt { [self mouseUpEvent:evt]; }
+- (void)mouseMoved:(NSEvent *)event
+{
+ if ([self.adapter mouseEnabled]) {
+ [self signalMouseMovement:event];
+ } else {
+ [super mouseMoved:event];
+ }
+}
+
+- (void)mouseDragged:(NSEvent *)event
+{
+ if ([self.adapter mouseEnabled]) {
+ [self signalMouseMovement:event];
+ } else {
+ [super mouseDragged:event];
+ }
+}
+
+- (void)mouseDown:(NSEvent *)event
+{
+ if ([self.adapter mouseEnabled]) {
+ [self mouseDownEvent:event];
+ } else {
+ [super mouseDown:event];
+ }
+}
+- (void)mouseUp:(NSEvent *)event
+{
+ if ([self.adapter mouseEnabled]) {
+ [self mouseUpEvent:event];
+ } else {
+ [super mouseUp:event];
+ }
+}
+- (void)rightMouseDown:(NSEvent *)event
+{
+ if ([self.adapter mouseEnabled]) {
+ [self mouseDownEvent:event];
+ } else {
+ [super rightMouseUp:event];
+ }
+}
+
+- (void)rightMouseUp:(NSEvent *)event
+{
+ if ([self.adapter mouseEnabled]) {
+ [self mouseUpEvent:event];
+ } else {
+ [super rightMouseUp:event];
+ }
+}
+
+- (void)otherMouseDown:(NSEvent *)event
+{
+ if ([self.adapter mouseEnabled]) {
+ [self mouseDownEvent:event];
+ } else {
+ [super otherMouseDown:event];
+ }
+}
+
+- (void)otherMouseUp:(NSEvent *)event
+{
+ if ([self.adapter mouseEnabled]) {
+ [self mouseUpEvent:event];
+ } else {
+ [super otherMouseUp:event];
+ }
+}
- (void)preciseScroll:(NSEvent *)event
{
@@ -210,6 +290,11 @@
- (void)scrollWheel:(NSEvent *)event
{
+ if (![self.adapter mouseEnabled]) {
+ [super scrollWheel:event];
+ return;
+ }
+
if ([event hasPreciseScrollingDeltas]) {
[self preciseScroll:event];
} else {
diff --git a/video/out/cocoa/mpvadapter.h b/video/out/cocoa/mpvadapter.h
index 1355a5b345..30e2d572d8 100644
--- a/video/out/cocoa/mpvadapter.h
+++ b/video/out/cocoa/mpvadapter.h
@@ -31,6 +31,8 @@
- (void)didChangeWindowedScreenProfile:(NSScreen *)screen;
- (BOOL)isInFullScreenMode;
+- (BOOL)keyboardEnabled;
+- (BOOL)mouseEnabled;
- (NSScreen *)fsScreen;
@property(nonatomic, assign) struct vo *vout;
@end