summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2015-01-16 23:38:47 +0100
committerwm4 <wm4@nowhere>2015-01-16 23:38:47 +0100
commiteb5a83e1c110234b3e835b7a76d83e1ddaa7bfb5 (patch)
tree16189fc460f5f2fb5cc9920a8d1e72a0e18f7fcc
parent5649658c4e12eb98af9da3a21b644c40cd1b2313 (diff)
downloadmpv-eb5a83e1c110234b3e835b7a76d83e1ddaa7bfb5.tar.bz2
mpv-eb5a83e1c110234b3e835b7a76d83e1ddaa7bfb5.tar.xz
x11: add --on-all-workspaces option and property
Fixes #1469.
-rw-r--r--DOCS/man/input.rst3
-rw-r--r--DOCS/man/options.rst4
-rw-r--r--options/options.c1
-rw-r--r--options/options.h4
-rw-r--r--player/command.c9
-rw-r--r--video/out/vo.h5
-rw-r--r--video/out/x11_common.c10
7 files changed, 33 insertions, 3 deletions
diff --git a/DOCS/man/input.rst b/DOCS/man/input.rst
index 2751c7348f..4ec29ba62d 100644
--- a/DOCS/man/input.rst
+++ b/DOCS/man/input.rst
@@ -1066,6 +1066,9 @@ Property list
``border`` (RW)
See ``--border``.
+``on-all-workspaces`` (RW)
+ See ``--on-all-workspaces``. Unsetting may not work on all WMs.
+
``framedrop`` (RW)
See ``--framedrop``.
diff --git a/DOCS/man/options.rst b/DOCS/man/options.rst
index b8d521eca6..ce57228c41 100644
--- a/DOCS/man/options.rst
+++ b/DOCS/man/options.rst
@@ -1548,6 +1548,10 @@ Window
Play video with window border and decorations. Since this is on by
default, use ``--no-border`` to disable the standard window decorations.
+``--on-all-workspaces``
+ (X11 only)
+ Show the video window on all virtual desktops.
+
``--geometry=<[W[xH]][+-x+-y]>``, ``--geometry=<x:y>``
Adjust the initial window position or size. ``W`` and ``H`` set the window
size in pixels. ``x`` and ``y`` set the window position, measured in pixels
diff --git a/options/options.c b/options/options.c
index 9033241605..aeec497b84 100644
--- a/options/options.c
+++ b/options/options.c
@@ -370,6 +370,7 @@ const m_option_t mp_opts[] = {
OPT_FLAG("force-window", force_vo, CONF_GLOBAL),
OPT_FLAG("ontop", vo.ontop, M_OPT_FIXED),
OPT_FLAG("border", vo.border, M_OPT_FIXED),
+ OPT_FLAG("on-all-workspaces", vo.all_workspaces, M_OPT_FIXED),
OPT_FLAG("window-dragging", allow_win_drag, CONF_GLOBAL),
diff --git a/options/options.h b/options/options.h
index 3784cf5546..00b4b588dd 100644
--- a/options/options.h
+++ b/options/options.h
@@ -10,6 +10,9 @@ typedef struct mp_vo_opts {
int ontop;
int fullscreen;
+ int border;
+ int all_workspaces;
+
int screen_id;
int fsscreen_id;
int fs_black_out_screens;
@@ -30,7 +33,6 @@ typedef struct mp_vo_opts {
int keepaspect;
int keepaspect_window;
- int border;
int64_t WinID;
diff --git a/player/command.c b/player/command.c
index 14b3cac7c2..bfdc823018 100644
--- a/player/command.c
+++ b/player/command.c
@@ -2272,6 +2272,14 @@ static int mp_property_border(void *ctx, struct m_property *prop,
&mpctx->opts->vo.border, mpctx);
}
+static int mp_property_all_workspaces(void *ctx, struct m_property *prop,
+ int action, void *arg)
+{
+ MPContext *mpctx = ctx;
+ return mp_property_vo_flag(prop, action, arg, VOCTRL_ALL_WORKSPACES,
+ &mpctx->opts->vo.all_workspaces, mpctx);
+}
+
static int get_frame_count(struct MPContext *mpctx)
{
struct demuxer *demuxer = mpctx->demuxer;
@@ -3309,6 +3317,7 @@ static const struct m_property mp_properties[] = {
{"colormatrix-primaries", mp_property_primaries},
{"ontop", mp_property_ontop},
{"border", mp_property_border},
+ {"on-all-workspaces", mp_property_all_workspaces},
{"framedrop", mp_property_framedrop},
{"gamma", mp_property_video_color},
{"brightness", mp_property_video_color},
diff --git a/video/out/vo.h b/video/out/vo.h
index 20223493cd..5d136432e3 100644
--- a/video/out/vo.h
+++ b/video/out/vo.h
@@ -47,8 +47,6 @@ enum mp_voctrl {
VOCTRL_RESET = 1,
/* Handle input and redraw events, called by vo_check_events() */
VOCTRL_CHECK_EVENTS,
- /* used to switch to fullscreen */
- VOCTRL_FULLSCREEN,
/* signal a device pause */
VOCTRL_PAUSE,
/* start/resume playback */
@@ -68,8 +66,11 @@ enum mp_voctrl {
// be updated and redrawn.
VOCTRL_REDRAW_FRAME,
+ VOCTRL_FULLSCREEN,
VOCTRL_ONTOP,
VOCTRL_BORDER,
+ VOCTRL_ALL_WORKSPACES,
+
VOCTRL_UPDATE_WINDOW_TITLE, // char*
VOCTRL_SET_CURSOR_VISIBILITY, // bool*
diff --git a/video/out/x11_common.c b/video/out/x11_common.c
index e280349d24..be1f1b74ed 100644
--- a/video/out/x11_common.c
+++ b/video/out/x11_common.c
@@ -1619,6 +1619,16 @@ int vo_x11_control(struct vo *vo, int *events, int request, void *arg)
opts->border = !opts->border;
vo_x11_decoration(vo, vo->opts->border);
return VO_TRUE;
+ case VOCTRL_ALL_WORKSPACES: {
+ opts->all_workspaces = !opts->all_workspaces;
+ long params[5] = {0xFFFFFFFF, 1};
+ if (!opts->all_workspaces) {
+ x11_get_property_copy(x11, x11->rootwin, XA(x11, _NET_CURRENT_DESKTOP),
+ XA_CARDINAL, 32, &params[0], sizeof(params[0]));
+ }
+ x11_send_ewmh_msg(x11, "_NET_WM_DESKTOP", params);
+ return VO_TRUE;
+ }
case VOCTRL_GET_UNFS_WINDOW_SIZE: {
int *s = arg;
if (!x11->window)