mirror of
https://github.com/mpv-player/mpv
synced 2024-08-20 08:55:06 +02:00
vo: change messy handling of fullscreen and other flags
Before this commit, all VOs had to toggle the option flag themselves, now command.c does it. I can't really comprehend why it required every VO to do this manually. Maybe it was for rejecting the property/option change if the VO didn't support a specific capability. But then it could have checked the VOCTRL result. In any case, I don't care, and successfully changing the property without doing anything (With some VOs) is fine too. Many things work this way now, and it's simpler overall. This change will be useful for cleaning up VO option handling.
This commit is contained in:
parent
af1379c43d
commit
4d75514321
@ -2352,18 +2352,13 @@ static int panscan_property_helper(void *ctx, struct m_property *prop,
|
||||
static int mp_property_vo_flag(struct m_property *prop, int action, void *arg,
|
||||
int vo_ctrl, int *vo_var, MPContext *mpctx)
|
||||
{
|
||||
if (action == M_PROPERTY_SET) {
|
||||
int desired = !!*(int *) arg;
|
||||
if (*vo_var == desired)
|
||||
return M_PROPERTY_OK;
|
||||
if (mpctx->video_out) {
|
||||
int old = *vo_var;
|
||||
int res = mp_property_generic_option(mpctx, prop, action, arg);
|
||||
if (action == M_PROPERTY_SET && old != *vo_var) {
|
||||
if (mpctx->video_out)
|
||||
vo_control(mpctx->video_out, vo_ctrl, 0);
|
||||
} else {
|
||||
*vo_var = desired;
|
||||
}
|
||||
return *vo_var == desired ? M_PROPERTY_OK : M_PROPERTY_ERROR;
|
||||
}
|
||||
return mp_property_generic_option(mpctx, prop, action, arg);
|
||||
return res;
|
||||
}
|
||||
|
||||
/// Fullscreen state (RW)
|
||||
|
@ -449,7 +449,6 @@ static int vo_cocoa_ontop(struct vo *vo)
|
||||
return VO_NOTIMPL;
|
||||
|
||||
struct mp_vo_opts *opts = vo->opts;
|
||||
opts->ontop = !opts->ontop;
|
||||
vo_set_level(vo, opts->ontop);
|
||||
return VO_TRUE;
|
||||
}
|
||||
@ -793,7 +792,6 @@ static int vo_cocoa_control_on_main_thread(struct vo *vo, int request, void *arg
|
||||
|
||||
switch (request) {
|
||||
case VOCTRL_FULLSCREEN:
|
||||
opts->fullscreen = !opts->fullscreen;
|
||||
return vo_cocoa_fullscreen(vo);
|
||||
case VOCTRL_ONTOP:
|
||||
return vo_cocoa_ontop(vo);
|
||||
|
@ -612,7 +612,6 @@ static int control(struct vo *vo, uint32_t request, void *data)
|
||||
|
||||
switch (request) {
|
||||
case VOCTRL_FULLSCREEN:
|
||||
vo->opts->fullscreen = !vo->opts->fullscreen;
|
||||
if (p->renderer_enabled)
|
||||
set_geometry(vo);
|
||||
vo->want_redraw = true;
|
||||
|
@ -975,7 +975,6 @@ static int control(struct vo *vo, uint32_t request, void *data)
|
||||
|
||||
switch (request) {
|
||||
case VOCTRL_FULLSCREEN:
|
||||
vo->opts->fullscreen = !vo->opts->fullscreen;
|
||||
set_fullscreen(vo);
|
||||
return 1;
|
||||
case VOCTRL_REDRAW_FRAME:
|
||||
|
@ -957,8 +957,9 @@ void vo_wayland_uninit(struct vo *vo)
|
||||
static void vo_wayland_ontop(struct vo *vo)
|
||||
{
|
||||
struct vo_wayland_state *wl = vo->wayland;
|
||||
if (!vo->opts->ontop)
|
||||
return;
|
||||
MP_DBG(wl, "going ontop\n");
|
||||
vo->opts->ontop = 1;
|
||||
window_set_toplevel(wl);
|
||||
schedule_resize(wl, 0, wl->window.width, wl->window.height);
|
||||
}
|
||||
@ -1046,7 +1047,6 @@ int vo_wayland_control(struct vo *vo, int *events, int request, void *arg)
|
||||
wl->window.events = 0;
|
||||
return VO_TRUE;
|
||||
case VOCTRL_FULLSCREEN:
|
||||
vo->opts->fullscreen = !vo->opts->fullscreen;
|
||||
vo_wayland_fullscreen(vo);
|
||||
return VO_TRUE;
|
||||
case VOCTRL_ONTOP:
|
||||
|
@ -1801,19 +1801,15 @@ int vo_x11_control(struct vo *vo, int *events, int request, void *arg)
|
||||
x11->pending_vo_events = 0;
|
||||
return VO_TRUE;
|
||||
case VOCTRL_FULLSCREEN:
|
||||
opts->fullscreen = !opts->fullscreen;
|
||||
vo_x11_fullscreen(vo);
|
||||
return VO_TRUE;
|
||||
case VOCTRL_ONTOP:
|
||||
opts->ontop = !opts->ontop;
|
||||
vo_x11_setlayer(vo, opts->ontop);
|
||||
return VO_TRUE;
|
||||
case VOCTRL_BORDER:
|
||||
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),
|
||||
|
Loading…
Reference in New Issue
Block a user