Получение состояния модификаторов клавиатуры с помощью Gnome libs (GDK) извлекает только начальное состояние

Я пытаюсь получить текущее состояние модификаторов клавиатуры через библиотеку gnome GDK или GTK, чтобы реализовать расширение оболочки доступности gnome, которое показывает это состояние.

Я знаю, как получить их состояние с помощью xlib, но для gnome gjs нет полной привязки.

Код ниже получить только начальное состояние. Это не обновляет состояние.

/*
 * compiling: gcc `pkg-config --cflags gdk-3.0` -o gdk_mod gdk_mod.c `pkg-config --libs gdk-3.0`
 */

#include <gdk/gdk.h>

int main (int argc, char **argv) {

    gdk_init(&argc, &argv);

    GdkDisplay * disp;
    disp = gdk_display_open(NULL);
    if (disp!=NULL) g_printf("display connected!\n");

    GdkKeymap * kmap;
    kmap = gdk_keymap_get_for_display(disp);

    guint state;
    state = gdk_keymap_get_modifier_state(kmap);
    g_printf("mod state: %x\n", state);

    while (1) {
        g_usleep(1000000);
        //kmap = gdk_keymap_get_for_display(disp);
        state = gdk_keymap_get_modifier_state(kmap);
        g_printf("mod state: %x\n", state);
    }

}

Вот пример выходных данных с блокировкой CAPS, активной, но не активной:

$ ./gdk_mod 
display found!
mod state: 2
mod state: 2
mod state: 2
mod state: 2
mod state: 2
^C

В настоящее время использую Kubuntu 15.04.

Что не так с моим кодом?

Ответы на вопрос(2)

Ваш ответ на вопрос