Fix LEDs state after suspend/resume
Resolves: https://issues.redhat.com/browse/RHEL-82085
This commit is contained in:
parent
820d90bbc5
commit
66596a1859
101
0001-dix-Force-update-LEDs-after-device-state-update-in-E.patch
Normal file
101
0001-dix-Force-update-LEDs-after-device-state-update-in-E.patch
Normal file
@ -0,0 +1,101 @@
|
||||
From 9c27c756438a62fdd768147d753b4c5fc731247b Mon Sep 17 00:00:00 2001
|
||||
From: Yao Wei <mwei@lxde.org>
|
||||
Date: Tue, 21 Feb 2023 03:43:05 +0000
|
||||
Subject: [PATCH xserver] dix: Force update LEDs after device state update in
|
||||
EnableDevice
|
||||
MIME-Version: 1.0
|
||||
Content-Type: text/plain; charset=UTF-8
|
||||
Content-Transfer-Encoding: 8bit
|
||||
|
||||
This is to make sure the hardware gets the device states regardless
|
||||
whether the internal state has changed or not, to overcome situations
|
||||
that device LEDs are out of sync e.g. switching between VTs.
|
||||
|
||||
Signed-off-by: Yao Wei (魏銘廷) <yao.wei@canonical.com>
|
||||
(cherry picked from commit 7ce57e179b257f35e447971f4fb6614e3360762a)
|
||||
---
|
||||
dix/devices.c | 4 ++++
|
||||
include/xkbsrv.h | 2 ++
|
||||
xkb/xkbLEDs.c | 38 ++++++++++++++++++++++++++++++++++++++
|
||||
3 files changed, 44 insertions(+)
|
||||
|
||||
diff --git a/dix/devices.c b/dix/devices.c
|
||||
index 00c453980..5629d9cf1 100644
|
||||
--- a/dix/devices.c
|
||||
+++ b/dix/devices.c
|
||||
@@ -426,6 +426,10 @@ EnableDevice(DeviceIntPtr dev, BOOL sendevent)
|
||||
|
||||
if (!IsMaster(dev) && !IsFloating(dev))
|
||||
XkbPushLockedStateToSlaves(GetMaster(dev, MASTER_KEYBOARD), 0, 0);
|
||||
+
|
||||
+ /* Now make sure our LEDs are in sync with the locked state */
|
||||
+ XkbForceUpdateDeviceLEDs(dev);
|
||||
+
|
||||
RecalculateMasterButtons(dev);
|
||||
|
||||
/* initialise an idle timer for this device*/
|
||||
diff --git a/include/xkbsrv.h b/include/xkbsrv.h
|
||||
index fbb5427e1..90a5e5327 100644
|
||||
--- a/include/xkbsrv.h
|
||||
+++ b/include/xkbsrv.h
|
||||
@@ -505,6 +505,8 @@ extern _X_EXPORT void XkbUpdateIndicators(DeviceIntPtr /* keybd */ ,
|
||||
XkbEventCausePtr /* cause */
|
||||
);
|
||||
|
||||
+extern void XkbForceUpdateDeviceLEDs(DeviceIntPtr /* keybd */);
|
||||
+
|
||||
extern _X_EXPORT void XkbUpdateAllDeviceIndicators(XkbChangesPtr /* changes */,
|
||||
XkbEventCausePtr /* cause */
|
||||
);
|
||||
diff --git a/xkb/xkbLEDs.c b/xkb/xkbLEDs.c
|
||||
index 5792d9fb7..3fb8fc526 100644
|
||||
--- a/xkb/xkbLEDs.c
|
||||
+++ b/xkb/xkbLEDs.c
|
||||
@@ -435,6 +435,44 @@ XkbUpdateIndicators(DeviceIntPtr dev,
|
||||
|
||||
/***====================================================================***/
|
||||
|
||||
+ /*
|
||||
+ * void
|
||||
+ * XkbForceUpdateDeviceLEDs(DeviceIntPtr dev)
|
||||
+ *
|
||||
+ * Force update LED states to the hardware from the device state
|
||||
+ * specified by 'dev'.
|
||||
+ *
|
||||
+ * If 'dev' is a master device, this function will also force update
|
||||
+ * its slave devices.
|
||||
+ *
|
||||
+ * Used if the actual LED state was externally set and need to push
|
||||
+ * current state to the hardware e.g. switching between VTs.
|
||||
+ */
|
||||
+
|
||||
+void
|
||||
+XkbForceUpdateDeviceLEDs(DeviceIntPtr dev)
|
||||
+{
|
||||
+ DeviceIntPtr master;
|
||||
+ XkbSrvLedInfoPtr sli;
|
||||
+
|
||||
+ if (!dev->key)
|
||||
+ return;
|
||||
+
|
||||
+ sli = XkbFindSrvLedInfo(dev, XkbDfltXIClass, XkbDfltXIId, 0);
|
||||
+ XkbDDXUpdateDeviceIndicators(dev, sli, sli->effectiveState);
|
||||
+
|
||||
+ if (IsMaster(dev)) {
|
||||
+ master = dev;
|
||||
+ nt_list_for_each_entry(dev, inputInfo.devices, next) {
|
||||
+ if (!dev->key || GetMaster(dev, MASTER_KEYBOARD) != master)
|
||||
+ continue;
|
||||
+
|
||||
+ sli = XkbFindSrvLedInfo(dev, XkbDfltXIClass, XkbDfltXIId, 0);
|
||||
+ XkbDDXUpdateDeviceIndicators(dev, sli, sli->effectiveState);
|
||||
+ }
|
||||
+ }
|
||||
+}
|
||||
+
|
||||
/***====================================================================***/
|
||||
|
||||
/*
|
||||
--
|
||||
2.48.1
|
||||
|
||||
@ -42,7 +42,7 @@
|
||||
Summary: X.Org X11 X server
|
||||
Name: xorg-x11-server
|
||||
Version: 1.20.11
|
||||
Release: 28%{?gitdate:.%{gitdate}}%{?dist}
|
||||
Release: 29%{?gitdate:.%{gitdate}}%{?dist}
|
||||
URL: http://www.x.org
|
||||
License: MIT
|
||||
|
||||
@ -121,6 +121,9 @@ Patch112: 0001-present-Check-for-NULL-to-prevent-crash.patch
|
||||
Patch113: 0001-modesetting-Fix-msSharePixmapBacking-Segfault-Regres.patch
|
||||
Patch114: 0001-present-Send-a-PresentConfigureNotify-event-for-dest.patch
|
||||
Patch115: 0001-xquartz-Remove-invalid-Unicode-sequence.patch
|
||||
# https://issues.redhat.com/browse/RHEL-82085
|
||||
# https://gitlab.freedesktop.org/xorg/xserver/-/merge_requests/1070
|
||||
Patch116: 0001-dix-Force-update-LEDs-after-device-state-update-in-E.patch
|
||||
|
||||
# CVE-2021-4011
|
||||
Patch10009: 0001-record-Fix-out-of-bounds-access-in-SwapCreateRegiste.patch
|
||||
@ -631,6 +634,10 @@ find %{inst_srcdir}/hw/xfree86 -name \*.c -delete
|
||||
|
||||
|
||||
%changelog
|
||||
* Fri Mar 21 2025 Olivier Fourdan <ofourdan@redhat.com> - 1.20.11-29
|
||||
- Fix LEDs state after suspend/resume
|
||||
Resolves: https://issues.redhat.com/browse/RHEL-82085
|
||||
|
||||
* Wed Feb 26 2025 Olivier Fourdan <ofourdan@redhat.com> - 1.20.11-28
|
||||
- CVE fix for: CVE-2025-26594 (RHEL-80201), CVE-2025-26595 (RHEL-80186),
|
||||
CVE-2025-26596 (RHEL-80188), CVE-2025-26597 (RHEL-80191),
|
||||
|
||||
Loading…
Reference in New Issue
Block a user