cocoa_common: implement VOCTRL_SET_CURSOR_VISIBILITY

Pass along cursor visibility hints to be more consistent with OSX's behaviour.
This commit is contained in:
Stefano Pigozzi 2013-05-17 00:29:42 +02:00 committed by wm4
parent ea8a8af3ec
commit e6a225d57a
1 changed files with 20 additions and 39 deletions

View File

@ -165,9 +165,6 @@ struct vo_cocoa_state {
struct aspect_data aspdat;
int display_cursor;
int cursor_timer;
int vo_cursor_autohide_delay;
bool will_make_front;
bool did_resize;
@ -199,8 +196,6 @@ static struct vo_cocoa_state *vo_cocoa_init_state(struct vo *vo)
.fullscreen_mask = NSBorderlessWindowMask,
.windowed_frame = {{0,0},{0,0}},
.out_fs_resize = NO,
.display_cursor = 1,
.vo_cursor_autohide_delay = vo->opts->cursor_autohide_delay,
.will_make_front = YES,
.power_mgmt_assertion = kIOPMNullAssertionID,
.accumulated_scroll = 0,
@ -275,11 +270,20 @@ int vo_cocoa_init(struct vo *vo)
return 1;
}
static void vo_cocoa_set_cursor_visibility(bool visible)
{
if (visible) {
CGDisplayShowCursor(kCGDirectMainDisplay);
} else {
CGDisplayHideCursor(kCGDirectMainDisplay);
}
}
void vo_cocoa_uninit(struct vo *vo)
{
dispatch_sync(dispatch_get_main_queue(), ^{
struct vo_cocoa_state *s = vo->cocoa;
CGDisplayShowCursor(kCGDirectMainDisplay);
vo_cocoa_set_cursor_visibility(true);
enable_power_management(vo);
[NSApp setPresentationOptions:NSApplicationPresentationDefault];
@ -596,35 +600,10 @@ void vo_cocoa_swap_buffers(struct vo *vo)
}
}
static void vo_cocoa_display_cursor(struct vo *vo, int requested_state)
{
struct vo_cocoa_state *s = vo->cocoa;
if (requested_state) {
if (!vo->opts->fs || s->vo_cursor_autohide_delay > -2) {
s->display_cursor = requested_state;
CGDisplayShowCursor(kCGDirectMainDisplay);
}
} else {
if (s->vo_cursor_autohide_delay != -1) {
s->display_cursor = requested_state;
CGDisplayHideCursor(kCGDirectMainDisplay);
}
}
}
int vo_cocoa_check_events(struct vo *vo)
{
struct vo_cocoa_state *s = vo->cocoa;
int ms_time = (int) ([[NSProcessInfo processInfo] systemUptime] * 1000);
// automatically hide mouse cursor
if (vo->opts->fs && s->display_cursor &&
(ms_time - s->cursor_timer >= s->vo_cursor_autohide_delay)) {
vo_cocoa_display_cursor(vo, 0);
s->cursor_timer = ms_time;
}
int key = cocoa_sync_get_key(s->input_queue);
if (key >= 0) mplayer_put_key(vo->key_fifo, key);
@ -673,6 +652,12 @@ int vo_cocoa_control(struct vo *vo, int *events, int request, void *arg)
case VOCTRL_UPDATE_SCREENINFO:
vo_cocoa_update_xinerama_info(vo);
return VO_TRUE;
case VOCTRL_SET_CURSOR_VISIBILITY: {
bool visible = *(bool *)arg;
if (vo->opts->fs)
vo_cocoa_set_cursor_visibility(visible);
return VO_TRUE;
}
case VOCTRL_PAUSE:
vo_cocoa_pause(vo);
return VO_TRUE;
@ -734,18 +719,18 @@ int vo_cocoa_cgl_color_size(struct vo *vo)
if (opts->native_fs) {
if (!opts->fs) {
opts->fs = VO_TRUE;
vo_cocoa_set_cursor_visibility(false);
[self setContentResizeIncrements:NSMakeSize(1, 1)];
vo_cocoa_display_cursor(self.videoOutput, 0);
} else {
opts->fs = VO_FALSE;
vo_cocoa_set_cursor_visibility(true);
[self setContentAspectRatio:s->current_video_size];
vo_cocoa_display_cursor(self.videoOutput, 1);
}
[self toggleFullScreen:nil];
} else {
if (!opts->fs) {
opts->fs = VO_TRUE;
vo_cocoa_set_cursor_visibility(false);
update_screen_info(self.videoOutput);
if (current_screen_has_dock_or_menubar(self.videoOutput))
[NSApp setPresentationOptions:
@ -755,9 +740,9 @@ int vo_cocoa_cgl_color_size(struct vo *vo)
[self setHasShadow:NO];
[self setStyleMask:s->fullscreen_mask];
[self setFrame:s->fsscreen_frame display:YES animate:NO];
vo_cocoa_display_cursor(self.videoOutput, 0);
} else {
opts->fs = VO_FALSE;
vo_cocoa_set_cursor_visibility(true);
[NSApp setPresentationOptions:NSApplicationPresentationDefault];
[self setHasShadow:YES];
[self setStyleMask:s->windowed_mask];
@ -768,7 +753,6 @@ int vo_cocoa_cgl_color_size(struct vo *vo)
s->out_fs_resize = NO;
}
[self setContentAspectRatio:s->current_video_size];
vo_cocoa_display_cursor(self.videoOutput, 1);
}
}
@ -827,9 +811,6 @@ int vo_cocoa_cgl_color_size(struct vo *vo)
- (void)mouseMoved: (NSEvent *) theEvent
{
if (self.videoOutput->opts->fs)
vo_cocoa_display_cursor(self.videoOutput, 1);
NSView *view = self.contentView;
NSPoint loc = [view convertPoint:[theEvent locationInWindow] fromView:nil];
NSRect bounds = [view bounds];