如何在任何语言布局中将GTK键盘事件键转换为英语?

时间:2019-07-09 11:36:45

标签: gtk gtk3 keyboard-events keyboard-layout

我想在我的GTK-3应用程序中使用键盘快捷键(例如Ctrl + Z / Ctrl + C / Ctrl / V等)。对于不同的键盘布局,我得到了不同的键盘事件。 例如,我的键盘具有英语和俄语的布局,因此我的俄语键“Я”位于“ Z”。 世界上有许多语言。如何使App wich可以在任何语言下使用?

现在,我以这种方式仅翻译俄语键盘的键码:

func main_event_listener(event *gdk.Event){
    eventObject := &gdk.EventKey{event}
    key := eventObject.KeyVal()
    state := eventObject.State()
    key, state = GTK_TranslateKeyLayoutEnglish(key, state)
    if state == gdk.GDK_CONTROL_MASK {
        if key == gdk.KEY_z {
            //Ctrl+Z
        } 
        if key == gdk.KEY_c {
            //Ctrl+C
        }
        if key == gdk.KEY_v {
            //Ctrl+V
        }
    } else {
        if key == gdk.KEY_F5 {
            //F5
        }
        if key == gdk.KEY_Delete {
            //Delete
        }
    }
}

func GTK_TranslateKeyLayoutEnglish(key uint, state uint) (uint, uint) {
    key2 := key
    state2 := state
    if state2 > 8192 { //RUSSIAN Ctrl 8196 == English Ctrl 4
        state2 -= 8192
    }
    switch key {
    case gdk.KEY_Cyrillic_ya: //RUSSIAN 'я'
        key2 = gdk.KEY_z
    case gdk.KEY_Cyrillic_ef: //RUSSIAN 'ф'
        key2 = gdk.KEY_a
    case gdk.KEY_Cyrillic_che: //RUSSIAN 'ч'
        key2 = gdk.KEY_x
    case gdk.KEY_Cyrillic_es: //RUSSIAN 'с'
        key2 = gdk.KEY_c
    case gdk.KEY_Cyrillic_em: //RUSSIAN 'м'
        key2 = gdk.KEY_v
        //etc
    }
    return key2, state2
}

我希望能更好地实现GTK_TranslateKeyLayoutEnglish()函数

0 个答案:

没有答案