diff options
author | bptato <nincsnevem662@gmail.com> | 2024-12-28 18:58:24 +0100 |
---|---|---|
committer | bptato <nincsnevem662@gmail.com> | 2024-12-28 18:58:24 +0100 |
commit | 5881750f9db31489fb3b9f03e53bc80eba897234 (patch) | |
tree | 9f33ce795909b58d2953ada3975ce71897bcc2ac /src | |
parent | 3fdb9c9ccb1ff4eb6fd5b8fde2be3725eb618b4f (diff) | |
download | chawan-5881750f9db31489fb3b9f03e53bc80eba897234.tar.gz |
env: do not copy attrs, fix screen on client
Now screen.width etc. works in the pager too.
Diffstat (limited to 'src')
-rw-r--r-- | src/css/cascade.nim | 10 | ||||
-rw-r--r-- | src/html/dom.nim | 8 | ||||
-rw-r--r-- | src/html/env.nim | 8 | ||||
-rw-r--r-- | src/local/client.nim | 5 | ||||
-rw-r--r-- | src/server/buffer.nim | 29 |
5 files changed, 31 insertions, 29 deletions
diff --git a/src/css/cascade.nim b/src/css/cascade.nim index 0eb8e26d..3a983a63 100644 --- a/src/css/cascade.nim +++ b/src/css/cascade.nim @@ -43,11 +43,11 @@ func applies(feature: MediaFeature; window: Window): bool = of mftHover: return feature.b of mftPrefersColorScheme: - return feature.b == window.attrs.prefersDark + return feature.b == window.attrsp.prefersDark of mftWidth: - return feature.appliesLR(window, float64(window.attrs.widthPx)) + return feature.appliesLR(window, float64(window.attrsp.widthPx)) of mftHeight: - return feature.appliesLR(window, float64(window.attrs.heightPx)) + return feature.appliesLR(window, float64(window.attrsp.heightPx)) of mftScripting: return feature.b == (window.settings.scripting != smFalse) @@ -299,12 +299,12 @@ proc applyDeclarations(styledNode: StyledNode; parent: CSSValues; let style = element.cachedStyle if window.styling and style != nil: for decl in style.decls: - let vals = parseComputedValues(decl.name, decl.value, window.attrs) + let vals = parseComputedValues(decl.name, decl.value, window.attrsp[]) if decl.important: rules[coAuthor].important.add(vals) else: rules[coAuthor].normal.add(vals) - presHints = element.calcPresHints(window.attrs) + presHints = element.calcPresHints(window.attrsp[]) styledNode.computed = rules.buildComputedValues(presHints, parent) func hasValues(rules: CSSValueEntryMap): bool = diff --git a/src/html/dom.nim b/src/html/dom.nim index 1f8b10a9..e175cc91 100644 --- a/src/html/dom.nim +++ b/src/html/dom.nim @@ -81,7 +81,7 @@ type bmp: NetworkBitmap Window* = ref object of EventTarget - attrs*: WindowAttributes + attrsp*: ptr WindowAttributes internalConsole*: Console navigator* {.jsget.}: Navigator screen* {.jsget.}: Screen @@ -2559,7 +2559,7 @@ proc sheets*(document: Document): seq[CSSStylesheet] = if elem of HTMLStyleElement: let style = HTMLStyleElement(elem) style.sheet = style.textContent.parseStylesheet(document.factory, - document.baseURL, addr document.window.attrs) + document.baseURL, document.window.attrsp) document.cachedSheets.add(style.sheet) elif elem of HTMLLinkElement: let link = HTMLLinkElement(elem) @@ -3392,7 +3392,7 @@ proc loadSheet(window: Window; link: HTMLLinkElement; url: URL; applies: bool) = ).then(proc(s: JSResult[string]) = # Check applies here, to avoid leaking the window size. if s.isSome: - let sheet = s.get.parseStylesheet(window.factory, url, addr window.attrs) + let sheet = s.get.parseStylesheet(window.factory, url, window.attrsp) if applies: # Note: we intentionally load all sheets to prevent media query # based tracking. @@ -3421,7 +3421,7 @@ proc loadResource(window: Window; link: HTMLLinkElement) = var applies = true if media != "": let cvals = parseComponentValues(media) - let media = parseMediaQueryList(cvals, addr window.attrs) + let media = parseMediaQueryList(cvals, window.attrsp) applies = media.appliesImpl(window) window.loadSheet(link, url, applies) diff --git a/src/html/env.nim b/src/html/env.nim index 3405229c..fc5ec312 100644 --- a/src/html/env.nim +++ b/src/html/env.nim @@ -82,13 +82,13 @@ proc getter(mimeTypeArray: var MimeTypeArray; atom: JSAtom): JSValue proc availWidth(ctx: JSContext; screen: var Screen): int {.jsfget.} = let window = ctx.getWindow() if window.settings.scripting == smApp: - return window.attrs.widthPx + return window.attrsp.widthPx return 80 * 9 proc availHeight(ctx: JSContext; screen: var Screen): int {.jsfget.} = let window = ctx.getWindow() if window.settings.scripting == smApp: - return window.attrs.heightPx + return window.attrsp.heightPx return 24 * 18 proc width(ctx: JSContext; screen: var Screen): int {.jsfget.} = @@ -343,12 +343,12 @@ proc runJSJobs*(window: Window) = ctx.writeException(window.console.err) proc newWindow*(scripting: ScriptingMode; images, styling, autofocus: bool; - attrs: WindowAttributes; factory: CAtomFactory; loader: FileLoader; + attrsp: ptr WindowAttributes; factory: CAtomFactory; loader: FileLoader; url: URL; urandom: PosixStream; imageTypes: Table[string, string]; userAgent: string): Window = let err = newDynFileStream(stderr) let window = Window( - attrs: attrs, + attrsp: attrsp, internalConsole: newConsole(err), navigator: Navigator(), loader: loader, diff --git a/src/local/client.nim b/src/local/client.nim index e072ea92..9d21a9f3 100644 --- a/src/local/client.nim +++ b/src/local/client.nim @@ -12,6 +12,7 @@ import html/env import html/formdata import html/jsencoding import html/jsintl +import html/script import html/xmlhttprequest import io/console import io/dynstream @@ -168,8 +169,10 @@ proc newClient*(config: Config; forkserver: ForkServer; loaderPid: int; factory: newCAtomFactory(), loader: loader, urandom: urandom, - pager: newPager(config, forkserver, jsctx, warnings, urandom, loader) + pager: newPager(config, forkserver, jsctx, warnings, urandom, loader), + settings: EnvironmentSettings(scripting: smApp) ) + client.attrsp = addr client.pager.term.attrs client.timeouts = client.pager.timeouts let global = JS_GetGlobalObject(jsctx) jsctx.setGlobal(client) diff --git a/src/server/buffer.nim b/src/server/buffer.nim index 3012c639..ea6a0d94 100644 --- a/src/server/buffer.nim +++ b/src/server/buffer.nim @@ -884,7 +884,6 @@ proc processData(buffer: Buffer; iq: openArray[uint8]): bool = proc windowChange*(buffer: Buffer; attrs: WindowAttributes) {.proxy.} = buffer.attrs = attrs buffer.prevStyled = nil - buffer.window.attrs = attrs buffer.reshape() type UpdateHoverResult* = object @@ -1934,20 +1933,20 @@ proc launchBuffer*(config: BufferConfig; url: URL; attrs: WindowAttributes; charsetStack: charsetStack, cacheId: -1, outputId: -1, - factory: factory, - window: newWindow( - config.scripting, - config.images, - config.styling, - config.autofocus, - attrs, - factory, - loader, - url, - urandom, - config.imageTypes, - config.userAgent - ) + factory: factory + ) + buffer.window = newWindow( + config.scripting, + config.images, + config.styling, + config.autofocus, + addr buffer.attrs, + factory, + loader, + url, + urandom, + config.imageTypes, + config.userAgent ) if buffer.config.scripting != smFalse: buffer.window.navigate = proc(url: URL) = buffer.navigate(url) |