summaryrefslogtreecommitdiffstats
path: root/video
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-10-27 23:22:46 +0100
committerwm4 <wm4@nowhere>2013-11-02 19:03:40 +0100
commit131fad8bc94682fb81b6b331c9bf9e7aac09f1b7 (patch)
tree083ea3c9ed8fd031e4a0e99ed46532dc5bb91c99 /video
parent6af87017d167deab1f0271cbcf8b016fe38178cf (diff)
downloadmpv-131fad8bc94682fb81b6b331c9bf9e7aac09f1b7.tar.bz2
mpv-131fad8bc94682fb81b6b331c9bf9e7aac09f1b7.tar.xz
x11: fix border toggling
Trying to toggle the border during fullscreen (with "cycle border") would leave the window stuck without border, and it couldn't be restored. This was because vo_x11_decoration() always excepted to be called when toggling the state, and thus confusing the contents of the olddecor variable. Add got_motif_hints to hopefully prevent this. Also, when changing the border, don't take fs in account. May break on older/broken WMs, but all in all is in fact more robust and simpler, because you do not need to update the border state manually when returning from fullscreen.
Diffstat (limited to 'video')
-rw-r--r--video/out/x11_common.c5
-rw-r--r--video/out/x11_common.h2
2 files changed, 5 insertions, 2 deletions
diff --git a/video/out/x11_common.c b/video/out/x11_common.c
index 426b65b05a..50bd67921f 100644
--- a/video/out/x11_common.c
+++ b/video/out/x11_common.c
@@ -605,7 +605,7 @@ static void vo_x11_decoration(struct vo *vo, int d)
vo_MotifHints = XInternAtom(x11->display, "_MOTIF_WM_HINTS", 0);
if (vo_MotifHints != None) {
- if (!d) {
+ if (!x11->got_motif_hints) {
MotifWmHints *mhints = NULL;
XGetWindowProperty(x11->display, x11->window,
@@ -620,6 +620,7 @@ static void vo_x11_decoration(struct vo *vo, int d)
XFree(mhints);
}
}
+ x11->got_motif_hints = true;
memset(&vo_MotifWmHints, 0, sizeof(MotifWmHints));
vo_MotifWmHints.flags =
@@ -1498,7 +1499,7 @@ static void vo_x11_ontop(struct vo *vo)
static void vo_x11_border(struct vo *vo)
{
vo->opts->border = !vo->opts->border;
- vo_x11_decoration(vo, vo->opts->border && !vo->x11->fs);
+ vo_x11_decoration(vo, vo->opts->border);
}
int vo_x11_control(struct vo *vo, int *events, int request, void *arg)
diff --git a/video/out/x11_common.h b/video/out/x11_common.h
index 7cd848245d..0b22681731 100644
--- a/video/out/x11_common.h
+++ b/video/out/x11_common.h
@@ -90,8 +90,10 @@ struct vo_x11_state {
bool size_changed_during_fs;
bool pos_changed_during_fs;
+ bool got_motif_hints;
unsigned int olddecor;
unsigned int oldfuncs;
+
XComposeStatus compose_status;
/* XShm stuff */