Projects
openEuler:24.03:SP1:Everything
xorg-x11-server
_service:tar_scm:0021-xwayland-Fix-emulated-mod...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm:0021-xwayland-Fix-emulated-modes-not-being-removed-when-s.patch of Package xorg-x11-server
From 52bbef1f55d17229684b0d76a478ec639c4032ed Mon Sep 17 00:00:00 2001 From: Hans de Goede <hdegoede@redhat.com> Date: Mon, 7 Oct 2019 14:27:49 +0200 Subject: [PATCH xserver 21/24] xwayland: Fix emulated modes not being removed when screen rotation is used The code building the mode-list does the following to deal with screen rotation: if (need_rotate || xwl_output->rotation & (RR_Rotate_0 | RR_Rotate_180)) { mode_width = xwl_output->width; mode_height = xwl_output->height; } else { mode_width = xwl_output->height; mode_height = xwl_output->width; } This means we need to do something similar in xwl_output_set_emulated_mode() to determine if the mode being set is the actual (not-emulated) output mode and we this should remove any emulated modes set by the client. All callers of xwl_output_set_emulated_mode always pass a mode pointer to a member of xwl_output->randr_output->modes, so we do not need to duplicate this code, instead we can simply check that the passed in mode is modes[0] which always is the actual output mode. Acked-by: Olivier Fourdan <ofourdan@redhat.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> (cherry picked from commit 88342353de45e64f408c38bb10cd1506ba0f159a) --- hw/xwayland/xwayland-output.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/hw/xwayland/xwayland-output.c b/hw/xwayland/xwayland-output.c index 20c254962..7d705d919 100644 --- a/hw/xwayland/xwayland-output.c +++ b/hw/xwayland/xwayland-output.c @@ -309,8 +309,11 @@ xwl_output_remove_emulated_mode_for_client(struct xwl_output *xwl_output, struct xwl_emulated_mode *emulated_mode; emulated_mode = xwl_output_get_emulated_mode_for_client(xwl_output, client); - if (emulated_mode) + if (emulated_mode) { + DebugF("XWAYLAND: xwl_output_remove_emulated_mode: %dx%d\n", + emulated_mode->width, emulated_mode->height); memset(emulated_mode, 0, sizeof(*emulated_mode)); + } } /* From hw/xfree86/common/xf86DefModeSet.c with some obscure modes dropped */ @@ -511,7 +514,8 @@ xwl_output_set_emulated_mode(struct xwl_output *xwl_output, ClientPtr client, from_vidmode ? "vidmode" : "randr", mode->mode.width, mode->mode.height); - if (mode->mode.width == xwl_output->width && mode->mode.height == xwl_output->height) + /* modes[0] is the actual (not-emulated) output mode */ + if (mode == xwl_output->randr_output->modes[0]) xwl_output_remove_emulated_mode_for_client(xwl_output, client); else xwl_output_add_emulated_mode_for_client(xwl_output, client, mode, from_vidmode); -- 2.25.2
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.
浙ICP备2022010568号-2