Skip to content

Commit bdd3a24

Browse files
hry-ghihatethisengine
authored andcommitted
covers a few more stickykey cases (cmss13-devs#8712)
stickykeys could also occur by the browser sending more key events /after/ it stopped rendering itself :cl: fix: fixes sticky keys (even more) /:cl: Co-authored-by: harryob <[email protected]>
1 parent 7b4d2e4 commit bdd3a24

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

tgui/packages/tgui/backend.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@ import { createAction } from 'common/redux';
1717
import { setupDrag } from './drag';
1818
import { globalEvents } from './events';
1919
import { focusMap } from './focus';
20+
import {
21+
releaseHeldKeys,
22+
startKeyPassthrough,
23+
stopKeyPassthrough,
24+
} from './hotkeys';
2025
import { createLogger } from './logging';
2126
import { resumeRenderer, suspendRenderer } from './renderer';
2227

@@ -177,6 +182,8 @@ export const backendMiddleware = (store) => {
177182
Byond.winset(Byond.windowId, {
178183
'is-visible': false,
179184
});
185+
stopKeyPassthrough();
186+
releaseHeldKeys();
180187
setTimeout(() => focusMap());
181188
}
182189

@@ -203,6 +210,7 @@ export const backendMiddleware = (store) => {
203210
logger.log('backend/update', payload);
204211
// Signal renderer that we have resumed
205212
resumeRenderer();
213+
startKeyPassthrough();
206214
// Setup drag
207215
setupDrag(payload.config?.window?.fancy);
208216
// We schedule this for the next tick here because resizing and unhiding

tgui/packages/tgui/hotkeys.ts

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -192,12 +192,22 @@ export const setupHotKeys = () => {
192192
globalEvents.on('window-blur', () => {
193193
releaseHeldKeys();
194194
});
195-
globalEvents.on('key', (key: KeyEvent) => {
196-
for (const keyListener of keyListeners) {
197-
keyListener(key);
198-
}
199-
handlePassthrough(key);
200-
});
195+
startKeyPassthrough();
196+
};
197+
198+
export const startKeyPassthrough = () => {
199+
globalEvents.on('key', keyEvent);
200+
};
201+
202+
export const stopKeyPassthrough = () => {
203+
globalEvents.off('key', keyEvent);
204+
};
205+
206+
const keyEvent = (key: KeyEvent) => {
207+
for (const keyListener of keyListeners) {
208+
keyListener(key);
209+
}
210+
handlePassthrough(key);
201211
};
202212

203213
/**

0 commit comments

Comments
 (0)