From a054532668cbbb152d0d7acfcce1e03e884bb491 Mon Sep 17 00:00:00 2001 From: Jason Ekstrand Date: Tue, 20 Feb 2018 09:41:39 -0800 Subject: [PATCH] xwayland: Fix backwards need_rotate logic (v2) When xdg_output support was added to Xwayland, need_rotate parameter was added to output_get_new_size where true gave you the old pre-xdg_output behavior and false gave the new behavior. Unfortunately, the two places where this is called, need_rotate was set backwards. This caused input get clampped to the wrong dimensions. Also, the logic for deciding whether or not to flip was wrong because, if need_rotate was false, it would always flip which is not what you want. v2 (Daniel Stone): - Fix output_get_new_size so that it doesn't flip the dimensions when need_rotate is false. Signed-off-by: Jason Ekstrand Reviewed-by: Daniel Stone Reviewed-by: Olivier Fourdan --- hw/xwayland/xwayland-output.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c index c59389617..48faeb142 100644 --- a/hw/xwayland/xwayland-output.c +++ b/hw/xwayland/xwayland-output.c @@ -126,7 +126,7 @@ output_get_new_size(struct xwl_output *xwl_output, { int output_width, output_height; - if (need_rotate && (xwl_output->rotation & (RR_Rotate_0 | RR_Rotate_180))) { + if (!need_rotate || (xwl_output->rotation & (RR_Rotate_0 | RR_Rotate_180))) { output_width = xwl_output->width; output_height = xwl_output->height; } else { @@ -220,7 +220,7 @@ apply_output_change(struct xwl_output *xwl_output) xwl_output->xdg_output_done = FALSE; /* xdg-output sends output size in compositor space. so already rotated */ - need_rotate = (xwl_output->xdg_output != NULL); + need_rotate = (xwl_output->xdg_output == NULL); randr_mode = xwayland_cvt(xwl_output->width, xwl_output->height, xwl_output->refresh / 1000.0, 0, 0); @@ -390,7 +390,7 @@ xwl_output_remove(struct xwl_output *xwl_output) struct xwl_output *it; struct xwl_screen *xwl_screen = xwl_output->xwl_screen; int width = 0, height = 0; - Bool need_rotate = (xwl_output->xdg_output != NULL); + Bool need_rotate = (xwl_output->xdg_output == NULL); RRCrtcDestroy(xwl_output->randr_crtc); RROutputDestroy(xwl_output->randr_output);