[systemd-commits] src/libsystemd-terminal

David Herrmann dvdhrm at kemper.freedesktop.org
Sun Oct 5 09:04:40 PDT 2014


 src/libsystemd-terminal/evcat.c |    7 +++++++
 src/libsystemd-terminal/idev.h  |    2 +-
 2 files changed, 8 insertions(+), 1 deletion(-)

New commits:
commit 62d5068d631fd655efe3ae4ad51fffe28e13e27a
Author: David Herrmann <dh.herrmann at gmail.com>
Date:   Sun Oct 5 17:44:09 2014 +0200

    terminal/idev: don't remove consumed-mods from kbd-matches
    
    XKB consumed mods include modifiers that *didn't* affect the translation,
    but might affect it if used. This is very misleading, given that we are
    usually not interested in that information. Therefore, keep them in real
    mods to behave like X11 does. Maybe at some point, XKB introduces proper
    shortcut matching...
    
    Also make evcat display consumed modifiers so we can better debug those
    situations.

diff --git a/src/libsystemd-terminal/evcat.c b/src/libsystemd-terminal/evcat.c
index 62556f6..9e8a262 100644
--- a/src/libsystemd-terminal/evcat.c
+++ b/src/libsystemd-terminal/evcat.c
@@ -219,6 +219,13 @@ static void kdata_print(idev_data *data) {
         printf(" %-5s", (k->mods & IDEV_KBDMOD_LINUX) ? "LINUX" : "");
         printf(" %-4s", (k->mods & IDEV_KBDMOD_CAPS) ? "CAPS" : "");
 
+        /* Consumed modifiers */
+        printf(" | %-5s", (k->consumed_mods & IDEV_KBDMOD_SHIFT) ? "SHIFT" : "");
+        printf(" %-4s", (k->consumed_mods & IDEV_KBDMOD_CTRL) ? "CTRL" : "");
+        printf(" %-3s", (k->consumed_mods & IDEV_KBDMOD_ALT) ? "ALT" : "");
+        printf(" %-5s", (k->consumed_mods & IDEV_KBDMOD_LINUX) ? "LINUX" : "");
+        printf(" %-4s", (k->consumed_mods & IDEV_KBDMOD_CAPS) ? "CAPS" : "");
+
         /* Resolved symbols */
         printf(" |");
         for (i = 0; i < k->n_syms; ++i) {
diff --git a/src/libsystemd-terminal/idev.h b/src/libsystemd-terminal/idev.h
index ea79bb6..c8c03f3 100644
--- a/src/libsystemd-terminal/idev.h
+++ b/src/libsystemd-terminal/idev.h
@@ -123,7 +123,7 @@ static inline bool idev_kbdmatch(idev_data_keyboard *kdata,
                 return false;
 
         real = kdata->mods & ~kdata->consumed_mods & significant;
-        if (real != (mods & ~kdata->consumed_mods))
+        if (real != mods)
                 return false;
 
         return !memcmp(syms, kdata->keysyms, n_syms * sizeof(*syms));



More information about the systemd-commits mailing list