mirror of
https://invent.kde.org/network/falkon.git
synced 2024-12-20 18:56:34 +01:00
Bring back support for web inspector
QtWebEngine only supports remote web inspector, so this starts it on port 33417.
This commit is contained in:
parent
bdd5dee361
commit
eec26c9af4
@ -23,6 +23,8 @@
|
||||
|
||||
#include "qzcommon.h"
|
||||
|
||||
class QWebEngineView;
|
||||
|
||||
class QUPZILLA_EXPORT Scripts
|
||||
{
|
||||
public:
|
||||
|
@ -16,59 +16,72 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
* ============================================================ */
|
||||
#include "webinspector.h"
|
||||
#include "toolbutton.h"
|
||||
#include "iconprovider.h"
|
||||
#include "mainapplication.h"
|
||||
|
||||
#if QTWEBENGINE_DISABLED
|
||||
#include <QJsonArray>
|
||||
#include <QJsonObject>
|
||||
#include <QJsonDocument>
|
||||
#include <QNetworkReply>
|
||||
|
||||
#include <QTimer>
|
||||
QList<QWebEngineView*> WebInspector::s_views;
|
||||
|
||||
WebInspector::WebInspector(QWidget *parent)
|
||||
: QWebInspector(parent)
|
||||
, m_closeButton(0)
|
||||
, m_blockHideEvent(true)
|
||||
: QWebEngineView(parent)
|
||||
{
|
||||
setObjectName(QSL("web-inspector"));
|
||||
setMinimumHeight(80);
|
||||
|
||||
registerView(this);
|
||||
|
||||
connect(page(), &QWebEnginePage::windowCloseRequested, this, &WebInspector::deleteLater);
|
||||
connect(page(), &QWebEnginePage::loadFinished, this, &WebInspector::updateCloseButton);
|
||||
}
|
||||
|
||||
WebInspector::~WebInspector()
|
||||
{
|
||||
unregisterView(this);
|
||||
}
|
||||
|
||||
void WebInspector::setView(QWebEngineView *view)
|
||||
{
|
||||
QUrl inspectorUrl = QUrl(QSL("http://localhost:%1").arg(WEBINSPECTOR_PORT));
|
||||
int index = s_views.indexOf(view);
|
||||
|
||||
QNetworkReply *reply = mApp->networkManager()->get(QNetworkRequest(inspectorUrl.resolved(QUrl("json/list"))));
|
||||
connect(reply, &QNetworkReply::finished, this, [=]() {
|
||||
QJsonArray clients = QJsonDocument::fromJson(reply->readAll()).array();
|
||||
QUrl pageUrl;
|
||||
if (clients.size() > index) {
|
||||
QJsonObject object = clients.at(index).toObject();
|
||||
pageUrl = inspectorUrl.resolved(QUrl(object.value(QSL("devtoolsFrontendUrl")).toString()));
|
||||
}
|
||||
load(pageUrl);
|
||||
pushView(this);
|
||||
show();
|
||||
});
|
||||
}
|
||||
|
||||
void WebInspector::pushView(QWebEngineView *view)
|
||||
{
|
||||
s_views.removeOne(view);
|
||||
s_views.prepend(view);
|
||||
}
|
||||
|
||||
void WebInspector::registerView(QWebEngineView *view)
|
||||
{
|
||||
s_views.prepend(view);
|
||||
}
|
||||
|
||||
void WebInspector::unregisterView(QWebEngineView *view)
|
||||
{
|
||||
s_views.removeOne(view);
|
||||
}
|
||||
|
||||
void WebInspector::updateCloseButton()
|
||||
{
|
||||
if (!m_closeButton) {
|
||||
m_closeButton = new ToolButton(this);
|
||||
m_closeButton->setAutoRaise(true);
|
||||
m_closeButton->setIcon(IconProvider::standardIcon(QStyle::SP_DialogCloseButton));
|
||||
connect(m_closeButton, SIGNAL(clicked()), this, SLOT(hideInspector()));
|
||||
page()->runJavaScript(QL1S("var button = document.getElementsByClassName('toolbar-close-button-item')[0];"
|
||||
"button.style.display = 'inline-block';"
|
||||
"button.addEventListener('click', function() {"
|
||||
" window.close();"
|
||||
"})"));
|
||||
}
|
||||
|
||||
m_closeButton->show();
|
||||
m_closeButton->move(width() - m_closeButton->width(), 0);
|
||||
}
|
||||
|
||||
void WebInspector::hideInspector()
|
||||
{
|
||||
m_blockHideEvent = false;
|
||||
hide();
|
||||
m_blockHideEvent = true;
|
||||
|
||||
// This is needed to correctly show close button after QWebInspector re-initialization
|
||||
m_closeButton->deleteLater();
|
||||
m_closeButton = 0;
|
||||
}
|
||||
|
||||
void WebInspector::hideEvent(QHideEvent* event)
|
||||
{
|
||||
// Prevent re-initializing QWebInspector after changing tab
|
||||
if (!m_blockHideEvent) {
|
||||
QWebInspector::hideEvent(event);
|
||||
}
|
||||
}
|
||||
|
||||
void WebInspector::resizeEvent(QResizeEvent* event)
|
||||
{
|
||||
QWebInspector::resizeEvent(event);
|
||||
|
||||
QTimer::singleShot(0, this, SLOT(updateCloseButton()));
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -18,31 +18,33 @@
|
||||
#ifndef WEBINSPECTORDOCKWIDGET_H
|
||||
#define WEBINSPECTORDOCKWIDGET_H
|
||||
|
||||
#if QTWEBENGINE_DISABLED
|
||||
#include <QWebInspector>
|
||||
#define WEBINSPECTOR_PORT "33417"
|
||||
|
||||
#include <QWebEngineView>
|
||||
|
||||
#include "qzcommon.h"
|
||||
|
||||
class ToolButton;
|
||||
|
||||
class QUPZILLA_EXPORT WebInspector : public QWebInspector
|
||||
class QUPZILLA_EXPORT WebInspector : public QWebEngineView
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit WebInspector(QWidget* parent = 0);
|
||||
explicit WebInspector(QWidget *parent = Q_NULLPTR);
|
||||
~WebInspector();
|
||||
|
||||
void setView(QWebEngineView *view);
|
||||
|
||||
static void pushView(QWebEngineView *view);
|
||||
static void registerView(QWebEngineView *view);
|
||||
static void unregisterView(QWebEngineView *view);
|
||||
|
||||
private slots:
|
||||
void updateCloseButton();
|
||||
void hideInspector();
|
||||
|
||||
private:
|
||||
void hideEvent(QHideEvent* event);
|
||||
void resizeEvent(QResizeEvent* event);
|
||||
|
||||
ToolButton* m_closeButton;
|
||||
bool m_blockHideEvent;
|
||||
static QList<QWebEngineView*> s_views;
|
||||
};
|
||||
#endif
|
||||
|
||||
#endif // WEBINSPECTORDOCKWIDGET_H
|
||||
|
@ -32,6 +32,7 @@
|
||||
#include "qzsettings.h"
|
||||
#include "enhancedmenu.h"
|
||||
#include "locationbar.h"
|
||||
#include "webinspector.h"
|
||||
|
||||
#ifdef USE_HUNSPELL
|
||||
#include "qtwebkit/spellcheck/speller.h"
|
||||
@ -64,6 +65,7 @@ WebView::WebView(QWidget* parent)
|
||||
, m_page(0)
|
||||
, m_disableTouchMocking(false)
|
||||
, m_isReloading(false)
|
||||
, m_firstLoad(false)
|
||||
{
|
||||
connect(this, SIGNAL(loadStarted()), this, SLOT(slotLoadStarted()));
|
||||
connect(this, SIGNAL(loadProgress(int)), this, SLOT(slotLoadProgress(int)));
|
||||
@ -76,6 +78,8 @@ WebView::WebView(QWidget* parent)
|
||||
|
||||
installEventFilter(this);
|
||||
|
||||
WebInspector::registerView(this);
|
||||
|
||||
#ifdef Q_OS_MAC
|
||||
new MacWebViewScroller(this);
|
||||
#endif
|
||||
@ -83,7 +87,7 @@ WebView::WebView(QWidget* parent)
|
||||
|
||||
WebView::~WebView()
|
||||
{
|
||||
//delete m_page;
|
||||
WebInspector::unregisterView(this);
|
||||
}
|
||||
|
||||
QIcon WebView::icon() const
|
||||
@ -180,6 +184,16 @@ void WebView::setPage(QWebEnginePage* page)
|
||||
#endif
|
||||
}
|
||||
|
||||
void WebView::load(const QUrl &url)
|
||||
{
|
||||
QWebEngineView::load(url);
|
||||
|
||||
if (!m_firstLoad) {
|
||||
m_firstLoad = true;
|
||||
WebInspector::pushView(this);
|
||||
}
|
||||
}
|
||||
|
||||
void WebView::load(const LoadRequest &request)
|
||||
{
|
||||
const QUrl reqUrl = request.url();
|
||||
@ -1594,7 +1608,7 @@ void WebView::loadRequest(const LoadRequest &req)
|
||||
else
|
||||
QWebEngineView::load(req.networkRequest(), QNetworkAccessManager::PostOperation, req.data());
|
||||
#else
|
||||
QWebEngineView::load(req.url());
|
||||
load(req.url());
|
||||
#endif
|
||||
}
|
||||
|
||||
|
@ -44,6 +44,7 @@ public:
|
||||
WebPage* page() const;
|
||||
void setPage(QWebEnginePage* page);
|
||||
|
||||
void load(const QUrl &url);
|
||||
void load(const LoadRequest &request);
|
||||
bool isLoading() const;
|
||||
|
||||
@ -214,6 +215,7 @@ private:
|
||||
|
||||
bool m_disableTouchMocking;
|
||||
bool m_isReloading;
|
||||
bool m_firstLoad;
|
||||
|
||||
static bool s_forceContextMenuOnMouseRelease;
|
||||
};
|
||||
|
@ -87,7 +87,6 @@ QDataStream &operator >>(QDataStream &stream, WebTab::SavedTab &tab)
|
||||
WebTab::WebTab(BrowserWindow* window)
|
||||
: QWidget()
|
||||
, m_window(window)
|
||||
, m_inspector(0)
|
||||
, m_tabBar(0)
|
||||
, m_isPinned(false)
|
||||
{
|
||||
@ -130,15 +129,12 @@ TabbedWebView* WebTab::webView() const
|
||||
|
||||
void WebTab::showWebInspector()
|
||||
{
|
||||
#if QTWEBENGINE_DISABLED
|
||||
if (!m_inspector) {
|
||||
m_inspector = new WebInspector(this);
|
||||
m_inspector->setPage(m_webView->page());
|
||||
m_splitter->addWidget(m_inspector);
|
||||
}
|
||||
if (m_splitter->count() != 1)
|
||||
return;
|
||||
|
||||
m_inspector->show();
|
||||
#endif
|
||||
WebInspector *inspector = new WebInspector(this);
|
||||
inspector->setView(m_webView);
|
||||
m_splitter->addWidget(inspector);
|
||||
}
|
||||
|
||||
QUrl WebTab::url() const
|
||||
|
@ -16,6 +16,7 @@
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
* ============================================================ */
|
||||
#include "mainapplication.h"
|
||||
#include "webinspector.h"
|
||||
#include "proxystyle.h"
|
||||
#include "datapaths.h"
|
||||
|
||||
@ -154,6 +155,8 @@ int main(int argc, char* argv[])
|
||||
argv = args;
|
||||
}
|
||||
|
||||
qputenv("QTWEBENGINE_REMOTE_DEBUGGING", WEBINSPECTOR_PORT);
|
||||
|
||||
MainApplication app(argc, argv);
|
||||
|
||||
if (app.isClosing())
|
||||
|
@ -20,6 +20,7 @@ unix:!contains(DEFINES, "DISABLE_DBUS") QT += dbus
|
||||
INCLUDEPATH += ../lib/3rdparty \
|
||||
../lib/app \
|
||||
../lib/session \
|
||||
../lib/webengine \
|
||||
../lib/webtab \
|
||||
|
||||
DEPENDPATH += $$INCLUDEPATH
|
||||
|
Loading…
Reference in New Issue
Block a user