mirror of
https://github.com/ksyasuda/SubMiner.git
synced 2026-04-11 04:19:26 -07:00
Fix Windows secondary hover titlebar blocking
This commit is contained in:
4
changes/fix-windows-secondary-hover-titlebar.md
Normal file
4
changes/fix-windows-secondary-hover-titlebar.md
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
type: fixed
|
||||||
|
area: overlay
|
||||||
|
|
||||||
|
- Fixed Windows secondary subtitle hover mode so the expanded hover hit area no longer blocks the native minimize, maximize, and close buttons.
|
||||||
@@ -230,6 +230,42 @@ test('resolvePlatformInfo supports modal layer and disables mouse-ignore toggles
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
test('resolvePlatformInfo flags Windows platforms', () => {
|
||||||
|
const previousWindow = (globalThis as { window?: unknown }).window;
|
||||||
|
const previousNavigator = (globalThis as { navigator?: unknown }).navigator;
|
||||||
|
|
||||||
|
Object.defineProperty(globalThis, 'window', {
|
||||||
|
configurable: true,
|
||||||
|
value: {
|
||||||
|
electronAPI: {
|
||||||
|
getOverlayLayer: () => 'visible',
|
||||||
|
},
|
||||||
|
location: { search: '' },
|
||||||
|
},
|
||||||
|
});
|
||||||
|
Object.defineProperty(globalThis, 'navigator', {
|
||||||
|
configurable: true,
|
||||||
|
value: {
|
||||||
|
platform: 'Win32',
|
||||||
|
userAgent: 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)',
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
|
try {
|
||||||
|
const info = resolvePlatformInfo();
|
||||||
|
assert.equal(info.isWindowsPlatform, true);
|
||||||
|
assert.equal(info.isMacOSPlatform, false);
|
||||||
|
assert.equal(info.isLinuxPlatform, false);
|
||||||
|
assert.equal(info.shouldToggleMouseIgnore, true);
|
||||||
|
} finally {
|
||||||
|
Object.defineProperty(globalThis, 'window', { configurable: true, value: previousWindow });
|
||||||
|
Object.defineProperty(globalThis, 'navigator', {
|
||||||
|
configurable: true,
|
||||||
|
value: previousNavigator,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
test('isYomitanPopupIframe matches modern popup class and legacy id prefix', () => {
|
test('isYomitanPopupIframe matches modern popup class and legacy id prefix', () => {
|
||||||
const createElement = (options: {
|
const createElement = (options: {
|
||||||
tagName: string;
|
tagName: string;
|
||||||
|
|||||||
@@ -529,6 +529,9 @@ async function init(): Promise<void> {
|
|||||||
if (ctx.platform.isMacOSPlatform) {
|
if (ctx.platform.isMacOSPlatform) {
|
||||||
document.body.classList.add('platform-macos');
|
document.body.classList.add('platform-macos');
|
||||||
}
|
}
|
||||||
|
if (ctx.platform.isWindowsPlatform) {
|
||||||
|
document.body.classList.add('platform-windows');
|
||||||
|
}
|
||||||
if (ctx.platform.shouldToggleMouseIgnore) {
|
if (ctx.platform.shouldToggleMouseIgnore) {
|
||||||
syncOverlayMouseIgnoreState(ctx);
|
syncOverlayMouseIgnoreState(ctx);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1131,6 +1131,11 @@ body.subtitle-sidebar-embedded-open #secondarySubContainer.secondary-sub-hover {
|
|||||||
justify-content: center;
|
justify-content: center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
body.platform-windows #secondarySubContainer.secondary-sub-hover {
|
||||||
|
top: 40px;
|
||||||
|
padding-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
#secondarySubContainer.secondary-sub-hover #secondarySubRoot {
|
#secondarySubContainer.secondary-sub-hover #secondarySubRoot {
|
||||||
background: transparent;
|
background: transparent;
|
||||||
backdrop-filter: none;
|
backdrop-filter: none;
|
||||||
|
|||||||
@@ -989,6 +989,13 @@ test('JLPT CSS rules use underline-only styling in renderer stylesheet', () => {
|
|||||||
/transform:\s*translateX\(calc\(var\(--subtitle-sidebar-reserved-width\)\s*\*\s*-0\.5\)\);/,
|
/transform:\s*translateX\(calc\(var\(--subtitle-sidebar-reserved-width\)\s*\*\s*-0\.5\)\);/,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const secondaryHoverWindowsBlock = extractClassBlock(
|
||||||
|
cssText,
|
||||||
|
'body.platform-windows #secondarySubContainer.secondary-sub-hover',
|
||||||
|
);
|
||||||
|
assert.match(secondaryHoverWindowsBlock, /top:\s*40px;/);
|
||||||
|
assert.match(secondaryHoverWindowsBlock, /padding-top:\s*0;/);
|
||||||
|
|
||||||
const subtitleSidebarListBlock = extractClassBlock(cssText, '.subtitle-sidebar-list');
|
const subtitleSidebarListBlock = extractClassBlock(cssText, '.subtitle-sidebar-list');
|
||||||
assert.doesNotMatch(subtitleSidebarListBlock, /scroll-behavior:\s*smooth;/);
|
assert.doesNotMatch(subtitleSidebarListBlock, /scroll-behavior:\s*smooth;/);
|
||||||
|
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ export type PlatformInfo = {
|
|||||||
isModalLayer: boolean;
|
isModalLayer: boolean;
|
||||||
isLinuxPlatform: boolean;
|
isLinuxPlatform: boolean;
|
||||||
isMacOSPlatform: boolean;
|
isMacOSPlatform: boolean;
|
||||||
|
isWindowsPlatform: boolean;
|
||||||
shouldToggleMouseIgnore: boolean;
|
shouldToggleMouseIgnore: boolean;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -24,12 +25,15 @@ export function resolvePlatformInfo(): PlatformInfo {
|
|||||||
const isLinuxPlatform = navigator.platform.toLowerCase().includes('linux');
|
const isLinuxPlatform = navigator.platform.toLowerCase().includes('linux');
|
||||||
const isMacOSPlatform =
|
const isMacOSPlatform =
|
||||||
navigator.platform.toLowerCase().includes('mac') || /mac/i.test(navigator.userAgent);
|
navigator.platform.toLowerCase().includes('mac') || /mac/i.test(navigator.userAgent);
|
||||||
|
const isWindowsPlatform =
|
||||||
|
navigator.platform.toLowerCase().includes('win') || /windows/i.test(navigator.userAgent);
|
||||||
|
|
||||||
return {
|
return {
|
||||||
overlayLayer,
|
overlayLayer,
|
||||||
isModalLayer,
|
isModalLayer,
|
||||||
isLinuxPlatform,
|
isLinuxPlatform,
|
||||||
isMacOSPlatform,
|
isMacOSPlatform,
|
||||||
|
isWindowsPlatform,
|
||||||
shouldToggleMouseIgnore: !isLinuxPlatform && !isModalLayer,
|
shouldToggleMouseIgnore: !isLinuxPlatform && !isModalLayer,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user