From 40b6ad18d11c6e13f96ab44a6bce919e160cdb45 Mon Sep 17 00:00:00 2001 From: changlianzhi Date: Thu, 14 Oct 2021 11:36:41 +0800 Subject: [PATCH] fix: Fix the keyboard led light display problem When switching from tty to desktop, re-send the keyboard LED configuration to the kernel to avoid inconsistencies between the keyboard indicator status and the actual keyboard lock status. Signed-off-by: changlianzhi --- hw/xfree86/common/xf86Events.c | 1 + include/xkbsrv.h | 3 +++ xkb/xkbActions.c | 12 ++++++++++++ 3 files changed, 16 insertions(+) diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c index 05fa2bb90..53ddae432 100644 --- a/hw/xfree86/common/xf86Events.c +++ b/hw/xfree86/common/xf86Events.c @@ -485,6 +485,7 @@ xf86VTEnter(void) xf86UpdateHasVTProperty(TRUE); input_unlock(); + XkbPushLockedStateToAll(); } /* diff --git a/include/xkbsrv.h b/include/xkbsrv.h index fbb5427e1..69c9580ef 100644 --- a/include/xkbsrv.h +++ b/include/xkbsrv.h @@ -655,6 +655,9 @@ extern void XkbPushLockedStateToSlaves(DeviceIntPtr /* master */, int /* evtype */, int /* key */); +extern void XkbPushLockedStateToAll(void + ); + extern _X_EXPORT Bool XkbEnableDisableControls(XkbSrvInfoPtr /* xkbi */ , unsigned long /* change */ , unsigned long /* newValues */ , diff --git a/xkb/xkbActions.c b/xkb/xkbActions.c index db29091e7..c0a9464ab 100644 --- a/xkb/xkbActions.c +++ b/xkb/xkbActions.c @@ -1239,6 +1239,18 @@ XkbPushLockedStateToSlaves(DeviceIntPtr master, int evtype, int key) } } +void +XkbPushLockedStateToAll(void) +{ + DeviceIntPtr dev; + Bool genStateNotify; + + nt_list_for_each_entry(dev, inputInfo.devices, next) { + if (dev->kbdfeed) + (*dev->kbdfeed->CtrlProc) (dev, &dev->kbdfeed->ctrl); + } +} + static void XkbActionGetFilter(DeviceIntPtr dev, DeviceEvent *event, KeyCode key, XkbAction *act, int *sendEvent) -- GitLab