From 7096d3eb88c77060739e70bdd8ed3b1c215c1bee Mon Sep 17 00:00:00 2001 From: David Rosca Date: Thu, 26 Jan 2017 17:14:18 +0100 Subject: [PATCH] WebScrollBarManager: Correctly update visibility with javascript Closes #2182 --- src/lib/webengine/webscrollbar.cpp | 2 -- src/lib/webengine/webscrollbarmanager.cpp | 22 ++++++++++++++++++++-- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/src/lib/webengine/webscrollbar.cpp b/src/lib/webengine/webscrollbar.cpp index 0b72ac971..11b04f745 100644 --- a/src/lib/webengine/webscrollbar.cpp +++ b/src/lib/webengine/webscrollbar.cpp @@ -64,8 +64,6 @@ void WebScrollBar::updateValues(const QSize &viewport) setValue(newValue); m_blockScrolling = false; } - - setVisible(maximum() > minimum()); } void WebScrollBar::performScroll() diff --git a/src/lib/webengine/webscrollbarmanager.cpp b/src/lib/webengine/webscrollbarmanager.cpp index 782842b6e..553fc39bb 100644 --- a/src/lib/webengine/webscrollbarmanager.cpp +++ b/src/lib/webengine/webscrollbarmanager.cpp @@ -1,6 +1,6 @@ /* ============================================================ * QupZilla - Qt web browser -* Copyright (C) 2016 David Rosca +* Copyright (C) 2016-2017 David Rosca * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -24,6 +24,7 @@ #include "scripts.h" #include "settings.h" +#include #include #include #include @@ -127,9 +128,26 @@ void WebScrollBarManager::addWebView(WebView *view) }; connect(view, &WebView::viewportResized, this, updateValues); - connect(view->page(), &WebPage::contentsSizeChanged, this, updateValues); connect(view->page(), &WebPage::scrollPositionChanged, this, updateValues); + connect(view->page(), &WebPage::contentsSizeChanged, this, [=]() { + const QString source = QL1S("var out = {" + "vertical: window.innerWidth > document.documentElement.clientWidth," + "horizontal: window.innerHeight > document.documentElement.clientHeight" + "};out;"); + + QPointer p(view); + view->page()->runJavaScript(source, WebPage::SafeJsWorld, [=](const QVariant &res) { + if (!p) { + return; + } + updateValues(); + const QVariantMap map = res.toMap(); + data->vscrollbar->setVisible(map.value(QSL("vertical")).toBool()); + data->hscrollbar->setVisible(map.value(QSL("horizontal")).toBool()); + }); + }); + connect(view, &WebView::zoomLevelChanged, this, [=]() { view->page()->runJavaScript(m_scrollbarJs.arg(thickness)); });