X11:无效的Alt / Meta键配置? / GTK +:表示密钥没有被gdk_keymap_add_virtual_modifiers()映射? / KDE:关于密钥的虚假投诉?

时间:2014-03-19 16:09:23

标签: keyboard gtk x11 kde gdk

注意请参阅以下更新;奇怪的事情现在已经出现了。

我正在解释各种鼠标事件处理程序中的GdkEvent***.state字段:

gdk_keymap_add_virtual_modifiers(
    gdk_keymap_get_for_display(gdk_window_get_display(e.window)),
    (GdkModifierType *) &e.state);
// (gdk_keymap_get_default() has the same effect)

但是,当我按下Alt键时,这似乎没有正确地映射到GDK_META_MASK

当我按下Alt键时,

e.state似乎是0x18(MOD1 | MOD2)。我写了一个小的C程序(下面)来打印GDK认为物理密钥代码应该是什么,然后它返回(输出重新格式化以便清晰)

        gdk_keymap_map_virtual_modifiers output           gboolean return from that
meta    0x10000000                                        1
super   0x4000040                                         1
hyper   0x8000040                                         1

xmodmap说

mod1        Alt_L (0x40),  Alt_R (0x6c),  Meta_L (0xcd)
mod2        Num_Lock (0x4d)
mod3      
mod4        Super_L (0x85),  Super_R (0x86),  Super_L (0xce),  Hyper_L (0xcf)
mod5        ISO_Level3_Shift (0x5c),  Mode_switch (0xcb)

发生了什么事?我正在运行GTK + / GDK 3.10.7,但我的程序至少以GTK + 3.4为目标。感谢。

// pietro gagliardi 19 march 2014
#include <stdio.h>
#include <gtk/gtk.h>

GdkKeymap *def;

void dovirt(char *name, GdkModifierType mod)
{
    GdkModifierType from, to;
    gboolean mapped;

    from = mod;
    gdk_keymap_add_virtual_modifiers(def, &from);
    to = mod;
    mapped = gdk_keymap_map_virtual_modifiers(def, &to);
    printf("%s\t0x%X\t0x%X\t%d:0x%X\n",
        name, mod, from, mapped, to);
}

int main(void)
{
    gtk_init(NULL, NULL);
    def = gdk_keymap_get_default();
    printf("name\tmod\tadd\tmap\n");
    dovirt("meta", GDK_META_MASK);
    dovirt("super", GDK_SUPER_MASK);
    dovirt("hyper", GDK_HYPER_MASK);
    return 0;
}

2014年3月22日更新

在sudo中运行kate进行编辑后,我在命令行中看到了这一点:

kglobalaccel(19598) KKeyServer::initializeMods: Your keyboard setup doesn't provide a key to use for meta. See 'xmodmap -pm' or 'xkbcomp $DISPLAY' 
kglobalaccel(19598) KKeyServer::initializeMods: Your keyboard setup doesn't provide a key to use for meta. See 'xmodmap -pm' or 'xkbcomp $DISPLAY' 
kglobalaccel(19598) KKeyServer::initializeMods: Your keyboard setup doesn't provide a key to use for meta. See 'xmodmap -pm' or 'xkbcomp $DISPLAY' 

xmodmap -pm只是说我为xmodmap粘贴的内容; xkbcomp $DISPLAY不产生输出和退出状态0.而Alt似乎在其他地方工作......包括凯特。现在我真的很困惑

2014年3月23日更新

现在解释key-press-event / key-release-event; GdkKeyEvent.keyval返回GDK_KEY_Alt_LGDK_KEY_Alt_R ...

0 个答案:

没有答案