#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!)))))