summaryrefslogtreecommitdiffstats
path: root/video/out/x11_common.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-05-15 18:17:18 +0200
committerwm4 <wm4@nowhere>2013-05-26 16:44:18 +0200
commitbf10a4fdfa40cbe519e6ccb7fb895332da2021d1 (patch)
tree8ff3a3b2601c85291c5531e4d0dc88266a6b7ef6 /video/out/x11_common.c
parentc23bf5311fce3b59e9111e5de646ee57b48be27f (diff)
downloadmpv-bf10a4fdfa40cbe519e6ccb7fb895332da2021d1.tar.bz2
mpv-bf10a4fdfa40cbe519e6ccb7fb895332da2021d1.tar.xz
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.
Diffstat (limited to 'video/out/x11_common.c')
-rw-r--r--video/out/x11_common.c24
1 files changed, 24 insertions, 0 deletions
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();