5b7f7d9f31
A packed binary opened the system browser, so it felt like a tab, not an app. Build with -tags webview (cgo) and the viewer instead opens the site in its own window backed by the OS WebView: WKWebView on macOS, WebView2 on Windows, WebKitGTK on Linux. The viewer package picks an implementation at build time. The default file opens the browser and keeps the build pure Go, so CGO_ENABLED=0 and the release pipeline are untouched. The webview file links the platform WebView and runs its event loop on the main goroutine, which main now pins with LockOSThread before anything else, since macOS requires UI on the initial thread. Both kage open and the embedded viewer serve over HTTP in a goroutine and hand the URL to the viewer, then tear the server down when the window closes or Ctrl-C cancels. The window title comes from the archive's M/Title. OpenInBrowser moves out of pack into the viewer package, its only caller.
25 lines
1.2 KiB
Go
25 lines
1.2 KiB
Go
// Package viewer presents a served site to the user. It has two
|
|
// implementations chosen at build time: by default (pure Go, CGO_ENABLED=0) it
|
|
// opens the system browser, and with the "webview" build tag (which needs cgo)
|
|
// it opens a native window backed by the operating system's WebView, so a
|
|
// packed kage binary feels like a standalone app rather than a browser tab.
|
|
//
|
|
// Both builds expose the same three symbols: Native, LockMainThread, and Show.
|
|
// The caller starts an HTTP server, then calls Show on the main goroutine; Show
|
|
// blocks until the window is closed (native) or the context is cancelled
|
|
// (browser), at which point the caller shuts the server down.
|
|
package viewer
|
|
|
|
// Options configures a viewer window.
|
|
type Options struct {
|
|
Title string // window title; the archive's M/Title, falling back to "kage"
|
|
URL string // local URL the server is listening on
|
|
// Browser, in the default build, opens the system browser. The native build
|
|
// ignores it and always shows its own window.
|
|
Browser bool
|
|
}
|
|
|
|
// Native reports whether this build opens a native window (webview tag) or
|
|
// falls back to the system browser. Show and LockMainThread are defined in the
|
|
// per-build files browser.go and webview.go.
|