diff options
author | wm4 <wm4@nowhere> | 2013-10-27 23:22:46 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2013-10-27 23:22:46 +0100 |
commit | f2d438a1fd395fff0304594c35d46a3891d0ad65 (patch) | |
tree | 0366d92583bc31a369f80b2457da26f0d77c5a59 | |
parent | 6e1eb8add9d8612ad0262660e77eaae006d4fc55 (diff) | |
download | mpv-f2d438a1fd395fff0304594c35d46a3891d0ad65.tar.bz2 mpv-f2d438a1fd395fff0304594c35d46a3891d0ad65.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.c | 5 | ||||
-rw-r--r-- | video/out/x11_common.h | 2 |
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 */ |