tray icon behaviour

This commit is contained in:
2026-04-30 12:13:29 +02:00
parent 9dba10ea77
commit 62033eaadc
4 changed files with 28 additions and 11 deletions
+14 -3
View File
@@ -6,6 +6,8 @@
(provide wv-menu (provide wv-menu
wv-menu-item wv-menu-item
is-wv-menu? is-wv-menu?
wv-menu?
wv-menu-empty?
wv-menu-set-callback! wv-menu-set-callback!
wv-menu-set-icon! wv-menu-set-icon!
wv-menu-set-title! wv-menu-set-title!
@@ -17,8 +19,6 @@
wv-menu-id wv-menu-id
) )
(define-struct ww-menu-item* (define-struct ww-menu-item*
(id [title #:mutable] [icon-url #:mutable] [callback #:mutable] [submenu #:mutable] [separator #:mutable]) (id [title #:mutable] [icon-url #:mutable] [callback #:mutable] [submenu #:mutable] [separator #:mutable])
#:transparent) #:transparent)
@@ -38,6 +38,9 @@
(define (wv-menu-id m) (define (wv-menu-id m)
(ww-menu*-id m)) (ww-menu*-id m))
(define (wv-menu? mnu)
(is-wv-menu? mnu))
(define (is-wv-menu? mnu) (define (is-wv-menu? mnu)
(if (ww-menu*? mnu) (if (ww-menu*? mnu)
(if (list? (ww-menu*-items mnu)) (if (list? (ww-menu*-items mnu))
@@ -61,10 +64,18 @@
(when (symbol? (car items)) (when (symbol? (car items))
(set! menu-id (car items)) (set! menu-id (car items))
(set! items (cdr items))) (set! items (cdr items)))
(if (null? items)
(set! items '())
(when (list? (car items)) (when (list? (car items))
(set! items (car items))) (set! items (car items))))
(make-ww-menu* menu-id items))) (make-ww-menu* menu-id items)))
(define (wv-menu-empty? menu)
(if (is-wv-menu? menu)
(null? (ww-menu*-items menu))
(error "wv-empty-menu?: argument is not a menu")))
(define (wv-menu-item id title (define (wv-menu-item id title
#:icon-url [icon-url #f] #:icon-url [icon-url #f]
#:callback [callback (lambda args #t)] #:callback [callback (lambda args #t)]
+10 -2
View File
@@ -16,6 +16,7 @@
racket/path racket/path
"private/utils.rkt" "private/utils.rkt"
"racket-webview-downloader.rkt" "racket-webview-downloader.rkt"
"menu.rkt"
openssl/libssl openssl/libssl
) )
@@ -886,8 +887,15 @@
(define (rkt-webview-tray-show-message tray title message) (define (rkt-webview-tray-show-message tray title message)
(rkt_webview_tray_show_message (rkt-wv-win tray) title message)) (rkt_webview_tray_show_message (rkt-wv-win tray) title message))
(define (rkt-webview-tray-set-menu! tray menu-json) (define (rkt-webview-tray-set-menu! tray menu)
(rkt_webview_tray_set_menu (rkt-wv-win tray) menu-json)) (let ((json (if (wv-menu? menu)
(if (wv-menu-empty? menu)
#f
(wv-menu->json menu))
(error "rkt-webview-tray-set-menu! must be called with a wv-menu")
))
)
(rkt_webview_tray_set_menu (rkt-wv-win tray) json)))
;; Furthermore: rkt-webview-close, rkt-webview-valid?, rkt-webview-show and rkt-webview-hide apply also to tray ;; Furthermore: rkt-webview-close, rkt-webview-valid?, rkt-webview-show and rkt-webview-hide apply also to tray
+1 -1
View File
@@ -1086,7 +1086,7 @@
(define/contract (webview-tray-set-menu! tray menu) (define/contract (webview-tray-set-menu! tray menu)
(-> wv-tray? is-wv-menu? symbol?) (-> wv-tray? is-wv-menu? symbol?)
(rkt-webview-tray-set-menu! (wv-win-handle tray) (wv-menu->json menu))) (rkt-webview-tray-set-menu! (wv-win-handle tray) menu))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; delayed reactor ;; delayed reactor
+2 -4
View File
@@ -16,7 +16,7 @@
(define wv #f) (define wv #f)
(define menu-callbacks (make-hash)) (define menu-callbacks (make-hash))
(define/private (event-handler wv evt) (define (event-handler wv evt)
(let ((event (hash-ref evt 'event 'unknown-event))) (let ((event (hash-ref evt 'event 'unknown-event)))
(cond (cond
[(eq? event 'tray-activated) [(eq? event 'tray-activated)
@@ -104,9 +104,7 @@
(super-new) (super-new)
(set! wv (webview-tray-create icon (λ (wv evt) (set! wv (webview-tray-create icon event-handler #:tooltip tooltip))
(send this event-handler wv evt))
#:tooltip tooltip))
(unless (eq? menu #f) (unless (eq? menu #f)
(send this set-menu! menu)))) (send this set-menu! menu))))