summaryrefslogtreecommitdiffstats
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
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.
-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 */