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
+15 -4
View File
@@ -6,6 +6,8 @@
(provide wv-menu
wv-menu-item
is-wv-menu?
wv-menu?
wv-menu-empty?
wv-menu-set-callback!
wv-menu-set-icon!
wv-menu-set-title!
@@ -17,8 +19,6 @@
wv-menu-id
)
(define-struct ww-menu-item*
(id [title #:mutable] [icon-url #:mutable] [callback #:mutable] [submenu #:mutable] [separator #:mutable])
#:transparent)
@@ -38,6 +38,9 @@
(define (wv-menu-id m)
(ww-menu*-id m))
(define (wv-menu? mnu)
(is-wv-menu? mnu))
(define (is-wv-menu? mnu)
(if (ww-menu*? mnu)
(if (list? (ww-menu*-items mnu))
@@ -61,10 +64,18 @@
(when (symbol? (car items))
(set! menu-id (car items))
(set! items (cdr items)))
(when (list? (car items))
(set! items (car items)))
(if (null? items)
(set! items '())
(when (list? (car items))
(set! items (car 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
#:icon-url [icon-url #f]
#:callback [callback (lambda args #t)]
+10 -2
View File
@@ -16,6 +16,7 @@
racket/path
"private/utils.rkt"
"racket-webview-downloader.rkt"
"menu.rkt"
openssl/libssl
)
@@ -886,8 +887,15 @@
(define (rkt-webview-tray-show-message tray title message)
(rkt_webview_tray_show_message (rkt-wv-win tray) title message))
(define (rkt-webview-tray-set-menu! tray menu-json)
(rkt_webview_tray_set_menu (rkt-wv-win tray) menu-json))
(define (rkt-webview-tray-set-menu! tray menu)
(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
+1 -1
View File
@@ -1086,7 +1086,7 @@
(define/contract (webview-tray-set-menu! tray menu)
(-> 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
+2 -4
View File
@@ -16,7 +16,7 @@
(define wv #f)
(define menu-callbacks (make-hash))
(define/private (event-handler wv evt)
(define (event-handler wv evt)
(let ((event (hash-ref evt 'event 'unknown-event)))
(cond
[(eq? event 'tray-activated)
@@ -104,9 +104,7 @@
(super-new)
(set! wv (webview-tray-create icon (λ (wv evt)
(send this event-handler wv evt))
#:tooltip tooltip))
(set! wv (webview-tray-create icon event-handler #:tooltip tooltip))
(unless (eq? menu #f)
(send this set-menu! menu))))