make viewplex track the events it should relay for

phoen
Daniel Barlow 2022-03-05 18:23:58 +00:00
parent 140cac0dfe
commit a8345a1734
1 changed files with 35 additions and 24 deletions

View File

@ -60,30 +60,41 @@
(local (local
Viewplex Viewplex
{ (let [relay-events []]
:new {
#(let [listeners (Listeners.new) :new
widget (Gtk.Notebook { #(let [listeners (Listeners.new)
:show_tabs false widget (Gtk.Notebook {
;;# :on_switch_page :show_tabs false
})] ;;# :on_switch_page
(var foreground-view nil) })
{ views []]
:listen #(listeners:add $2 $3) (var foreground-view nil)
:widget widget {
:add-view (fn [self webview] :listen (fn [_ name fun]
(set foreground-view webview) (if (not (. relay-events name))
(webview.widget:show) (each [_ v (ipairs views)]
(webview:listen :uri #(listeners:notify :uri $1)) (v:listen name #(listeners:notify name $1))))
(set widget.page (table.insert relay-events name)
(widget:append_page webview.widget))) (listeners:add name fun))
:visit #(and foreground-view (foreground-view:visit $2)) :widget widget
:stop-loading #(and foreground-view :add-view (fn [self webview]
(foreground-view:stop-loading)) (set foreground-view webview)
:refresh #(and foreground-view (foreground-view:refresh)) (webview.widget:show)
:go-back #(and foreground-view (foreground-view:go-back)) (table.insert views webview)
}) (each [_ event-name (ipairs relay-events)]
}) (webview:listen event-name
#(listeners:notify event-name $1)))
(set widget.page
(widget:append_page webview.widget)))
:visit #(and foreground-view (foreground-view:visit $2))
:stop-loading #(and foreground-view
(foreground-view:stop-loading))
:refresh #(and foreground-view (foreground-view:refresh))
:go-back #(and foreground-view (foreground-view:go-back))
}
)}))