Python Webkit GTK внедряет событие специальных ключей - PullRequest
0 голосов
/ 13 августа 2011

Я пытаюсь отправить (ввести) событие клавиатуры GTK в какое-либо окно, в частности в окно с веб-представлением веб-набора внутри него.У меня проблема со специальными клавишами, такими как 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. 

Это часть привязки C к Python, где япросто передайте код функции (key_value) в функцию.Я делаю то же самое для события выпуска ключа (GDK_KEY_RELEASE).В части Python я вызываю эти две функции (нажмите и затем отпустите), и она работает для обычных клавиш, таких как a, s, d и т. Д. Однако она не работает для BackSpace, Enter, Delete и т. Д.

1 Ответ

1 голос
/ 16 августа 2011

Я решил проблему с помощью объекта KeyMap, который я получаю с помощью gtk.gdk.keymap_get_default (). KeyMap имеет метод get_entries_for_keyval (keycode), в который вам нужно передать только значение keycode. Возвращает тройку: код оборудования, группа и уровень. Поэтому, когда я передал hardware_code и group, все начало работать, кроме клавиш со стрелками.

...