From 8a26e139af6e1534d63947d2ef0aed920248b051 Mon Sep 17 00:00:00 2001 From: wm4 Date: Mon, 2 May 2016 21:21:53 +0200 Subject: x11: extend --x11-bypass-compositor with fs-only option The "fs-only" choice sets the _NET_WM_BYPASS_COMPOSITOR to 1 if the window is fullscreened, and 0 otherwise. (0 is specified to be the implicit default - i.e. no change is requested in windowed mode.) In particular, change the default to "fs-only". Fixes #2582. --- video/out/x11_common.c | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) (limited to 'video/out/x11_common.c') diff --git a/video/out/x11_common.c b/video/out/x11_common.c index 034f785cbc..c42e78c97b 100644 --- a/video/out/x11_common.c +++ b/video/out/x11_common.c @@ -950,6 +950,21 @@ static int get_mods(unsigned int state) return modifiers; } +static void vo_x11_update_composition_hint(struct vo *vo) +{ + struct vo_x11_state *x11 = vo->x11; + + long hint = 0; + switch (vo->opts->x11_bypass_compositor) { + case 0: hint = 0; break; // leave default + case 1: hint = 1; break; // always bypass + case 2: hint = x11->fs ? 1 : 0; break; // bypass in FS + } + + XChangeProperty(x11->display, x11->window, XA(x11,_NET_WM_BYPASS_COMPOSITOR), + XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&hint, 1); +} + static void vo_x11_check_net_wm_state_fullscreen_change(struct vo *vo) { struct vo_x11_state *x11 = vo->x11; @@ -986,6 +1001,8 @@ static void vo_x11_check_net_wm_state_fullscreen_change(struct vo *vo) x11->size_changed_during_fs = false; x11->pos_changed_during_fs = false; + + vo_x11_update_composition_hint(vo); } } } @@ -1437,12 +1454,7 @@ static void vo_x11_create_window(struct vo *vo, XVisualInfo *vis, } if (!x11->parent) { - if (vo->opts->x11_bypass_compositor) { - long v = 1; // request disabling compositor - XChangeProperty(x11->display, x11->window, - XA(x11,_NET_WM_BYPASS_COMPOSITOR), XA_CARDINAL, 32, - PropModeReplace, (unsigned char *)&v, 1); - } + vo_x11_update_composition_hint(vo); vo_x11_set_wm_icon(x11); vo_x11_update_window_title(vo); vo_x11_dnd_init_window(vo); @@ -1485,6 +1497,8 @@ static void vo_x11_map_window(struct vo *vo, struct mp_rect rc) XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&v, 1); } + vo_x11_update_composition_hint(vo); + // map window int events = StructureNotifyMask | ExposureMask | PropertyChangeMask | LeaveWindowMask | EnterWindowMask; @@ -1731,6 +1745,8 @@ static void vo_x11_fullscreen(struct vo *vo) x11->size_changed_during_fs = false; x11->pos_changed_during_fs = false; + + vo_x11_update_composition_hint(vo); } int vo_x11_control(struct vo *vo, int *events, int request, void *arg) -- cgit v1.2.3