mirror of
https://github.com/vale981/tridactyl
synced 2025-03-04 17:11:40 -05:00
Wait for commandline_frame message listener to be set up before trying to send messages from content process
This commit is contained in:
parent
8f6acd27ca
commit
7ee8efc5af
4 changed files with 19 additions and 6 deletions
|
@ -405,6 +405,7 @@ export function editor_function(fn_name: keyof typeof tri_editor, ...args) {
|
|||
}
|
||||
|
||||
Messaging.addListener("commandline_frame", Messaging.attributeCaller(SELF))
|
||||
logger.debug("Added commandline_frame message listener")
|
||||
|
||||
commandline_state.fns = getCommandlineFns(commandline_state)
|
||||
Messaging.addListener(
|
||||
|
@ -420,3 +421,5 @@ Messaging.addListener(
|
|||
;(window as any).tri = Object.assign(window.tri || {}, {
|
||||
perfObserver: perf.listenForCounters(),
|
||||
})
|
||||
|
||||
Messaging.messageOwnTab("commandline_frame_ready_to_receive_messages")
|
||||
|
|
|
@ -102,6 +102,12 @@ class KeyCanceller {
|
|||
|
||||
export const canceller = new KeyCanceller()
|
||||
|
||||
let commandlineFrameReadyToReceiveMessages = false
|
||||
Messaging.addListener("commandline_frame_ready_to_receive_messages", () => {
|
||||
logger.debug("Received commandline_frame_ready_to_receive_messages")
|
||||
commandlineFrameReadyToReceiveMessages = true
|
||||
})
|
||||
|
||||
let mustBufferPageKeysForClInput = false
|
||||
let bufferedPageKeys: string[] = []
|
||||
let bufferingPageKeysBeginTime: number
|
||||
|
@ -244,12 +250,6 @@ export function acceptKey(keyevent: KeyboardEvent) {
|
|||
const bufferingDuration = performance.now() - bufferingPageKeysBeginTime;
|
||||
logger.debug("controller_content mustBufferPageKeysForClInput = " + mustBufferPageKeysForClInput
|
||||
+ " bufferingDuration = " + bufferingDuration + "ms");
|
||||
// Stop buffering keys after 5s if something goes wrong and clInput never gets focused.
|
||||
if (bufferingDuration > 5000) {
|
||||
logger.debug("Aborting buffering of page keys since clInput still has not been focused")
|
||||
mustBufferPageKeysForClInput = false
|
||||
return false
|
||||
}
|
||||
const isCharacterKey = keyevent.key.length == 1
|
||||
&& !keyevent.metaKey && !keyevent.ctrlKey && !keyevent.altKey && !keyevent.metaKey;
|
||||
if (isCharacterKey) {
|
||||
|
@ -259,6 +259,14 @@ export function acceptKey(keyevent: KeyboardEvent) {
|
|||
canceller.push(keyevent)
|
||||
return true
|
||||
}
|
||||
if (!commandlineFrameReadyToReceiveMessages) {
|
||||
// If commandline frame cannot receive message, excmds.fillcmdline() will send a fillcmdline message to the
|
||||
// commandline frame that it will never receive. As a result, clInput will not be focused (commandline_frame.focus() will not be called).
|
||||
// If we (content/page process) start buffering keys for clInput, but clInput is not focused, then commandline_frame.focus() will not run,
|
||||
// and it will not send the buffered_page_keys message back to us, and we will keep buffering (and eating events) forever.
|
||||
logger.debug("controller_content Ignoring key event since commandline frame is not yet ready to receive messages", keyevent)
|
||||
return
|
||||
}
|
||||
if (!tryBufferingPageKeyForClInput(keyevent))
|
||||
return generator.next(keyevent)
|
||||
}
|
||||
|
|
|
@ -3882,6 +3882,7 @@ export function hidecmdline() {
|
|||
export function fillcmdline(...strarr: string[]) {
|
||||
const str = strarr.join(" ")
|
||||
showcmdline(false)
|
||||
logger.debug("excmds fillcmdline sending fillcmdline to commandline_frame")
|
||||
return Messaging.messageOwnTab("commandline_frame", "fillcmdline", [str, true/*trailspace*/, true/*focus*/])
|
||||
}
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@ export type TabMessageType =
|
|||
| "alive"
|
||||
| "tab_changes"
|
||||
| "buffered_page_keys"
|
||||
| "commandline_frame_ready_to_receive_messages"
|
||||
|
||||
export type NonTabMessageType =
|
||||
| "owntab_background"
|
||||
|
|
Loading…
Add table
Reference in a new issue