Compare commits

...

3 Commits

Author SHA1 Message Date
semantic-release-bot
aebdfaa089 chore(release): 3.22.1 [CI SKIP] 2023-10-10 13:38:32 +00:00
TrainDoctor
de914b1a35 Merge pull request #97 from FrogTheFrog/patch-29
fix(useQuickAccessVisible): use the "Page Visibility API" instead of focus/blur
2023-10-10 06:37:52 -07:00
Lukas Senionis
4c4fda47e3 fix(useQuickAccessVisible): use the "Page Visibility API" instead of focus/blur 2023-10-09 21:38:34 +03:00
3 changed files with 17 additions and 18 deletions

View File

@@ -1,3 +1,10 @@
## [3.22.1](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.22.0...v3.22.1) (2023-10-10)
### Bug Fixes
* **useQuickAccessVisible:** use the "Page Visibility API" instead of focus/blur ([4c4fda4](https://github.com/SteamDeckHomebrew/decky-frontend-lib/commit/4c4fda47e3d9fd936b493c5965634a0ff443014f))
# [3.22.0](https://github.com/SteamDeckHomebrew/decky-frontend-lib/compare/v3.21.8...v3.22.0) (2023-08-09)

View File

@@ -1,6 +1,6 @@
{
"name": "decky-frontend-lib",
"version": "3.22.0",
"version": "3.22.1",
"description": "A library for building decky plugins",
"main": "dist/index.js",
"types": "dist/index.d.ts",

View File

@@ -9,14 +9,7 @@ function getQuickAccessWindow(): Window | null {
/**
* Returns state indicating the visibility of quick access menu.
*
* @remarks
* During development it is possible to open the quick access menu without giving it
* focus in some cases. In such cases, the quick access menu state is invisible.
*
* This seems to be impossible to replicate when running the deck normally. Even in
* the edge cases it always seems to have a focus.
*
* @returns `true` if quick access menu is visible (focused) and `false` otherwise.
* @returns `true` if quick access menu is visible and `false` otherwise.
*
* @example
* import { VFC, useEffect } from "react";
@@ -44,7 +37,10 @@ function getQuickAccessWindow(): Window | null {
* };
*/
export function useQuickAccessVisible(): boolean {
const [isVisible, setIsVisible] = useState(getQuickAccessWindow()?.document.hasFocus() ?? true);
// By default we say that document is not hidden, unless we know otherwise.
// This would cover the cases when Valve breaks something and the quick access window
// cannot be accessed anymore - the plugins that use this would continue working somewhat.
const [isHidden, setIsHidden] = useState(getQuickAccessWindow()?.document.hidden ?? false);
useEffect(() => {
const quickAccessWindow = getQuickAccessWindow();
@@ -53,16 +49,12 @@ export function useQuickAccessVisible(): boolean {
return;
}
const onBlur = () => setIsVisible(false);
const onFocus = () => setIsVisible(true);
quickAccessWindow.addEventListener('blur', onBlur);
quickAccessWindow.addEventListener('focus', onFocus);
const onVisibilityChange = () => setIsHidden(quickAccessWindow.document.hidden);
quickAccessWindow.addEventListener('visibilitychange', onVisibilityChange);
return () => {
quickAccessWindow.removeEventListener('blur', onBlur);
quickAccessWindow.removeEventListener('focus', onFocus);
quickAccessWindow.removeEventListener('visibilitychange', onVisibilityChange);
};
}, []);
return isVisible;
return !isHidden;
}