mirror of
https://github.com/MichaelScottsman/LiquidAss-Frame.git
synced 2026-10-18 08:01:07 +02:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
75a6e6c246 | ||
|
|
313d043115 |
No files matched your search
+13
-3
@@ -931,7 +931,7 @@ class Shell:
|
||||
self.native_enabled, self.css_reason = False, css_reason_for(self.native_req, self.native_src)
|
||||
elif not self.glassd_path:
|
||||
self.native_enabled, self.css_reason = False, "glassd disabled"
|
||||
elif not os.access(self.glassd_path, os.X_OK):
|
||||
elif not os.access(self.glassd_path, os.X_OK) and not ensure_glassd(self.glassd_path):
|
||||
self.native_enabled, self.css_reason = False, "no glassd binary at start; python glass.py native-build"
|
||||
else:
|
||||
self.native_enabled, self.css_reason = True, None
|
||||
@@ -2700,8 +2700,18 @@ class Shell:
|
||||
if self.gseq and not self.g_files_removed: # native mode ended mid-session
|
||||
self.g_files_removed = True
|
||||
remove_glassd_files()
|
||||
# only the binary was missing (an install swapping the folder under us, a toggle run before the
|
||||
# install finished): native comes back as soon as a glassd is in place again
|
||||
if self.native_requested and self.glassd_path and str(self.css_reason or "").startswith(
|
||||
("glassd binary removed", "no glassd binary at start")) and ensure_glassd(self.glassd_path):
|
||||
log("glassd: binary in place again; native layer back on")
|
||||
self.native_enabled, self.css_reason = True, None
|
||||
self.g_files_removed = False
|
||||
self.g_given_up = False
|
||||
self.tasks.append(asyncio.create_task(self.glassd_loop()))
|
||||
self.changed.set()
|
||||
return
|
||||
if not os.access(self.glassd_path, os.X_OK):
|
||||
if not os.access(self.glassd_path, os.X_OK) and not ensure_glassd(self.glassd_path):
|
||||
self.disable_native("glassd binary removed")
|
||||
await self.kill_glassd()
|
||||
return
|
||||
@@ -2749,7 +2759,7 @@ class Shell:
|
||||
return
|
||||
temp_streak = 0
|
||||
while not self.stopping and self.native_possible():
|
||||
if not os.access(self.glassd_path, os.X_OK):
|
||||
if not os.access(self.glassd_path, os.X_OK) and not ensure_glassd(self.glassd_path):
|
||||
self.disable_native("glassd binary removed")
|
||||
return
|
||||
# glassd needs SteamVR and something to cover (and the theme on: not dormant)
|
||||
|
||||
@@ -639,6 +639,7 @@ function homeComponents(R, rt) {
|
||||
onMenuButton: isGame && HS.appMenu ? (e) => homeTileMenu(R, item, e && e.currentTarget) : undefined,
|
||||
onMenuActionDescription: isGame && HS.appMenu ? (homeStr(R, 'options') || undefined) : undefined,
|
||||
onGamepadFocus: (e) => {
|
||||
if (!HS) return; // module torn down (lgs off) while Steam still moves focus on the leaving page
|
||||
const sk = HS.sectionKey || 'x';
|
||||
HS.focusKey[sk] = item.key;
|
||||
// focus that Steam moved into row 1 from outside our page (C1a's search capsule above a folder's
|
||||
@@ -651,7 +652,8 @@ function homeComponents(R, rt) {
|
||||
if (d && HS.P.attention && homePad()) HS.P.attention.feed(d, 'enter', 'pad');
|
||||
},
|
||||
onGamepadBlur: (e) => {
|
||||
const d = e && e.currentTarget && e.currentTarget.querySelector ? e.currentTarget.querySelector('.lgs-home-disc') : null;
|
||||
if (!HS) return;
|
||||
const d =e && e.currentTarget && e.currentTarget.querySelector ? e.currentTarget.querySelector('.lgs-home-disc') : null;
|
||||
if (d && HS.P.attention) HS.P.attention.feed(d, 'leave', 'pad');
|
||||
// gamepad: the card starts closing at the move, not after the 0.3 s grace (HA-17); a bounce back
|
||||
// within the grace restores it through onReenter
|
||||
|
||||
+14
-2
@@ -68,6 +68,15 @@ install_app() {
|
||||
tar -xzf "$tmp/$ASSET" -C "$tmp/new"
|
||||
[ -f "$tmp/new/device/lgs.py" ] || die "the archive is not a LiquidAss release"
|
||||
|
||||
# A running LiquidAss is stopped for the swap (its files, glassd's binary included, vanish for a moment)
|
||||
# and started again after it, on the new version.
|
||||
was_on=0
|
||||
if command -v systemctl >/dev/null 2>&1 && systemctl --user is-active --quiet lgs-shell 2>/dev/null && [ -f "$DEST/device/lgs.py" ]; then
|
||||
was_on=1
|
||||
say "turning LiquidAss off for the update"
|
||||
py "$DEST/device/lgs.py" off --quiet >/dev/null 2>&1 || true
|
||||
fi
|
||||
|
||||
# Swap the whole folder so files a release dropped do not linger; keep a glassd built on this headset.
|
||||
mkdir -p "$(dirname "$DEST")"
|
||||
if [ -f "$DEST/native/glassd/glassd" ] && [ ! -e "$tmp/new/native/glassd/glassd" ]; then
|
||||
@@ -93,8 +102,11 @@ install_app() {
|
||||
|
||||
v=$(cat "$DEST/VERSION" 2>/dev/null || echo "")
|
||||
say "installed ${v:+$v }in $DEST"
|
||||
say "turn it on: dashboard bar > + > Launch Program > LiquidAss"
|
||||
say "(already on? launch LiquidAss twice to load the new version)"
|
||||
if [ "$was_on" = 1 ]; then
|
||||
py "$DEST/device/lgs.py" on --quiet >/dev/null 2>&1 && say "LiquidAss is back on (the new version)" || say "could not turn LiquidAss back on: launch it from + > Launch Program > LiquidAss"
|
||||
else
|
||||
say "turn it on: dashboard bar > + > Launch Program > LiquidAss"
|
||||
fi
|
||||
}
|
||||
|
||||
uninstall_app() {
|
||||
|
||||
@@ -231,15 +231,12 @@ html.lgs-on .lgs-arrive { animation: lgs-arrive var(--lgs-motion-page) backwards
|
||||
|
||||
/* ------------------------------------------------- the light layer's ramp in
|
||||
An illumination host's ::after exists only while the host is lit (04-states.css, the hook blocks' gate),
|
||||
so it is created already lit: it starts from dark, and the in-transitions (04-states.css §2) ramp hover,
|
||||
within and press up as they did when the layer was always there. Top level: Chromium 126 ignores
|
||||
@starting-style nested in a style rule (the wrapped files). Focus jumps in (0s) through lgs-focus-in. */
|
||||
@starting-style {
|
||||
html.lgs-on:not(.lgs-input-pad) :hover::after,
|
||||
html.lgs-on:not(.lgs-input-laser) :is(.gpfocus, .gpfocuswithin)::after,
|
||||
html.lgs-on :is(:active, .lgs-pressed)::after {
|
||||
--lgs-hover: 0;
|
||||
--lgs-within: 0;
|
||||
--lgs-press: 0;
|
||||
}
|
||||
so it is created already lit: lgs-ill-in starts it from dark (04-states.css §2, the in-rule), and the
|
||||
in-transitions take over after. Focus jumps in (0s) through lgs-focus-in.
|
||||
Never @starting-style here: on Steam's Chromium 126, a top-level @starting-style on these ::after
|
||||
(registered properties, under the @container style() gate) SEGVs the whole renderer when the theme is
|
||||
injected while the pointer rests on a lit host, e.g. the LiquidAss row of "+" > Launch Program
|
||||
(2026-10-09, reproduced 3/3; gone without the rule). */
|
||||
@keyframes lgs-ill-in {
|
||||
from { --lgs-hover: 0; --lgs-within: 0; --lgs-press: 0; }
|
||||
}
|
||||
+5
-3
@@ -243,11 +243,13 @@
|
||||
--lgs-focus 0s,
|
||||
--lgs-within var(--lgs-ill-d-in) var(--lgs-ill-ease),
|
||||
--lgs-press var(--lgs-ill-d-press) var(--lgs-ill-ease-press);
|
||||
/* created lit (the hook blocks' gate): its ramp in starts from dark, @starting-style in
|
||||
02-motion.nowrap.css (Chromium 126 ignores it nested in this wrapped file) */
|
||||
/* created lit (the hook blocks' gate): its ramp in starts from dark (lgs-ill-in,
|
||||
02-motion.nowrap.css; never @starting-style, which crashes Steam's renderer) */
|
||||
animation: lgs-ill-in var(--lgs-ill-d-in) var(--lgs-ill-ease) backwards;
|
||||
}
|
||||
&:not(.lgs-input-laser) .gpfocus::after {
|
||||
animation: lgs-focus-in var(--lgs-ill-d-in) var(--lgs-ill-ease) backwards;
|
||||
animation: lgs-ill-in var(--lgs-ill-d-in) var(--lgs-ill-ease) backwards,
|
||||
lgs-focus-in var(--lgs-ill-d-in) var(--lgs-ill-ease) backwards;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user