mirror of https://github.com/mpv-player/mpv
cocoa: hide cursor using a blank image instead of a system-wide API
Fixes #503
This commit is contained in:
parent
f6a354e846
commit
533e151feb
|
@ -18,9 +18,9 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#import <Cocoa/Cocoa.h>
|
#import <Cocoa/Cocoa.h>
|
||||||
#import <CoreServices/CoreServices.h> // for CGDisplayHideCursor
|
|
||||||
#import <IOKit/pwr_mgt/IOPMLib.h>
|
#import <IOKit/pwr_mgt/IOPMLib.h>
|
||||||
#import <IOKit/IOKitLib.h>
|
#import <IOKit/IOKitLib.h>
|
||||||
|
#import <AppKit/AppKit.h>
|
||||||
#include <mach/mach.h>
|
#include <mach/mach.h>
|
||||||
|
|
||||||
#import "cocoa_common.h"
|
#import "cocoa_common.h"
|
||||||
|
@ -104,6 +104,8 @@ struct vo_cocoa_state {
|
||||||
bool vo_ready; // the VO is in a state in which it can
|
bool vo_ready; // the VO is in a state in which it can
|
||||||
// render frames
|
// render frames
|
||||||
int frame_w, frame_h; // dimensions of the frame rendered
|
int frame_w, frame_h; // dimensions of the frame rendered
|
||||||
|
|
||||||
|
NSCursor *blankCursor;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void run_on_main_thread(struct vo *vo, void(^block)(void))
|
static void run_on_main_thread(struct vo *vo, void(^block)(void))
|
||||||
|
@ -254,6 +256,11 @@ int vo_cocoa_init(struct vo *vo)
|
||||||
.log = mp_log_new(s, vo->log, "cocoa"),
|
.log = mp_log_new(s, vo->log, "cocoa"),
|
||||||
.embedded = vo->opts->WinID >= 0,
|
.embedded = vo->opts->WinID >= 0,
|
||||||
};
|
};
|
||||||
|
if (!s->embedded) {
|
||||||
|
NSImage* blankImage = [[NSImage alloc] initWithSize:NSMakeSize(1, 1)];
|
||||||
|
s->blankCursor = [[NSCursor alloc] initWithImage:blankImage hotSpot:NSZeroPoint];
|
||||||
|
[blankImage release];
|
||||||
|
}
|
||||||
pthread_mutex_init(&s->lock, NULL);
|
pthread_mutex_init(&s->lock, NULL);
|
||||||
pthread_cond_init(&s->wakeup, NULL);
|
pthread_cond_init(&s->wakeup, NULL);
|
||||||
vo->cocoa = s;
|
vo->cocoa = s;
|
||||||
|
@ -271,9 +278,9 @@ static int vo_cocoa_set_cursor_visibility(struct vo *vo, bool *visible)
|
||||||
MpvEventsView *v = (MpvEventsView *) s->view;
|
MpvEventsView *v = (MpvEventsView *) s->view;
|
||||||
|
|
||||||
if (*visible) {
|
if (*visible) {
|
||||||
CGDisplayShowCursor(kCGDirectMainDisplay);
|
[[NSCursor arrowCursor] set];
|
||||||
} else if ([v canHideCursor]) {
|
} else if ([v canHideCursor] && s->blankCursor) {
|
||||||
CGDisplayHideCursor(kCGDirectMainDisplay);
|
[s->blankCursor set];
|
||||||
} else {
|
} else {
|
||||||
*visible = true;
|
*visible = true;
|
||||||
}
|
}
|
||||||
|
@ -310,6 +317,9 @@ void vo_cocoa_uninit(struct vo *vo)
|
||||||
if (s->window)
|
if (s->window)
|
||||||
[s->window release];
|
[s->window release];
|
||||||
|
|
||||||
|
if (!s->embedded)
|
||||||
|
[s->blankCursor release];
|
||||||
|
|
||||||
pthread_cond_destroy(&s->wakeup);
|
pthread_cond_destroy(&s->wakeup);
|
||||||
pthread_mutex_destroy(&s->lock);
|
pthread_mutex_destroy(&s->lock);
|
||||||
talloc_free(s);
|
talloc_free(s);
|
||||||
|
|
Loading…
Reference in New Issue