commit da620ad0dd9ca2e768f6d0289d25ecb51e2415d2
parent 943b164b4033d4e0c1b667bff9c086faf4007e78
Author: lumidify <nobody@lumidify.org>
Date: Thu, 21 Dec 2023 19:47:37 +0100
Fix keyboard handling when using xwayland
Diffstat:
M | ledit.c | | | 31 | +++++++++++++++++++++---------- |
1 file changed, 21 insertions(+), 10 deletions(-)
diff --git a/ledit.c b/ledit.c
@@ -490,17 +490,28 @@ mainloop(void) {
if (!test_extra && change_kbd) {
change_kbd = 0;
- XkbStateRec s;
- XkbGetState(common.dpy, XkbUseCoreKbd, &s);
- XkbDescPtr desc = XkbGetKeyboard(
- common.dpy, XkbAllComponentsMask, XkbUseCoreKbd
+ XkbDescPtr desc = XkbGetMap(
+ common.dpy, 0, XkbUseCoreKbd
);
- char *group = XGetAtomName(
- common.dpy, desc->names->groups[s.group]
- );
- change_keyboard(group);
- XFree(group);
- XkbFreeKeyboard(desc, XkbAllComponentsMask, True);
+ if (!desc || XkbGetNames(common.dpy, XkbGroupNamesMask, desc) != Success) {
+ /* FIXME: maybe show this as error message in windows */
+ fprintf(
+ stderr,
+ "Unable to obtain keyboard layout information.\n"
+ );
+ if (desc)
+ XkbFreeClientMap(desc, 0, True);
+ } else {
+ XkbStateRec s;
+ XkbGetState(common.dpy, XkbUseCoreKbd, &s);
+ char *group = XGetAtomName(
+ common.dpy, desc->names->groups[s.group]
+ );
+ change_keyboard(group);
+ XFree(group);
+ XkbFreeNames(desc, XkbGroupNamesMask, True);
+ XkbFreeClientMap(desc, 0, True);
+ }
}
redraw();