2011-08-13 2 views
0

GTK 키보드 이벤트를 특정 창 (특정 창에서 웹킷 webview가있는 창)에 디스패치 (삽입)하려고합니다. 내가 가진 문제는 Backspace, Up, Down 등과 같은 특수 키를 사용하는 것입니다. 어떤 이유로 인해 제대로 삽입되지 않아 해당 기능이 실행되지 않습니다. 다른 키의 경우 완벽하게 작동합니다. 창에 키보드를 집중시키고 창을 창 Z- 인덱스 스택 맨 위에 놓으려고했으나 도움이되지 않습니다.특수 키 이벤트를 삽입하는 Python Webkit GTK 이벤트

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 코드에서 파이썬 바인딩 부분이며 여기서는 함수에 키 코드 (key_value)를 전달합니다. 키 릴리스 이벤트 (GDK_KEY_RELEASE)와 비슷한 작업을 수행합니다. 파이썬 부분에서는이 두 함수를 호출하고 (눌렀다가 놓으면) a, s, d 등의 일반 키에서 작동하지만 백 스페이스, 입력, 삭제 등에 대해서는 작동하지 않습니다.

+2

게시 할 코드가 있습니까? – ptomato

+0

질문을 편집하고 질문의 본문에 코드를 삽입하는 것이 더 읽기 쉽습니다. 즉, 이벤트를 "삽입"하기 위해 어떤 기능을 사용하고 있습니까? – ptomato

답변

1

I gtk.gdk.keymap_get_default()를 사용하여 얻은 KeyMap 객체를 사용하여 문제를 해결했습니다. KeyMap에는 keycode의 값만 전달해야하는 get_entries_for_keyval (keycode) 메소드가 있습니다. triple : hardware_code, group 및 level을 반환합니다. 그래서 hardware_code와 그룹을 통과했을 때 화살표 키를 제외한 모든 것이 작동하기 시작했습니다.

+1

도움이되기 전에 초점을 잡으세요. 여기에 나와있는 것처럼 : http://stackoverflow.com/questions/2526589/forwarding-keypresses-in-gtk – bellpeace