diff --git a/hw/xwayland/man/Xwayland.man b/hw/xwayland/man/Xwayland.man index 15eb7f5f4..2ceec9432 100644 --- a/hw/xwayland/man/Xwayland.man +++ b/hw/xwayland/man/Xwayland.man @@ -71,6 +71,10 @@ Disable touch pointer emulation. This allows the Wayland compositor to implement its own pointer emulation mechanism for X11 clients that don't support touch input. .TP 8 +.B \-force-xrandr-emulation +Force additional non-native modes to be exposed when viewporter is not +supported by the Wayland compositor. +.TP 8 .B \-rootless Run \fIXwayland\fP rootless, so that X clients integrate seamlessly with Wayland clients in a Wayland desktop. That requires the Wayland server diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c index 927d97194..58764b7c3 100644 --- a/hw/xwayland/xwayland-output.c +++ b/hw/xwayland/xwayland-output.c @@ -355,7 +355,7 @@ output_get_rr_modes(struct xwl_output *xwl_output, *count = 1; - if (!xwl_screen_has_resolution_change_emulation(xwl_screen)) + if (!xwl_screen_has_resolution_change_emulation(xwl_screen) && !xwl_screen->force_xrandr_emulation) return rr_modes; /* Add fake modes */ diff --git a/hw/xwayland/xwayland-screen.c b/hw/xwayland/xwayland-screen.c index 5c8b388f0..d6e19282c 100644 --- a/hw/xwayland/xwayland-screen.c +++ b/hw/xwayland/xwayland-screen.c @@ -643,6 +643,9 @@ xwl_screen_init(ScreenPtr pScreen, int argc, char **argv) ErrorF("xwayland glamor: this build does not have EGLStream support\n"); #endif } + else if (strcmp(argv[i], "-force-xrandr-emulation") == 0) { + xwl_screen->force_xrandr_emulation = 1; + } } #ifdef XWL_HAS_GLAMOR diff --git a/hw/xwayland/xwayland-screen.h b/hw/xwayland/xwayland-screen.h index f04d431c7..f8aee2bdc 100644 --- a/hw/xwayland/xwayland-screen.h +++ b/hw/xwayland/xwayland-screen.h @@ -56,6 +56,7 @@ struct xwl_screen { int rootless; int glamor; int present; + int force_xrandr_emulation; CreateScreenResourcesProcPtr CreateScreenResources; CloseScreenProcPtr CloseScreen; diff --git a/hw/xwayland/xwayland.c b/hw/xwayland/xwayland.c index 603e8be4f..6cc5f8e0f 100644 --- a/hw/xwayland/xwayland.c +++ b/hw/xwayland/xwayland.c @@ -102,6 +102,7 @@ ddxUseMsg(void) ErrorF("-verbose [n] verbose startup messages\n"); ErrorF("-version show the server version and exit\n"); ErrorF("-noTouchPointerEmulation disable touch pointer emulation\n"); + ErrorF("-force-xrandr-emulation force non-native modes to be exposed when viewporter is not exposed by the compositor\n"); } static int init_fd = -1; diff --git a/hw/xwayland/xwayland.pc.in b/hw/xwayland/xwayland.pc.in index 9d727b002..e2c06b801 100644 --- a/hw/xwayland/xwayland.pc.in +++ b/hw/xwayland/xwayland.pc.in @@ -12,3 +12,4 @@ have_listenfd=true have_verbose=true have_terminate_delay=true have_no_touch_pointer_emulation=true +have_force_xrandr_emulation=true