kc->slot_locale_get_all = sd_bus_slot_unref(kc->slot_locale_get_all);
+ /* skip interface name */
+ r = sd_bus_message_skip(signal, "s");
+ if (r < 0)
+ goto error;
+
r = bus_message_map_properties_changed(bus, signal, kbdctx_locale_map, kc);
- if (r < 0) {
- log_debug("idev-keyboard: cannot handle PropertiesChanged from locale1: %s", strerror(-r));
- return r;
- }
+ if (r < 0)
+ goto error;
if (r > 0) {
r = kbdctx_query_locale(kc);
kbdctx_refresh_keymap(kc);
return 0;
+
+error:
+ log_debug("idev-keyboard: cannot handle PropertiesChanged from locale1: %s", strerror(-r));
+ return r;
}
static int kbdctx_setup_bus(kbdctx *kc) {
static void keyboard_free(idev_device *d) {
idev_keyboard *k = keyboard_from_device(d);
+ xkb_state_unref(k->xkb_state);
free(k->repdata.keyboard.codepoints);
free(k->repdata.keyboard.keysyms);
free(k->evdata.keyboard.codepoints);
const xkb_keysym_t *s;
int num;
- if (n_syms == 1 && syms[0] < 128)
+ if (n_syms == 1 && syms[0] < 128 && syms[0] > 0)
return syms[0];
keymap = xkb_state_get_keymap(state);
for (lo = 0; lo < n_lo; ++lo) {
lv = xkb_state_key_get_level(state, code + KBDXKB_SHIFT, lo);
num = xkb_keymap_key_get_syms_by_level(keymap, code + KBDXKB_SHIFT, lo, lv, &s);
- if (num == 1 && s[0] < 128)
+ if (num == 1 && s[0] < 128 && s[0] > 0)
return s[0];
}
/* TODO: update LEDs */
}
- if (num < 0)
+ if (num < 0) {
+ r = num;
goto error;
+ }
r = keyboard_fill(k, &k->evdata, data->resync, ev->code, ev->value, num, keysyms);
if (r < 0)