diff --git a/menu.rkt b/menu.rkt index f3170d6..403509b 100644 --- a/menu.rkt +++ b/menu.rkt @@ -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! @@ -16,8 +18,6 @@ wv-menu-item-id wv-menu-id ) - - (define-struct ww-menu-item* (id [title #:mutable] [icon-url #:mutable] [callback #:mutable] [submenu #:mutable] [separator #:mutable]) @@ -37,6 +37,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) @@ -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)] diff --git a/racket-webview-qt.rkt b/racket-webview-qt.rkt index da9d987..a61344b 100644 --- a/racket-webview-qt.rkt +++ b/racket-webview-qt.rkt @@ -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 diff --git a/racket-webview.rkt b/racket-webview.rkt index 25e8531..c1bbbcc 100644 --- a/racket-webview.rkt +++ b/racket-webview.rkt @@ -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 diff --git a/wv-tray.rkt b/wv-tray.rkt index 388eff1..dde1810 100644 --- a/wv-tray.rkt +++ b/wv-tray.rkt @@ -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)))) \ No newline at end of file