0

GTK キーボード イベントをウィンドウ、特に Webkit Webview を含むウィンドウにディスパッチ (注入) しようとしています。私が抱えている問題は、Backspace、Up、Down などの特殊キーに関するものです。何らかの理由でそれらが適切に挿入されないため、対応する機能がトリガーされません。他のキーについては、完全に機能します。キーボードをウィンドウに集中させ、ウィンドウをウィンドウの z-index スタックの一番上に配置しようとしましたが、役に立ちません。

GdkEvent* const event = gdk_event_new(GDK_KEY_PRESS); 
event->key.window = self->window->window; 
event->key.send_event = TRUE; 
event->key.time = GDK_CURRENT_TIME; 
event->key.state = 0; event->key.keyval = key_value; 
event->key.hardware_keycode = 0;
event->key.length = 0; event->key.string = 0; 
event->key.group = 0; 
//key_value is the code for the key. 

これは、関数にキーコード (key_value) を渡すだけの C から Python へのバインディング部分です。キーリリースイベント (GDK_KEY_RELEASE) についても同様のことを行います。Python の部分では、これら 2 つの関数 (押してから放す) を呼び出し、a、s、d などの通常のキーでは機能しますが、BackSpace、Enter、Delete などでは機能しません。

4

1 に答える 1

1

gtk.gdk.keymap_get_default() で取得した KeyMap オブジェクトを使用して問題を解決しました。KeyMap には get_entries_for_keyval(keycode) メソッドがあり、キーコードの値だけを渡す必要があります。これは、hardware_code、group、および level の 3 つを返します。したがって、hardware_code とグループを渡すと、矢印キーを除いてすべてが機能し始めました。

于 2011-08-16T00:56:55.927 に答える