From bf10a4fdfa40cbe519e6ccb7fb895332da2021d1 Mon Sep 17 00:00:00 2001 From: wm4 Date: Wed, 15 May 2013 18:17:18 +0200 Subject: video/out: introduce vo_control for gl_common based VOs Instead of having separate callbacks for each backend-handled feature (like MPGLContext.fullscreen, MPGLContext.border, etc.), pass the VOCTRL responsible for this directly to the backend. This allows removing a bunch of callbacks, that currently must be set even for optional/lesser features (like VOCTRL_BORDER). This requires changes to all VOs using gl_common, as well as all backends that support gl_common. Also introduce VOCTRL_CHECK_EVENTS. vo.check_events is now optional. VO backends can use VOCTRL_CHECK_EVENTS instead to implementing check_events. This has the advantage that the event handling code in VOs doesn't have to be duplicated if vo_control() is used. --- video/out/x11_common.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'video/out/x11_common.c') diff --git a/video/out/x11_common.c b/video/out/x11_common.c index c5da9ad055..b9625879e8 100644 --- a/video/out/x11_common.c +++ b/video/out/x11_common.c @@ -1385,6 +1385,30 @@ void vo_x11_border(struct vo *vo) vo_x11_decoration(vo, vo->opts->border && !vo->opts->fs); } +int vo_x11_control(struct vo *vo, int *events, int request, void *arg) +{ + switch (request) { + case VOCTRL_CHECK_EVENTS: + *events |= vo_x11_check_events(vo); + return VO_TRUE; + case VOCTRL_FULLSCREEN: + vo_x11_fullscreen(vo); + *events |= VO_EVENT_RESIZE; + return VO_TRUE; + case VOCTRL_ONTOP: + vo_x11_ontop(vo); + return VO_TRUE; + case VOCTRL_BORDER: + vo_x11_border(vo); + *events |= VO_EVENT_RESIZE; + return VO_TRUE; + case VOCTRL_UPDATE_SCREENINFO: + vo_x11_update_screeninfo(vo); + return VO_TRUE; + } + return VO_NOTIMPL; +} + static void xscreensaver_heartbeat(struct vo_x11_state *x11) { unsigned int time = GetTimerMS(); -- cgit v1.2.3