その状態を示すアクセシビリティgnomeシェル拡張を実装することを目的として、gnome GDKまたはGTKライブラリを介して現在のキーボード修飾子の状態を取得しようとしています。
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 を使用しています。
コードの何が問題になっていますか?