summaryrefslogtreecommitdiffstats
path: root/video/out/x11_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'video/out/x11_common.c')
-rw-r--r--video/out/x11_common.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/video/out/x11_common.c b/video/out/x11_common.c
index 868d0a1463..aa2185315e 100644
--- a/video/out/x11_common.c
+++ b/video/out/x11_common.c
@@ -26,6 +26,7 @@
#include "config.h"
#include "misc/bstr.h"
#include "options/options.h"
+#include "options/m_config.h"
#include "common/common.h"
#include "common/msg.h"
#include "input/input.h"
@@ -977,6 +978,17 @@ static void vo_x11_update_composition_hint(struct vo *vo)
XA_CARDINAL, 32, PropModeReplace, (unsigned char *)&hint, 1);
}
+// Maximally awful hack to get MPOpts.vo.fullscreen set. The awful part is that
+// this sets a variable which is accessed by command.c without synchronization
+// (and which isn't supposed to need any). The need for this is that there's no
+// way to update this flag in any other way at all.
+static void set_global_fs_flag(struct vo *vo, int fs)
+{
+ struct m_config *rootconfig = mp_get_root_config(vo->global);
+ struct MPOpts *opts = rootconfig->optstruct;
+ opts->vo->fullscreen = fs;
+}
+
static void vo_x11_check_net_wm_state_fullscreen_change(struct vo *vo)
{
struct vo_x11_state *x11 = vo->x11;
@@ -1002,6 +1014,7 @@ static void vo_x11_check_net_wm_state_fullscreen_change(struct vo *vo)
{
vo->opts->fullscreen = is_fullscreen;
x11->fs = is_fullscreen;
+ set_global_fs_flag(vo, is_fullscreen);
if (!is_fullscreen && (x11->pos_changed_during_fs ||
x11->size_changed_during_fs))