wlr_output: do not modeset to current mode

There is no point in modesetting an output to a mode that it is already
set to. Modesetting will cause the output to briefly flicker which is
undesirable for a noop. This prevents modesetting any wlr_output,
regardless of the backend, to it's currently set mode.
This commit is contained in:
Brian Ashworth 2019-02-16 18:09:41 -05:00 committed by emersion
parent 2d2c79e37c
commit 3c9f791d0e
1 changed files with 7 additions and 0 deletions

View File

@ -159,6 +159,9 @@ bool wlr_output_set_mode(struct wlr_output *output,
if (!output->impl || !output->impl->set_mode) { if (!output->impl || !output->impl->set_mode) {
return false; return false;
} }
if (output->current_mode == mode) {
return true;
}
return output->impl->set_mode(output, mode); return output->impl->set_mode(output, mode);
} }
@ -167,6 +170,10 @@ bool wlr_output_set_custom_mode(struct wlr_output *output, int32_t width,
if (!output->impl || !output->impl->set_custom_mode) { if (!output->impl || !output->impl->set_custom_mode) {
return false; return false;
} }
if (output->width == width && output->height == height &&
output->refresh == refresh) {
return true;
}
return output->impl->set_custom_mode(output, width, height, refresh); return output->impl->set_custom_mode(output, width, height, refresh);
} }