create Listeners module/class/thing

phoen
Daniel Barlow 2022-03-04 23:16:42 +00:00
parent 468ed240b4
commit fc7de29d80
1 changed files with 21 additions and 16 deletions

View File

@ -17,31 +17,37 @@
(.. cache-dir "/cookies.db") (.. cache-dir "/cookies.db")
WebKit2.CookiePersistentStorage.SQLITE)) WebKit2.CookiePersistentStorage.SQLITE))
(fn notify-listeners [listeners name value] (local
(let [funs (. listeners name)] Listeners
(when funs {
(each [_ f (ipairs funs)] :new
(f value))))) #(let [listeners {}]
{
(fn add-listener [listeners event-name fun] :notify (fn [_ name value]
(let [funs (or (. listeners event-name) [])] (let [funs (. listeners name)]
(table.insert funs fun) (when funs
(tset listeners event-name funs))) (each [_ f (ipairs funs)]
(f value)))))
:add (fn [_ event-name fun]
(let [funs (or (. listeners event-name) [])]
(table.insert funs fun)
(tset listeners event-name funs)))
})})
(local (local
Webview Webview
{ {
:new :new
#(let [listeners {} #(let [listeners (Listeners.new)
widget (WebKit2.WebView { widget (WebKit2.WebView {
:on_notify :on_notify
(fn [self pspec] (fn [self pspec]
(when (not (= pspec.name :parent)) (when (not (= pspec.name :parent))
(notify-listeners listeners pspec.name (. self pspec.name)))) (listeners:notify pspec.name (. self pspec.name))))
})] })]
;;(load-adblocks webview.user_content_manager content-filter-store) ;;(load-adblocks webview.user_content_manager content-filter-store)
{ {
:listen #(add-listener listeners $2 $3) :listen #(listeners:add $2 $3)
:visit (fn [self url] :visit (fn [self url]
(widget:load_uri url)) (widget:load_uri url))
:stop-loading #(widget:stop_loading) :stop-loading #(widget:stop_loading)
@ -56,15 +62,14 @@
Viewplex Viewplex
{ {
:new :new
#(let [listeners {} #(let [listeners (Listeners.new)
widget (Gtk.Notebook { widget (Gtk.Notebook {
:show_tabs false :show_tabs false
;;# :on_switch_page ;;# :on_switch_page
})] })]
(var foreground-view nil) (var foreground-view nil)
(print :viewplex widget)
{ {
:listen #(add-listener listeners $2 $3) :listen #(listeners:add $2 $3)
:widget widget :widget widget
:add-view (fn [self webview] :add-view (fn [self webview]
(set foreground-view webview) (set foreground-view webview)