summaryrefslogtreecommitdiffstats
path: root/mpvcore/mplayer.c
diff options
context:
space:
mode:
Diffstat (limited to 'mpvcore/mplayer.c')
-rw-r--r--mpvcore/mplayer.c41
1 files changed, 23 insertions, 18 deletions
diff --git a/mpvcore/mplayer.c b/mpvcore/mplayer.c
index 3a2b65b31c..c9b51c8272 100644
--- a/mpvcore/mplayer.c
+++ b/mpvcore/mplayer.c
@@ -2402,10 +2402,7 @@ int reinit_video_chain(struct MPContext *mpctx)
"the selected video_out (-vo) device.\n");
goto err_out;
}
- if (opts->cursor_autohide_delay != -1) {
- vo_control(mpctx->video_out, VOCTRL_SET_CURSOR_VISIBILITY,
- &(bool){false});
- }
+ mpctx->mouse_cursor_visible = true;
mpctx->initialized_flags |= INITIALIZED_VO;
}
@@ -3454,25 +3451,33 @@ static void run_playloop(struct MPContext *mpctx)
// ================================================================
vo_check_events(vo);
+ bool mouse_cursor_visible = mpctx->mouse_cursor_visible;
+ if (opts->cursor_autohide_delay == -1)
+ mouse_cursor_visible = true;
+
unsigned mouse_event_ts = mp_input_get_mouse_event_counter(mpctx->input);
if (mpctx->mouse_event_ts != mouse_event_ts) {
mpctx->mouse_event_ts = mouse_event_ts;
- if (opts->cursor_autohide_delay > -1) {
- vo_control(vo, VOCTRL_SET_CURSOR_VISIBILITY, &(bool){true});
- if (opts->cursor_autohide_delay >= 0) {
- mpctx->mouse_waiting_hide = 1;
- mpctx->mouse_timer =
- mp_time_sec() + opts->cursor_autohide_delay / 1000.0;
- }
- }
+ mpctx->mouse_timer =
+ mp_time_sec() + opts->cursor_autohide_delay / 1000.0;
+ mouse_cursor_visible = true;
}
- if (mpctx->mouse_waiting_hide == 1 &&
- mp_time_sec() >= mpctx->mouse_timer)
- {
- vo_control(vo, VOCTRL_SET_CURSOR_VISIBILITY, &(bool){false});
- mpctx->mouse_waiting_hide = 2;
- }
+ if (mp_time_sec() >= mpctx->mouse_timer)
+ mouse_cursor_visible = false;
+
+ if (opts->cursor_autohide_delay == -1)
+ mouse_cursor_visible = true;
+
+ if (opts->cursor_autohide_delay == -2)
+ mouse_cursor_visible = false;
+
+ if (opts->cursor_autohide_fs && !opts->vo.fullscreen)
+ mouse_cursor_visible = true;
+
+ if (mouse_cursor_visible != mpctx->mouse_cursor_visible)
+ vo_control(vo, VOCTRL_SET_CURSOR_VISIBILITY, &mouse_cursor_visible);
+ mpctx->mouse_cursor_visible = mouse_cursor_visible;
if (opts->heartbeat_cmd) {
double now = mp_time_sec();