35 lines
1.4 KiB
Racket
35 lines
1.4 KiB
Racket
#lang racket/base
|
|
|
|
;; SDL3 is deliberately loaded dynamically. The GUI agent keeps working
|
|
;; without the optional Racket package and native SDL3 runtime.
|
|
|
|
(provide (struct-out tray-controller)
|
|
try-make-tray-controller)
|
|
|
|
(struct tray-controller (update! destroy!) #:transparent)
|
|
|
|
(define (try-make-tray-controller show-window! quit!)
|
|
(with-handlers ((exn:fail? (lambda (_) #f)))
|
|
(define sdl-init! (dynamic-require 'sdl3 'sdl-init!))
|
|
(define sdl-quit! (dynamic-require 'sdl3 'sdl-quit!))
|
|
(define make-tray (dynamic-require 'sdl3 'make-tray))
|
|
(define make-tray-menu (dynamic-require 'sdl3 'make-tray-menu))
|
|
(define insert-tray-entry! (dynamic-require 'sdl3 'insert-tray-entry!))
|
|
(define set-tray-entry-callback!
|
|
(dynamic-require 'sdl3 'set-tray-entry-callback!))
|
|
(define update-trays! (dynamic-require 'sdl3 'update-trays!))
|
|
(define tray-destroy! (dynamic-require 'sdl3 'tray-destroy!))
|
|
(sdl-init! '(video events))
|
|
(define tray (make-tray #f "RKT Web Player Agent"))
|
|
(define menu (make-tray-menu tray))
|
|
(define show-entry (insert-tray-entry! menu "RKT Web Player Agent openen"))
|
|
(insert-tray-entry! menu #f)
|
|
(define quit-entry (insert-tray-entry! menu "Afsluiten"))
|
|
(set-tray-entry-callback! show-entry (lambda (_) (show-window!)))
|
|
(set-tray-entry-callback! quit-entry (lambda (_) (quit!)))
|
|
(tray-controller
|
|
update-trays!
|
|
(lambda ()
|
|
(tray-destroy! tray)
|
|
(sdl-quit!)))))
|