Dave Jarvis' Repositories

git clone https://repo.autonoma.ca/repo/keenwrite.git

WebViewPreview: avoid that web preview scrolls to top when typing fast into the editor and web engine is still loading previous change while we try to get window.scrollX and window.scrollY for next change

AuthorKarl Tauber <email>
Date2015-07-30 12:00:58 GMT+0200
Commitaa786ce58e1eb32bb3803cd013fc1e9855562312
Parent91e37b3
Delta13 lines added, 6 lines removed, 7-line increase
src/main/java/org/markdownwriterfx/preview/WebViewPreview.java
{
private final WebView webView = new WebView();
+ private int lastScrollX;
+ private int lastScrollY;
Node getNode() {
@Override
public void update(RootNode astRoot) {
- Object scrollXobj = webView.getEngine().executeScript("window.scrollX");
- Object scrollYobj = webView.getEngine().executeScript("window.scrollY");
- int scrollX = (scrollXobj instanceof Number) ? ((Number)scrollXobj).intValue() : 0;
- int scrollY = (scrollYobj instanceof Number) ? ((Number)scrollYobj).intValue() : 0;
- String scrollScript = (scrollX > 0 || scrollY > 0)
- ? (" onload='window.scrollTo("+scrollX+", "+scrollY+");'")
+ if (!webView.getEngine().getLoadWorker().isRunning()) {
+ // get window.scrollX and window.scrollY from web engine,
+ // but only no worker is running (in this case the result would be zero)
+ Object scrollXobj = webView.getEngine().executeScript("window.scrollX");
+ Object scrollYobj = webView.getEngine().executeScript("window.scrollY");
+ lastScrollX = (scrollXobj instanceof Number) ? ((Number)scrollXobj).intValue() : 0;
+ lastScrollY = (scrollYobj instanceof Number) ? ((Number)scrollYobj).intValue() : 0;
+ }
+
+ String scrollScript = (lastScrollX > 0 || lastScrollY > 0)
+ ? (" onload='window.scrollTo("+lastScrollX+", "+lastScrollY+");'")
: null;