[PATCH xserver] xwayland: don't use logical size for RRMode

Simon Ser contact at emersion.fr
Sun Jul 8 12:59:28 UTC 2018


The logical size is the size of the output in the global compositor
space. The mode width/height shouldn't be transformed and scaled.

This fixes issues with pointer input on transformed outputs.

Signed-Off-By: Simon Ser <contact at emersion.fr>
---
 hw/xwayland/xwayland-output.c | 9 ++++++---
 hw/xwayland/xwayland.h        | 3 ++-
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c
index 379062549..44fd5c26a 100644
--- a/hw/xwayland/xwayland-output.c
+++ b/hw/xwayland/xwayland-output.c
@@ -113,12 +113,15 @@ output_handle_mode(void *data, struct wl_output *wl_output, uint32_t flags,
     if (!(flags & WL_OUTPUT_MODE_CURRENT))
         return;
 
+    xwl_output->mode_width = width;
+    xwl_output->mode_height = height;
+    xwl_output->mode_refresh = refresh;
+
     /* Apply the change from wl_output only if xdg-output is not supported */
     if (!xwl_output->xdg_output) {
         xwl_output->width = width;
         xwl_output->height = height;
     }
-    xwl_output->refresh = refresh;
 }
 
 static inline void
@@ -224,8 +227,8 @@ apply_output_change(struct xwl_output *xwl_output)
     /* xdg-output sends output size in compositor space. so already rotated */
     need_rotate = (xwl_output->xdg_output == NULL);
 
-    randr_mode = xwayland_cvt(xwl_output->width, xwl_output->height,
-                              xwl_output->refresh / 1000.0, 0, 0);
+    randr_mode = xwayland_cvt(xwl_output->mode_width, xwl_output->mode_height,
+                              xwl_output->mode_refresh / 1000.0, 0, 0);
     RROutputSetModes(xwl_output->randr_output, &randr_mode, 1, 1);
     RRCrtcNotify(xwl_output->randr_crtc, randr_mode,
                  xwl_output->x, xwl_output->y,
diff --git a/hw/xwayland/xwayland.h b/hw/xwayland/xwayland.h
index d70ad54bf..66daf58de 100644
--- a/hw/xwayland/xwayland.h
+++ b/hw/xwayland/xwayland.h
@@ -368,7 +368,8 @@ struct xwl_output {
     struct xwl_screen *xwl_screen;
     RROutputPtr randr_output;
     RRCrtcPtr randr_crtc;
-    int32_t x, y, width, height, refresh;
+    int32_t x, y, width, height;
+    int32_t mode_width, mode_height, mode_refresh;
     Rotation rotation;
     Bool wl_output_done;
     Bool xdg_output_done;
-- 
2.18.0




More information about the xorg-devel mailing list