mirror of https://github.com/mpv-player/mpv
player: add window-id property
currently only supported on x11. one practical use-case of this is wanting to embed something (such as dmenu) into the mpv window to use as a menu/selection. there might be other use-cases as well (e.g doing some shenanigans with `xdotool` or whatnot). it's currently possible to: * listen for 'current-window-scale' change (to check if the window has been created or not) * call an external tool like `xdo` or `xdotool` and grab the xid from mpv's pid. however it adds unnecessary dependency on external tools when mpv is fully capable of easily providing this information. closes: #10918
This commit is contained in:
parent
4574dd5dc6
commit
25b66256d7
|
@ -2652,6 +2652,10 @@ Property list
|
|||
Any of these properties may be unavailable or set to dummy values if the
|
||||
VO window is not created or visible.
|
||||
|
||||
``window-id``
|
||||
Read-only - mpv's window id. May not always be available, i.e due to window
|
||||
not being opened yet or not being supported by the VO.
|
||||
|
||||
``mouse-pos``
|
||||
Read-only - last known mouse position, normalizd to OSD dimensions.
|
||||
|
||||
|
|
|
@ -1344,6 +1344,17 @@ static int mp_property_idle(void *ctx, struct m_property *prop,
|
|||
return m_property_flag_ro(action, arg, mpctx->stop_play == PT_STOP);
|
||||
}
|
||||
|
||||
static int mp_property_window_id(void *ctx, struct m_property *prop,
|
||||
int action, void *arg)
|
||||
{
|
||||
MPContext *mpctx = ctx;
|
||||
struct vo *vo = mpctx->video_out;
|
||||
int64_t wid;
|
||||
if (!vo || vo_control(vo, VOCTRL_GET_WINDOW_ID, &wid) <= 0)
|
||||
return M_PROPERTY_UNAVAILABLE;
|
||||
return m_property_int64_ro(action, arg, wid);
|
||||
}
|
||||
|
||||
static int mp_property_eof_reached(void *ctx, struct m_property *prop,
|
||||
int action, void *arg)
|
||||
{
|
||||
|
@ -3616,6 +3627,7 @@ static const struct m_property mp_properties_base[] = {
|
|||
{"seekable", mp_property_seekable},
|
||||
{"partially-seekable", mp_property_partially_seekable},
|
||||
{"idle-active", mp_property_idle},
|
||||
{"window-id", mp_property_window_id},
|
||||
|
||||
{"chapter-list", mp_property_list_chapters},
|
||||
{"track-list", property_list_tracks},
|
||||
|
|
|
@ -126,6 +126,7 @@ enum mp_voctrl {
|
|||
VOCTRL_GET_DISPLAY_FPS, // double*
|
||||
VOCTRL_GET_HIDPI_SCALE, // double*
|
||||
VOCTRL_GET_DISPLAY_RES, // int[2]
|
||||
VOCTRL_GET_WINDOW_ID, // int64_t*
|
||||
|
||||
/* private to vo_gpu and vo_gpu_next */
|
||||
VOCTRL_EXTERNAL_RESIZE,
|
||||
|
|
|
@ -2118,6 +2118,12 @@ int vo_x11_control(struct vo *vo, int *events, int request, void *arg)
|
|||
((int *)arg)[1] = selected_disp->rc.y1 - selected_disp->rc.y0;
|
||||
return VO_TRUE;
|
||||
}
|
||||
case VOCTRL_GET_WINDOW_ID: {
|
||||
if (!x11->window)
|
||||
return VO_NOTAVAIL;
|
||||
*(int64_t *)arg = x11->window;
|
||||
return VO_TRUE;
|
||||
}
|
||||
case VOCTRL_GET_HIDPI_SCALE:
|
||||
*(double *)arg = x11->dpi_scale;
|
||||
return VO_TRUE;
|
||||
|
|
Loading…
Reference in New Issue