racket/gui gtk: catch key events at frame level

In case no subwindow within a frame can accept the keyboard
focus, now the frame itself can accept them (for consumption
by `on-subwindow-char').
This commit is contained in:
Matthew Flatt 2013-05-11 09:07:57 -06:00
parent d0043402e8
commit a80e04136b
2 changed files with 15 additions and 2 deletions

View File

@ -179,6 +179,15 @@
(gtk_widget_show panel-gtk)
(connect-enter-and-leave gtk)
;; Enable key events on the panel to catch events
;; that would otherwise go undelivered:
(set-gtk-object-flags! panel-gtk
(bitwise-ior (get-gtk-object-flags panel-gtk)
GTK_CAN_FOCUS))
(gtk_widget_add_events panel-gtk (bitwise-ior GDK_KEY_PRESS_MASK
GDK_KEY_RELEASE_MASK))
(connect-key panel-gtk)
(unless is-dialog?
(gtk_window_set_icon_list gtk (cdr (force icon-pixbufs+glist))))

View File

@ -34,6 +34,7 @@
gtk_widget_set_sensitive
connect-focus
connect-key
connect-key-and-mouse
connect-enter-and-leave
do-button-event
@ -302,9 +303,12 @@
(connect-enter gtk)
(connect-leave gtk))
(define (connect-key-and-mouse gtk [skip-press? #f])
(define (connect-key gtk)
(connect-key-press gtk)
(connect-key-release gtk)
(connect-key-release gtk))
(define (connect-key-and-mouse gtk [skip-press? #f])
(connect-key gtk)
(connect-scroll gtk)
(connect-button-press gtk)
(unless skip-press? (connect-button-release gtk))