-
-
Notifications
You must be signed in to change notification settings - Fork 412
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Electron input handling #3381
Electron input handling #3381
Conversation
@aadcg There are two commits here, both show two different ways of handling the new challenges faced with synchronous input handling in electron. The bottom line: WE CANNOT execute ANY JavaScript when handling input from the renderer. We need to return If we do not do this, the system will deadlock. Why?
I hope the above makes sense. It is kind of hard to write out :-) |
@jmercouris I think I understood the ideas. If I'm not mistaken, you're still trying out different approaches so I'll review when ready. Please limit you summary commit messages to 50 chars.
|
I will keep this in mind, and whenever reasonable, will limit my commit message summaries! |
I am ready to continue with one approach, I would like your opinion about which one it should be. Do you have any suggestions about what you think? |
I'm not sure I understand the consequences of each of the 2 approaches. The one from commit 519d380 seems closer to how it works in GTK. The other one, from commit d058c17, seems odd in the sense that So, my question would be: in what way is d058c17 superior to 519d380? |
1d23810
to
d7af2fc
Compare
For future reference, (nyxt-nix
("nix-shell" "shell.nix" "--run" "sbcl --dynamic-space-size 3072")
:directory "~/common-lisp/nyxt/build-scripts/") @jmercouris I took the approach that doesn't block on input dispatch. Seems to be working well. Unfortunately, I wasn't able to ensure that it doesn't break anything on the WebKitGTK port since the dev env is broken on both Guix and Nix (seems related to WebKitGTK). |
Otherwise, it wouldn't be possible to execute JavaScript when handling input from the renderer (Electron port). In more detail: - JavaScript waits for a synchronous response from Nyxt as to whether it should prevent an event from bubbling, or consume it. In other words, JavaScript needs to know whether it needs to run event.preventDefault(). - In our input handling on the Lisp side, if we try to execute some JavaScript before we return t/nil we'll send a request to a blocked JavaScript program (the one waiting for synchronous input), asking it to do something. - Our Lisp program will not continue until the JavaScript we tried to execute runs. - Our Lisp program will be unable to return t/nil. - We have deadlocked our program.
cl-electron must be located in a path where ASDF sees it. Note that the all non-lisp dependencies are now handled by Node.js. Reverts commit a39942d.
Handles both the WebKitGTK and Electron ports.
3b3a103
to
b3ff6da
Compare
Description
Checklist:
(asdf:test-system :nyxt/<renderer>)
)