racket/gui: skip some redundant 'enter & 'leave events
This commit is contained in:
parent
d6a8ac85b4
commit
a5d7812732
|
@ -122,9 +122,11 @@
|
||||||
(lambda (top-level hide-panel?)
|
(lambda (top-level hide-panel?)
|
||||||
(set! mid-panel (make-object wx-vertical-panel% #f this top-level null #f))
|
(set! mid-panel (make-object wx-vertical-panel% #f this top-level null #f))
|
||||||
(send mid-panel skip-subwindow-events? #t)
|
(send mid-panel skip-subwindow-events? #t)
|
||||||
|
(send mid-panel skip-enter-leave-events #t)
|
||||||
(send (send mid-panel area-parent) add-child mid-panel)
|
(send (send mid-panel area-parent) add-child mid-panel)
|
||||||
(set! wx-panel (make-object wx-vertical-panel% #f this mid-panel null #f))
|
(set! wx-panel (make-object wx-vertical-panel% #f this mid-panel null #f))
|
||||||
(send wx-panel skip-subwindow-events? #t)
|
(send wx-panel skip-subwindow-events? #t)
|
||||||
|
(send wx-panel skip-enter-leave-events #t)
|
||||||
(send (send wx-panel area-parent) add-child wx-panel)
|
(send (send wx-panel area-parent) add-child wx-panel)
|
||||||
(send top-level set-container wx-panel)
|
(send top-level set-container wx-panel)
|
||||||
(when hide-panel?
|
(when hide-panel?
|
||||||
|
|
|
@ -578,6 +578,10 @@
|
||||||
;; in atomic mode
|
;; in atomic mode
|
||||||
(void))
|
(void))
|
||||||
|
|
||||||
|
(define skip-enter-leave? #f)
|
||||||
|
(define/public (skip-enter-leave-events skip?)
|
||||||
|
(set! skip-enter-leave? skip?))
|
||||||
|
|
||||||
(define block-all-mouse-events? #f)
|
(define block-all-mouse-events? #f)
|
||||||
(define/public (block-mouse-events block?)
|
(define/public (block-mouse-events block?)
|
||||||
(set! block-all-mouse-events? block?))
|
(set! block-all-mouse-events? block?))
|
||||||
|
|
|
@ -169,6 +169,7 @@
|
||||||
(values vbox-gtk panel-gtk))))
|
(values vbox-gtk panel-gtk))))
|
||||||
(gtk_widget_show vbox-gtk)
|
(gtk_widget_show vbox-gtk)
|
||||||
(gtk_widget_show panel-gtk)
|
(gtk_widget_show panel-gtk)
|
||||||
|
(connect-key-and-mouse gtk)
|
||||||
|
|
||||||
(unless is-dialog?
|
(unless is-dialog?
|
||||||
(gtk_window_set_icon_list gtk (cdr (force icon-pixbufs+glist))))
|
(gtk_window_set_icon_list gtk (cdr (force icon-pixbufs+glist))))
|
||||||
|
|
|
@ -313,7 +313,10 @@
|
||||||
(and
|
(and
|
||||||
wx
|
wx
|
||||||
(if (or (= type GDK_2BUTTON_PRESS)
|
(if (or (= type GDK_2BUTTON_PRESS)
|
||||||
(= type GDK_3BUTTON_PRESS))
|
(= type GDK_3BUTTON_PRESS)
|
||||||
|
(and (or (= type GDK_ENTER_NOTIFY)
|
||||||
|
(= type GDK_LEAVE_NOTIFY))
|
||||||
|
(send wx skip-enter-leave-events)))
|
||||||
#t
|
#t
|
||||||
(let* ([modifiers (if motion?
|
(let* ([modifiers (if motion?
|
||||||
(GdkEventMotion-state event)
|
(GdkEventMotion-state event)
|
||||||
|
@ -657,6 +660,12 @@
|
||||||
(define/public (on-char e) (void))
|
(define/public (on-char e) (void))
|
||||||
(define/public (on-event e) (void))
|
(define/public (on-event e) (void))
|
||||||
|
|
||||||
|
(define skip-enter-leave? #f)
|
||||||
|
(define/public skip-enter-leave-events
|
||||||
|
(case-lambda
|
||||||
|
[(skip?) (set! skip-enter-leave? skip?)]
|
||||||
|
[else skip-enter-leave?]))
|
||||||
|
|
||||||
(define/public (register-child child on?)
|
(define/public (register-child child on?)
|
||||||
(void))
|
(void))
|
||||||
(define/public (register-child-in-parent on?)
|
(define/public (register-child-in-parent on?)
|
||||||
|
|
|
@ -674,6 +674,10 @@
|
||||||
(lambda () (dispatch-on-event e #t))
|
(lambda () (dispatch-on-event e #t))
|
||||||
#t)))
|
#t)))
|
||||||
|
|
||||||
|
(define skip-enter-leave? #f)
|
||||||
|
(define/public (skip-enter-leave-events skip?)
|
||||||
|
(set! skip-enter-leave? skip?))
|
||||||
|
|
||||||
(define mouse-in? #f)
|
(define mouse-in? #f)
|
||||||
(define/public (generate-mouse-ins in-window mk)
|
(define/public (generate-mouse-ins in-window mk)
|
||||||
(if mouse-in?
|
(if mouse-in?
|
||||||
|
@ -681,7 +685,8 @@
|
||||||
(begin
|
(begin
|
||||||
(set! mouse-in? #t)
|
(set! mouse-in? #t)
|
||||||
(let ([parent-cursor (generate-parent-mouse-ins mk)])
|
(let ([parent-cursor (generate-parent-mouse-ins mk)])
|
||||||
(handle-mouse-event (get-client-hwnd) 0 0 (mk 'enter))
|
(unless skip-enter-leave?
|
||||||
|
(handle-mouse-event (get-client-hwnd) 0 0 (mk 'enter)))
|
||||||
(let ([c (or cursor-handle parent-cursor)])
|
(let ([c (or cursor-handle parent-cursor)])
|
||||||
(set! effective-cursor-handle c)
|
(set! effective-cursor-handle c)
|
||||||
c)))))
|
c)))))
|
||||||
|
@ -692,13 +697,14 @@
|
||||||
(define/public (send-leaves mk)
|
(define/public (send-leaves mk)
|
||||||
(when mouse-in?
|
(when mouse-in?
|
||||||
(set! mouse-in? #f)
|
(set! mouse-in? #f)
|
||||||
(when mk
|
(unless skip-enter-leave?
|
||||||
(let ([e (mk 'leave)])
|
(when mk
|
||||||
(if (eq? (current-thread)
|
(let ([e (mk 'leave)])
|
||||||
(eventspace-handler-thread eventspace))
|
(if (eq? (current-thread)
|
||||||
(handle-mouse-event (get-client-hwnd) 0 0 e)
|
(eventspace-handler-thread eventspace))
|
||||||
(queue-window-event this
|
(handle-mouse-event (get-client-hwnd) 0 0 e)
|
||||||
(lambda () (dispatch-on-event/sync e))))))))
|
(queue-window-event this
|
||||||
|
(lambda () (dispatch-on-event/sync e)))))))))
|
||||||
|
|
||||||
(define/public (send-child-leaves mk)
|
(define/public (send-child-leaves mk)
|
||||||
#f)
|
#f)
|
||||||
|
|
|
@ -33,6 +33,7 @@
|
||||||
(send this alignment ha va)
|
(send this alignment ha va)
|
||||||
this)
|
this)
|
||||||
(let ([p (make-object wx-vertical-pane% #f proxy this null #f)])
|
(let ([p (make-object wx-vertical-pane% #f proxy this null #f)])
|
||||||
|
(send p skip-enter-leave-events #t)
|
||||||
(send p skip-subwindow-events? #t)
|
(send p skip-subwindow-events? #t)
|
||||||
(send (send p area-parent) add-child p)
|
(send (send p area-parent) add-child p)
|
||||||
(send p alignment ha va)
|
(send p alignment ha va)
|
||||||
|
@ -41,6 +42,7 @@
|
||||||
(define (make-label label proxy p font)
|
(define (make-label label proxy p font)
|
||||||
(and label
|
(and label
|
||||||
(let ([l (make-object wx-message% #f proxy p label -1 -1 null font)])
|
(let ([l (make-object wx-message% #f proxy p label -1 -1 null font)])
|
||||||
|
(send l skip-enter-leave-events #t)
|
||||||
(send l skip-subwindow-events? #t)
|
(send l skip-subwindow-events? #t)
|
||||||
l)))
|
l)))
|
||||||
|
|
||||||
|
@ -57,7 +59,7 @@
|
||||||
(define wx-label-panel%
|
(define wx-label-panel%
|
||||||
(class wx-control-horizontal-panel%
|
(class wx-control-horizontal-panel%
|
||||||
(init proxy parent label style font halign valign)
|
(init proxy parent label style font halign valign)
|
||||||
(inherit area-parent)
|
(inherit area-parent skip-enter-leave-events)
|
||||||
(define c #f)
|
(define c #f)
|
||||||
|
|
||||||
(define/override (enable on?) (if c (send c enable on?) (void)))
|
(define/override (enable on?) (if c (send c enable on?) (void)))
|
||||||
|
@ -65,6 +67,7 @@
|
||||||
(define/override (is-window-enabled?) (if c (send c is-window-enabled?) #t))
|
(define/override (is-window-enabled?) (if c (send c is-window-enabled?) #t))
|
||||||
|
|
||||||
(super-make-object #f proxy parent (if (memq 'deleted style) '(deleted) null) #f)
|
(super-make-object #f proxy parent (if (memq 'deleted style) '(deleted) null) #f)
|
||||||
|
(skip-enter-leave-events #t)
|
||||||
(unless (memq 'deleted style)
|
(unless (memq 'deleted style)
|
||||||
(send (area-parent) add-child this))
|
(send (area-parent) add-child this))
|
||||||
(define horiz? (is-horiz? style parent))
|
(define horiz? (is-horiz? style parent))
|
||||||
|
|
|
@ -46,6 +46,7 @@
|
||||||
[get-client-size (lambda (wb hb)
|
[get-client-size (lambda (wb hb)
|
||||||
(when wb (set-box! wb width))
|
(when wb (set-box! wb width))
|
||||||
(when hb (set-box! hb height)))]
|
(when hb (set-box! hb height)))]
|
||||||
|
[skip-enter-leave-events (lambda (skip?) (void))]
|
||||||
[set-size (lambda (x y w h)
|
[set-size (lambda (x y w h)
|
||||||
(unless (negative? x) (set! pos-x x))
|
(unless (negative? x) (set! pos-x x))
|
||||||
(unless (negative? y) (set! pos-y y))
|
(unless (negative? y) (set! pos-y y))
|
||||||
|
|
|
@ -235,7 +235,7 @@
|
||||||
[pre-on-event (entry-point
|
[pre-on-event (entry-point
|
||||||
(lambda (w e)
|
(lambda (w e)
|
||||||
(if (skip-subwindow-events?)
|
(if (skip-subwindow-events?)
|
||||||
#f
|
#f
|
||||||
(pre-wx->proxy w e
|
(pre-wx->proxy w e
|
||||||
(lambda (m e)
|
(lambda (m e)
|
||||||
(as-exit (lambda ()
|
(as-exit (lambda ()
|
||||||
|
|
Loading…
Reference in New Issue
Block a user