racket/gui gtk: make keyboard focus work in floating frames
original commit: f697f5530bed890c9c511910515d283c7cd187b7
This commit is contained in:
parent
4cb523e858
commit
48384395f6
|
@ -160,13 +160,15 @@
|
|||
adjust-client-delta
|
||||
queue-on-size)
|
||||
|
||||
(define floating? (memq 'float style))
|
||||
|
||||
(define gtk (as-gtk-window-allocation
|
||||
(gtk_window_new (if (memq 'float style)
|
||||
(gtk_window_new (if floating?
|
||||
GTK_WINDOW_POPUP
|
||||
GTK_WINDOW_TOPLEVEL))))
|
||||
(when (memq 'no-caption style)
|
||||
(gtk_window_set_decorated gtk #f))
|
||||
(when (memq 'float style)
|
||||
(when floating?
|
||||
(gtk_window_set_keep_above gtk #t)
|
||||
(gtk_window_set_focus_on_map gtk #f))
|
||||
(define-values (vbox-gtk panel-gtk)
|
||||
|
@ -195,6 +197,8 @@
|
|||
(define/override (get-client-gtk) panel-gtk)
|
||||
(define/override (get-window-gtk) gtk)
|
||||
|
||||
(define/override (in-floating?) floating?)
|
||||
|
||||
(super-new [parent parent]
|
||||
[gtk gtk]
|
||||
[client-gtk panel-gtk]
|
||||
|
|
|
@ -89,6 +89,9 @@
|
|||
(define-gtk gtk_widget_is_focus (_fun _GtkWidget -> _gboolean))
|
||||
(define-gtk gtk_widget_set_sensitive (_fun _GtkWidget _gboolean -> _void))
|
||||
|
||||
(define-gdk gdk_keyboard_grab (_fun _GdkWindow _gboolean _int -> _void))
|
||||
(define-gdk gdk_keyboard_ungrab (_fun _int -> _void))
|
||||
|
||||
(define _GtkAccelGroup (_cpointer 'GtkAccelGroup))
|
||||
(define-gtk gtk_accel_group_new (_fun -> _GtkAccelGroup))
|
||||
(define-gtk gtk_window_add_accel_group (_fun _GtkWindow _GtkAccelGroup -> _void))
|
||||
|
@ -321,6 +324,13 @@
|
|||
(GdkEventCrossing-type event)
|
||||
(GdkEventButton-type event)))])
|
||||
(let ([wx (gtk->wx gtk)])
|
||||
(when (or (= type GDK_BUTTON_PRESS)
|
||||
(= type GDK_2BUTTON_PRESS)
|
||||
(= type GDK_3BUTTON_PRESS))
|
||||
(let ([floating? (send wx in-floating?)])
|
||||
(if floating?
|
||||
(gdk_keyboard_grab (widget-window gtk) #t 0)
|
||||
(gdk_keyboard_ungrab 0))))
|
||||
(and
|
||||
wx
|
||||
(if (or (= type GDK_2BUTTON_PRESS)
|
||||
|
@ -608,6 +618,9 @@
|
|||
(gtk_drag_dest_add_uri_targets gtk))
|
||||
(gtk_drag_dest_unset gtk)))
|
||||
|
||||
(define/public (in-floating?)
|
||||
(send parent in-floating?))
|
||||
|
||||
(define/public (set-focus)
|
||||
(gtk_widget_grab_focus (get-client-gtk)))
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user