Skip to content

Commit c5b39a9

Browse files
committed
fix: fix window reload crash
1 parent 3cc579e commit c5b39a9

File tree

4 files changed

+29
-23
lines changed

4 files changed

+29
-23
lines changed

apps/app/src/electron/app.ts

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,25 @@ const App = () => {
2727
const createWindows = () =>
2828
app
2929
.whenReady()
30-
.then(() => ElectronWindowManager.registerInstance(
31-
'messenger',
32-
createMessengerWindow,
33-
))
34-
.then(() => ElectronWindowManager.registerInstance(
35-
'overlay',
36-
createOverlayWindow,
37-
))
38-
.then(() => ElectronWindowManager.registerInstance(
39-
'speech-worker',
40-
createSpeechWorkerWindow,
41-
))
42-
.then(() => ElectronWindowManager.registerInstance(
43-
'messenger-game-overlay',
44-
createMessengerGameOverlayWindow,
45-
))
30+
.then(async () => Promise.all([
31+
ElectronWindowManager.registerInstance(
32+
'messenger',
33+
createMessengerWindow,
34+
),
35+
ElectronWindowManager.registerInstance(
36+
'overlay',
37+
createOverlayWindow,
38+
),
39+
ElectronWindowManager.registerInstance(
40+
'speech-worker',
41+
createSpeechWorkerWindow,
42+
),
43+
ElectronWindowManager.registerInstance(
44+
'messenger-game-overlay',
45+
createMessengerGameOverlayWindow,
46+
),
47+
]))
48+
4649

4750
const registerElectronPinia = () => {
4851
createApp(h({})).use(

apps/app/src/electron/bridge.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@ import { bridge } from '@packages/electron-bridger'
22
import electronDialog from '@/modules/electron-dialog'
33
import electronFilesystem from '@/modules/electron-filesystem'
44
import electronMessengerWindow from '@/teams/messenger/modules/electron-messenger-window'
5+
import electronOverlayWindow from '@/teams/overlay/modules/electron-overlay-window'
56
import electronSpeechWorkerWindow from '@/teams/speech-worker/modules/electron-speech-worker-window'
67
import electronKeybinding from '@/modules/electron-keybinding'
78
import electronDisplay from '@/modules/electron-display'
89
import electronResources from '@/modules/electron-resources'
910
import electronSi from '@/modules/electron-si'
1011
import electronTranslation from '@/modules/electron-translation'
11-
import electronOverlayWindow from '@/teams/overlay/modules/electron-overlay-window'
1212

1313
export const bridgeModules = () =>
1414
bridge.register([

apps/app/src/electron/game-overlay.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import { mouse, Point } from '@nut-tree-fork/nut-js'
88
import path from 'path'
99
import { EXTERNALS_DIR } from '@/electron/utils.ts'
1010
import { fork } from 'child_process'
11-
import { Window } from 'win-control'
1211
import { Deferred } from '@packages/toolbox'
1312
import { useGameOverlayStore } from '@/features/game-overlay/store'
1413
import { onWatcherCleanup, watch } from 'vue'
@@ -30,6 +29,7 @@ type ProcessEvent = {
3029
const ready = Deferred()
3130

3231
class GameOverlay {
32+
public WinControl: any = null
3333
public Overlay: any = null
3434
public hookedProcesses: ProcessInfo[] = []
3535
public intercepting = false
@@ -86,7 +86,7 @@ class GameOverlay {
8686
if (focusWin) {
8787
focusWin.blurWebView()
8888
focusWin.focusOnWebView()
89-
const { top, left, right, bottom } = Window.getByPid(
89+
const { top, left, right, bottom } = this.WinControl.getByPid(
9090
payload.pid,
9191
).getDimensions()
9292
const width = right-left
@@ -236,7 +236,7 @@ class GameOverlay {
236236
let timeout: ReturnType<typeof setTimeout>
237237
let interval: ReturnType<typeof setInterval>
238238
interval = setInterval(() => {
239-
const foregroundWindow = Window.getForeground()
239+
const foregroundWindow = this.WinControl.getForeground()
240240
if (pid === foregroundWindow?.getPid()) {
241241
clearInterval(interval)
242242
clearTimeout(timeout)
@@ -266,7 +266,9 @@ class GameOverlay {
266266
public start() {
267267
const databasesStore = useDatabasesStore()
268268
const gameOverlayStore = useGameOverlayStore()
269-
return Promise.all([import('@packages/electron-game-overlay'), gameOverlayStore.$whenReady()]).then(([Overlay]) => {
269+
/* Importing win-control in preload breaks reload so we import it dynamically on start instead */
270+
return Promise.all([import('@packages/electron-game-overlay'), import('win-control'), gameOverlayStore.$whenReady()]).then(([Overlay, WinControl]) => {
271+
this.WinControl = WinControl
270272
this.Overlay = Overlay.default
271273
this.scaleFactor = screen.getDisplayNearestPoint({
272274
x: 0,

apps/app/src/teams/messenger/modules/electron-messenger-window/index.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import { useHitboxesStore } from '@/modules/vue-hitboxes/hitboxes.store'
99
import { Deferred } from '@packages/toolbox'
1010
import ffi from 'ffi-napi'
1111
import { getNativeWindowHandleInt } from '@/utils/electron-window'
12-
import { Window } from 'win-control'
1312
import gameOverlay from '@/electron/game-overlay.ts'
1413

1514
export const ElectronMessengerWindow = () => {
@@ -21,6 +20,7 @@ export const ElectronMessengerWindow = () => {
2120
// let lastKeypressTime = 0
2221
// const doubleKeypressDelta = 500
2322
let registeredWindow: BrowserWindow | null = null
23+
let WinControl: any | null = null
2424
let hitboxesStore: ReturnType<typeof useHitboxesStore> | undefined
2525
let settingsStore: ReturnType<typeof useSettingsStore> | undefined
2626
let messengerStore: ReturnType<typeof useMessengerStore> | undefined
@@ -199,7 +199,7 @@ export const ElectronMessengerWindow = () => {
199199
}
200200

201201
const toggleWindow = throttle((context: 'mouse' | 'keyboard') => {
202-
const foregroundWindowPid = Window.getForeground()?.getPid()
202+
const foregroundWindowPid = WinControl?.getForeground()?.getPid()
203203
const hookedProcess = gameOverlay.hookedProcesses.find((process) => process.pid === foregroundWindowPid)
204204
if (hookedProcess && !gameOverlay.intercepting) {
205205
gameOverlay.startIntercept()
@@ -293,6 +293,7 @@ export const ElectronMessengerWindow = () => {
293293
setDisplay(localSettingsStore.display)
294294
})
295295
ready.resolve(window)
296+
import('win-control').then((module) => WinControl = module)
296297
}
297298

298299
isReady().then(() => {

0 commit comments

Comments
 (0)