diff options
author | wm4 <wm4@nowhere> | 2015-01-04 03:57:50 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2015-01-04 03:57:50 +0100 |
commit | 2b0fce56a225a24e9105f91fa1505d8eda8b9523 (patch) | |
tree | 52afdf9c8de258d702e8e36dc0e8d69fec186e81 /video/out | |
parent | fda44ecc923f0b5049d41bfcb785b382b0003e74 (diff) | |
download | mpv-2b0fce56a225a24e9105f91fa1505d8eda8b9523.tar.bz2 mpv-2b0fce56a225a24e9105f91fa1505d8eda8b9523.tar.xz |
x11: make display-names property stricter
Returning the property before the window is mapped could lead to
confusing behavior, and in particular strange differences between
vo_vdpau and vo_opengl. (vo_opengl creates the window right at the
start, while vdpau waits until the first reconfigure event.) It might
even be possible that for vo_opengl random results were returned,
because the hidden window can have different placement than the actual,
final one on initial video reconfig.
Fix this by returning the property only if the window is considered
mapped. command.c handles this case specifically, and makes the property
unavailable, instead of returning an empty list.
Diffstat (limited to 'video/out')
-rw-r--r-- | video/out/x11_common.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/video/out/x11_common.c b/video/out/x11_common.c index 75d36e15ab..2c670ac0f7 100644 --- a/video/out/x11_common.c +++ b/video/out/x11_common.c @@ -1599,7 +1599,7 @@ int vo_x11_control(struct vo *vo, int *events, int request, void *arg) return VO_TRUE; } case VOCTRL_GET_WIN_STATE: { - if (!x11->window) + if (!x11->pseudo_mapped) return VO_FALSE; int num_elems; long *elems = x11_get_property(x11, x11->window, XA(x11, _NET_WM_STATE), @@ -1615,6 +1615,8 @@ int vo_x11_control(struct vo *vo, int *events, int request, void *arg) return VO_TRUE; } case VOCTRL_GET_DISPLAY_NAMES: { + if (!x11->pseudo_mapped) + return VO_FALSE; char **names = NULL; int displays_spanned = 0; for (int n = 0; n < x11->num_displays; n++) { |