x11: add --on-all-workspaces option and property

Fixes #1469.
This commit is contained in:
wm4 2015-01-16 23:38:47 +01:00
parent 5649658c4e
commit eb5a83e1c1
7 changed files with 33 additions and 3 deletions

View File

@ -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``.

View File

@ -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

View File

@ -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),

View File

@ -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;

View File

@ -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},

View File

@ -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*

View File

@ -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)