add eventspace-event-evt' to
racket/gui/base'
original commit: cf548f197e19a3906ab6595726d73b5754d048cb
This commit is contained in:
parent
1becc8b95b
commit
a22f20b771
|
@ -62,6 +62,7 @@ editor<%>
|
||||||
end-busy-cursor
|
end-busy-cursor
|
||||||
event%
|
event%
|
||||||
event-dispatch-handler
|
event-dispatch-handler
|
||||||
|
eventspace-event-evt
|
||||||
eventspace-handler-thread
|
eventspace-handler-thread
|
||||||
eventspace-shutdown?
|
eventspace-shutdown?
|
||||||
eventspace?
|
eventspace?
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
eventspace-shutdown?
|
eventspace-shutdown?
|
||||||
main-eventspace?
|
main-eventspace?
|
||||||
eventspace-handler-thread
|
eventspace-handler-thread
|
||||||
|
eventspace-event-evt
|
||||||
queue-callback
|
queue-callback
|
||||||
middle-queue-key
|
middle-queue-key
|
||||||
get-top-level-windows
|
get-top-level-windows
|
||||||
|
|
|
@ -146,6 +146,7 @@
|
||||||
queue-callback
|
queue-callback
|
||||||
yield
|
yield
|
||||||
eventspace-shutdown?
|
eventspace-shutdown?
|
||||||
|
eventspace-event-evt
|
||||||
get-panel-background
|
get-panel-background
|
||||||
|
|
||||||
the-editor-wordbreak-map
|
the-editor-wordbreak-map
|
||||||
|
|
|
@ -26,12 +26,14 @@
|
||||||
queue-refresh-event
|
queue-refresh-event
|
||||||
yield
|
yield
|
||||||
yield-refresh
|
yield-refresh
|
||||||
|
eventspace-event-evt
|
||||||
(rename-out [make-new-eventspace make-eventspace])
|
(rename-out [make-new-eventspace make-eventspace])
|
||||||
|
|
||||||
event-dispatch-handler
|
event-dispatch-handler
|
||||||
eventspace-shutdown?
|
eventspace-shutdown?
|
||||||
main-eventspace?
|
main-eventspace?
|
||||||
eventspace-handler-thread
|
eventspace-handler-thread
|
||||||
|
eventspace-event-evt
|
||||||
eventspace-wait-cursor-count
|
eventspace-wait-cursor-count
|
||||||
eventspace-extra-table
|
eventspace-extra-table
|
||||||
eventspace-adjust-external-modal!
|
eventspace-adjust-external-modal!
|
||||||
|
@ -235,27 +237,66 @@
|
||||||
(set-mcdr! (mcdr q) p)
|
(set-mcdr! (mcdr q) p)
|
||||||
(set-mcar! q p))
|
(set-mcar! q p))
|
||||||
(set-mcdr! q p)))]
|
(set-mcdr! q p)))]
|
||||||
[first (lambda (q)
|
[first (lambda (q peek?)
|
||||||
(and (mcar q)
|
(and (mcar q)
|
||||||
(wrap-evt
|
(if peek?
|
||||||
always-evt
|
always-evt
|
||||||
(lambda (_)
|
(wrap-evt
|
||||||
(start-atomic)
|
always-evt
|
||||||
(set! count (sub1 count))
|
(lambda (_)
|
||||||
(check-done)
|
(start-atomic)
|
||||||
(let ([result (mcar (mcar q))])
|
(set! count (sub1 count))
|
||||||
(set-mcar! q (mcdr (mcar q)))
|
(check-done)
|
||||||
(unless (mcar q)
|
(let ([result (mcar (mcar q))])
|
||||||
(set-mcdr! q #f))
|
(set-mcar! q (mcdr (mcar q)))
|
||||||
(end-atomic)
|
(unless (mcar q)
|
||||||
result)))))]
|
(set-mcdr! q #f))
|
||||||
|
(end-atomic)
|
||||||
|
result))))))]
|
||||||
[remove-timer
|
[remove-timer
|
||||||
(lambda (v timer)
|
(lambda (v timer)
|
||||||
(set-box! timer (rbtree-remove
|
(set-box! timer (rbtree-remove
|
||||||
timed-compare
|
timed-compare
|
||||||
v
|
v
|
||||||
(unbox timer)))
|
(unbox timer)))
|
||||||
(check-done))])
|
(check-done))]
|
||||||
|
[timer-first-ready
|
||||||
|
(lambda (timer peek?)
|
||||||
|
(let ([rb (unbox timer)])
|
||||||
|
(and (not (null? rb))
|
||||||
|
(let* ([v (rbtree-min (unbox timer))]
|
||||||
|
[evt (timed-alarm-evt v)])
|
||||||
|
(and (sync/timeout 0 evt)
|
||||||
|
;; It's ready
|
||||||
|
(if peek?
|
||||||
|
always-evt
|
||||||
|
(wrap-evt
|
||||||
|
always-evt
|
||||||
|
(lambda (_)
|
||||||
|
(start-atomic)
|
||||||
|
(remove-timer v timer)
|
||||||
|
(end-atomic)
|
||||||
|
(timed-val v)))))))))]
|
||||||
|
[timer-first-wait
|
||||||
|
(lambda (timer peek?)
|
||||||
|
(let ([rb (unbox timer)])
|
||||||
|
(and (not (null? rb))
|
||||||
|
(wrap-evt
|
||||||
|
(timed-alarm-evt (rbtree-min (unbox timer)))
|
||||||
|
(lambda (_) #f)))))]
|
||||||
|
[make-event-choice
|
||||||
|
(lambda (peek?)
|
||||||
|
(choice-evt
|
||||||
|
(wrap-evt (semaphore-peek-evt newly-posted-sema)
|
||||||
|
(lambda (_) #f))
|
||||||
|
(or (first hi peek?)
|
||||||
|
(timer-first-ready timer peek?)
|
||||||
|
(first refresh peek?)
|
||||||
|
(first med peek?)
|
||||||
|
(first lo peek?)
|
||||||
|
(timer-first-wait timer peek?)
|
||||||
|
;; nothing else ready...
|
||||||
|
never-evt)))])
|
||||||
(case-lambda
|
(case-lambda
|
||||||
[(v)
|
[(v)
|
||||||
;; Enqueue
|
;; Enqueue
|
||||||
|
@ -285,46 +326,18 @@
|
||||||
[()
|
[()
|
||||||
;; Dequeue as evt
|
;; Dequeue as evt
|
||||||
(start-atomic)
|
(start-atomic)
|
||||||
(let ([timer-first-ready
|
(begin0
|
||||||
(lambda (timer)
|
(make-event-choice #f)
|
||||||
(let ([rb (unbox timer)])
|
(end-atomic))]
|
||||||
(and (not (null? rb))
|
[(only-refresh? peek?)
|
||||||
(let* ([v (rbtree-min (unbox timer))]
|
|
||||||
[evt (timed-alarm-evt v)])
|
|
||||||
(and (sync/timeout 0 evt)
|
|
||||||
;; It's ready
|
|
||||||
(wrap-evt
|
|
||||||
always-evt
|
|
||||||
(lambda (_)
|
|
||||||
(start-atomic)
|
|
||||||
(remove-timer v timer)
|
|
||||||
(end-atomic)
|
|
||||||
(timed-val v))))))))]
|
|
||||||
[timer-first-wait
|
|
||||||
(lambda (timer)
|
|
||||||
(let ([rb (unbox timer)])
|
|
||||||
(and (not (null? rb))
|
|
||||||
(wrap-evt
|
|
||||||
(timed-alarm-evt (rbtree-min (unbox timer)))
|
|
||||||
(lambda (_) #f)))))])
|
|
||||||
(let ([e (choice-evt
|
|
||||||
(wrap-evt (semaphore-peek-evt newly-posted-sema)
|
|
||||||
(lambda (_) #f))
|
|
||||||
(or (first hi)
|
|
||||||
(timer-first-ready timer)
|
|
||||||
(first refresh)
|
|
||||||
(first med)
|
|
||||||
(first lo)
|
|
||||||
(timer-first-wait timer)
|
|
||||||
;; nothing else ready...
|
|
||||||
never-evt))])
|
|
||||||
(end-atomic)
|
|
||||||
e))]
|
|
||||||
[(_1 _2)
|
|
||||||
;; Dequeue only refresh event
|
|
||||||
(start-atomic)
|
(start-atomic)
|
||||||
(begin0
|
(begin0
|
||||||
(or (first refresh) never-evt)
|
(cond
|
||||||
|
[only-refresh?
|
||||||
|
;; Dequeue only refresh event
|
||||||
|
(or (first refresh peek?) never-evt)]
|
||||||
|
[else
|
||||||
|
(make-event-choice #t)])
|
||||||
(end-atomic))]))))
|
(end-atomic))]))))
|
||||||
frames
|
frames
|
||||||
(semaphore-peek-evt done-sema)
|
(semaphore-peek-evt done-sema)
|
||||||
|
@ -448,13 +461,19 @@
|
||||||
(let ([e (current-eventspace)])
|
(let ([e (current-eventspace)])
|
||||||
(and (eq? (current-thread) (eventspace-handler-thread e))
|
(and (eq? (current-thread) (eventspace-handler-thread e))
|
||||||
(let loop ([result #f])
|
(let loop ([result #f])
|
||||||
(let ([v (sync/timeout 0 ((eventspace-queue-proc e) #f #f))])
|
(let ([v (sync/timeout 0 ((eventspace-queue-proc e) #t #f))])
|
||||||
(if v
|
(if v
|
||||||
(begin
|
(begin
|
||||||
(handle-event v e)
|
(handle-event v e)
|
||||||
(loop #t))
|
(loop #t))
|
||||||
result)))))))
|
result)))))))
|
||||||
|
|
||||||
|
(define (eventspace-event-evt [e (current-eventspace)])
|
||||||
|
(unless (eventspace? e)
|
||||||
|
(raise-type-error 'eventspace-event-evt "eventspace" e))
|
||||||
|
(wrap-evt ((eventspace-queue-proc e) #f #t)
|
||||||
|
(lambda (_) e)))
|
||||||
|
|
||||||
(define (main-eventspace? e)
|
(define (main-eventspace? e)
|
||||||
(eq? e main-eventspace))
|
(eq? e main-eventspace))
|
||||||
|
|
||||||
|
|
|
@ -50,6 +50,16 @@ An event dispatch handler must ultimately call the primitive event
|
||||||
directly by the eventspace handler thread.
|
directly by the eventspace handler thread.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@defproc[(eventspace-event-evt [e eventspace? (current-eventspace)]) evt?]{
|
||||||
|
|
||||||
|
Produces a synchronizable event (see @racket[sync]) that is ready when
|
||||||
|
a GUI event (mouse or keyboard action, update event, timer, queued
|
||||||
|
callback, etc.) is ready for dispatch in @racket[e]. That is, the
|
||||||
|
result event is ready when @racket[(yield)] for the eventspace
|
||||||
|
@racket[e] would dispatch a GUI event.}
|
||||||
|
|
||||||
|
|
||||||
@defproc[(check-for-break)
|
@defproc[(check-for-break)
|
||||||
boolean?]{
|
boolean?]{
|
||||||
Inspects the event queue of the current eventspace, searching for a
|
Inspects the event queue of the current eventspace, searching for a
|
||||||
|
|
Loading…
Reference in New Issue
Block a user