1
mirror of https://invent.kde.org/network/falkon.git synced 2024-12-20 10:46:35 +01:00

Improved source viewer, it now shows lines and fixed go to line.

- plugins can now register scheme handlers
- tweaked javascript alert window
- initial support for Geolocation & Notifications API
    * question to ask user for permission needs not implemented yet
This commit is contained in:
nowrep 2012-03-15 19:35:37 +01:00
parent fb42b91107
commit 60c5b81f88
32 changed files with 758 additions and 150 deletions

View File

@ -91,6 +91,49 @@
** If you are unsure which license is appropriate for your use, please ** If you are unsure which license is appropriate for your use, please
** contact Nokia at qt-info@nokia.com. ** contact Nokia at qt-info@nokia.com.
** **
-----------------------------------------------------------------------------
HtmlHighlighter and PlainTextEditorWithLines classes:
-----------------------------------------------------------------------------
/****************************************************************************
**
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
** the names of its contributors may be used to endorse or promote
** products derived from this software without specific prior written
** permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
Click2Flash plugin: Click2Flash plugin:
--------------------------------------------------------------------------- ---------------------------------------------------------------------------

View File

@ -42,7 +42,7 @@
#include "aboutdialog.h" #include "aboutdialog.h"
#include "pluginproxy.h" #include "pluginproxy.h"
#include "qtwin.h" #include "qtwin.h"
#include "ui_closedialog.h" #include "checkboxdialog.h"
#include "adblockmanager.h" #include "adblockmanager.h"
#include "clickablelabel.h" #include "clickablelabel.h"
#include "docktitlebarwidget.h" #include "docktitlebarwidget.h"
@ -1809,15 +1809,15 @@ bool QupZilla::quitApp()
settings.endGroup(); settings.endGroup();
if (askOnClose && afterLaunch != 3 && m_tabWidget->count() > 1) { if (askOnClose && afterLaunch != 3 && m_tabWidget->count() > 1) {
QDialog dialog(this); CheckBoxDialog dialog(QDialogButtonBox::Yes | QDialogButtonBox::No, this);
Ui_CloseDialog* ui = new Ui_CloseDialog(); dialog.setText(tr("There are still %1 open tabs and your session won't be stored. \nAre you sure to quit QupZilla?").arg(m_tabWidget->count()));
ui->setupUi(&dialog); dialog.setCheckBoxText(tr("Don't ask again"));
ui->textLabel->setText(tr("There are still %1 open tabs and your session won't be stored. Are you sure to quit QupZilla?").arg(m_tabWidget->count())); dialog.setWindowTitle(tr("There are still open tabs"));
ui->iconLabel->setPixmap(style()->standardPixmap(QStyle::SP_MessageBoxWarning)); dialog.setPixmap(style()->standardPixmap(QStyle::SP_MessageBoxWarning));
if (dialog.exec() != QDialog::Accepted) { if (dialog.exec() != QDialog::Accepted) {
return false; return false;
} }
if (ui->dontAskAgain->isChecked()) { if (dialog.isChecked()) {
settings.setValue("Browser-Tabs-Settings/AskOnClosing", false); settings.setValue("Browser-Tabs-Settings/AskOnClosing", false);
} }
} }

View File

@ -439,7 +439,7 @@ void BookmarksManager::removeBookmark(const BookmarksModel::Bookmark &bookmark)
QTreeWidgetItem* item = list.at(0); QTreeWidgetItem* item = list.at(0);
int id = item->data(0, Qt::UserRole + 10).toInt(); int id = item->data(0, Qt::UserRole + 10).toInt();
if (item && id == bookmark.id) { if (id == bookmark.id) {
ui->bookmarksTree->deleteItem(item); ui->bookmarksTree->deleteItem(item);
} }
} }

View File

@ -91,6 +91,49 @@
** If you are unsure which license is appropriate for your use, please ** If you are unsure which license is appropriate for your use, please
** contact Nokia at qt-info@nokia.com. ** contact Nokia at qt-info@nokia.com.
** **
-----------------------------------------------------------------------------
HtmlHighlighter and PlainTextEditorWithLines classes:
-----------------------------------------------------------------------------
/****************************************************************************
**
** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
** the names of its contributors may be used to endorse or promote
** products derived from this software without specific prior written
** permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/
--------------------------------------------------------------------------- ---------------------------------------------------------------------------
Click2Flash plugin: Click2Flash plugin:
--------------------------------------------------------------------------- ---------------------------------------------------------------------------

View File

@ -165,7 +165,10 @@ SOURCES += \
preferences/pluginlistdelegate.cpp \ preferences/pluginlistdelegate.cpp \
popupwindow/popupstatusbarmessage.cpp \ popupwindow/popupstatusbarmessage.cpp \
other/licenseviewer.cpp \ other/licenseviewer.cpp \
bookmarksimport/bookmarksimporticonfetcher.cpp bookmarksimport/bookmarksimporticonfetcher.cpp \
other/checkboxdialog.cpp \
network/schemehandler.cpp \
tools/plaineditwithlines.cpp
HEADERS += \ HEADERS += \
3rdparty/qtwin.h \ 3rdparty/qtwin.h \
@ -302,7 +305,10 @@ HEADERS += \
preferences/pluginlistdelegate.h \ preferences/pluginlistdelegate.h \
popupwindow/popupstatusbarmessage.h \ popupwindow/popupstatusbarmessage.h \
other/licenseviewer.h \ other/licenseviewer.h \
bookmarksimport/bookmarksimporticonfetcher.h bookmarksimport/bookmarksimporticonfetcher.h \
other/checkboxdialog.h \
network/schemehandler.h \
tools/plaineditwithlines.h
FORMS += \ FORMS += \
preferences/autofillmanager.ui \ preferences/autofillmanager.ui \
@ -325,7 +331,6 @@ FORMS += \
preferences/sslmanager.ui \ preferences/sslmanager.ui \
other/clearprivatedata.ui \ other/clearprivatedata.ui \
other/sourceviewersearch.ui \ other/sourceviewersearch.ui \
other/closedialog.ui \
adblock/adblockdialog.ui \ adblock/adblockdialog.ui \
tools/docktitlebarwidget.ui \ tools/docktitlebarwidget.ui \
sidebar/bookmarkssidebar.ui \ sidebar/bookmarkssidebar.ui \
@ -343,7 +348,8 @@ FORMS += \
preferences/addacceptlanguage.ui \ preferences/addacceptlanguage.ui \
opensearch/searchenginesdialog.ui \ opensearch/searchenginesdialog.ui \
opensearch/editsearchengine.ui \ opensearch/editsearchengine.ui \
bookmarksimport/bookmarksimportdialog.ui bookmarksimport/bookmarksimportdialog.ui \
other/checkboxdialog.ui
RESOURCES += \ RESOURCES += \
data/icons.qrc \ data/icons.qrc \

View File

@ -61,7 +61,6 @@ NetworkManager::NetworkManager(QupZilla* mainClass, QObject* parent)
: NetworkManagerProxy(parent) : NetworkManagerProxy(parent)
, m_adblockNetwork(0) , m_adblockNetwork(0)
, p_QupZilla(mainClass) , p_QupZilla(mainClass)
, m_qupzillaSchemeHandler(new QupZillaSchemeHandler)
, m_ignoreAllWarnings(false) , m_ignoreAllWarnings(false)
{ {
connect(this, SIGNAL(authenticationRequired(QNetworkReply*, QAuthenticator*)), this, SLOT(authentication(QNetworkReply*, QAuthenticator*))); connect(this, SIGNAL(authenticationRequired(QNetworkReply*, QAuthenticator*)), this, SLOT(authentication(QNetworkReply*, QAuthenticator*)));
@ -69,6 +68,8 @@ NetworkManager::NetworkManager(QupZilla* mainClass, QObject* parent)
connect(this, SIGNAL(sslErrors(QNetworkReply*, QList<QSslError>)), this, SLOT(sslError(QNetworkReply*, QList<QSslError>))); connect(this, SIGNAL(sslErrors(QNetworkReply*, QList<QSslError>)), this, SLOT(sslError(QNetworkReply*, QList<QSslError>)));
connect(this, SIGNAL(finished(QNetworkReply*)), this, SLOT(setSSLConfiguration(QNetworkReply*))); connect(this, SIGNAL(finished(QNetworkReply*)), this, SLOT(setSSLConfiguration(QNetworkReply*)));
m_schemeHandlers["qupzilla"] = new QupZillaSchemeHandler;
m_proxyFactory = new NetworkProxyFactory(); m_proxyFactory = new NetworkProxyFactory();
setProxyFactory(m_proxyFactory); setProxyFactory(m_proxyFactory);
loadSettings(); loadSettings();
@ -322,6 +323,14 @@ QNetworkReply* NetworkManager::createRequest(QNetworkAccessManager::Operation op
QNetworkRequest req = request; QNetworkRequest req = request;
QNetworkReply* reply = 0; QNetworkReply* reply = 0;
//SchemeHandlers
if (m_schemeHandlers.contains(req.url().scheme())) {
reply = m_schemeHandlers[req.url().scheme()]->createRequest(op, req, outgoingData);
if (reply) {
return reply;
}
}
if (m_doNotTrack) { if (m_doNotTrack) {
req.setRawHeader("DNT", QByteArray("1")); req.setRawHeader("DNT", QByteArray("1"));
} }
@ -332,14 +341,6 @@ QNetworkReply* NetworkManager::createRequest(QNetworkAccessManager::Operation op
req.setRawHeader("Accept-Language", m_acceptLanguage); req.setRawHeader("Accept-Language", m_acceptLanguage);
//SchemeHandlers
if (req.url().scheme() == "qupzilla") {
reply = m_qupzillaSchemeHandler->createRequest(op, req, outgoingData);
if (reply) {
return reply;
}
}
req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true); req.setAttribute(QNetworkRequest::HttpPipeliningAllowedAttribute, true);
if (req.attribute(QNetworkRequest::CacheLoadControlAttribute).toInt() == QNetworkRequest::PreferNetwork) { if (req.attribute(QNetworkRequest::CacheLoadControlAttribute).toInt() == QNetworkRequest::PreferNetwork) {
req.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache); req.setAttribute(QNetworkRequest::CacheLoadControlAttribute, QNetworkRequest::PreferCache);
@ -418,6 +419,16 @@ void NetworkManager::addLocalCertificate(const QSslCertificate &cert)
} }
} }
bool NetworkManager::registerSchemeHandler(const QString &scheme, SchemeHandler* handler)
{
if (m_schemeHandlers.contains(scheme)) {
return false;
}
m_schemeHandlers[scheme] = handler;
return true;
}
void NetworkManager::saveCertificates() void NetworkManager::saveCertificates()
{ {
Settings settings; Settings settings;

View File

@ -30,6 +30,7 @@ class QupZilla;
class AdBlockNetwork; class AdBlockNetwork;
class NetworkProxyFactory; class NetworkProxyFactory;
class QupZillaSchemeHandler; class QupZillaSchemeHandler;
class SchemeHandler;
class QT_QUPZILLA_EXPORT NetworkManager : public NetworkManagerProxy class QT_QUPZILLA_EXPORT NetworkManager : public NetworkManagerProxy
{ {
@ -54,6 +55,8 @@ public:
void setIgnoreAllWarnings(bool state) { m_ignoreAllWarnings = state; } void setIgnoreAllWarnings(bool state) { m_ignoreAllWarnings = state; }
bool isIgnoringAllWarnings() { return m_ignoreAllWarnings; } bool isIgnoringAllWarnings() { return m_ignoreAllWarnings; }
bool registerSchemeHandler(const QString &scheme, SchemeHandler* handler);
void disconnectObjects(); void disconnectObjects();
signals: signals:
@ -71,14 +74,13 @@ private:
QupZilla* p_QupZilla; QupZilla* p_QupZilla;
QNetworkDiskCache* m_diskCache; QNetworkDiskCache* m_diskCache;
NetworkProxyFactory* m_proxyFactory; NetworkProxyFactory* m_proxyFactory;
QupZillaSchemeHandler* m_qupzillaSchemeHandler;
QStringList m_certPaths; QStringList m_certPaths;
QList<QSslCertificate> m_caCerts; QList<QSslCertificate> m_caCerts;
QList<QSslCertificate> m_localCerts; QList<QSslCertificate> m_localCerts;
QList<QSslCertificate> m_ignoredCerts; QList<QSslCertificate> m_ignoredCerts;
QHash<QString, SchemeHandler*> m_schemeHandlers;
QByteArray m_acceptLanguage; QByteArray m_acceptLanguage;
bool m_ignoreAllWarnings; bool m_ignoreAllWarnings;

View File

@ -60,7 +60,8 @@ QupZillaSchemeReply::QupZillaSchemeReply(const QNetworkRequest &req, QObject* pa
setUrl(req.url()); setUrl(req.url());
m_pageName = req.url().path(); m_pageName = req.url().path();
if (m_pageName == "about" || m_pageName == "reportbug" || m_pageName == "start" || m_pageName == "speeddial" || m_pageName == "config") { if (m_pageName == "about" || m_pageName == "reportbug" || m_pageName == "start" ||
m_pageName == "speeddial" || m_pageName == "config") {
m_buffer.open(QIODevice::ReadWrite); m_buffer.open(QIODevice::ReadWrite);
setError(QNetworkReply::NoError, tr("No Error")); setError(QNetworkReply::NoError, tr("No Error"));

View File

@ -18,13 +18,13 @@
#ifndef QUPZILLASCHEMEHANDLER_H #ifndef QUPZILLASCHEMEHANDLER_H
#define QUPZILLASCHEMEHANDLER_H #define QUPZILLASCHEMEHANDLER_H
#include <QNetworkAccessManager>
#include <QNetworkReply> #include <QNetworkReply>
#include <QBuffer> #include <QBuffer>
#include "schemehandler.h"
#include "qz_namespace.h" #include "qz_namespace.h"
class QupZillaSchemeHandler class QT_QUPZILLA_EXPORT QupZillaSchemeHandler : public SchemeHandler
{ {
public: public:
explicit QupZillaSchemeHandler(); explicit QupZillaSchemeHandler();

View File

@ -0,0 +1,22 @@
/* ============================================================
* QupZilla - WebKit based browser
* Copyright (C) 2010-2012 David Rosca <nowrep@gmail.com>
*
* 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
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* ============================================================ */
#include "schemehandler.h"
SchemeHandler::SchemeHandler()
{
}

View File

@ -0,0 +1,33 @@
/* ============================================================
* QupZilla - WebKit based browser
* Copyright (C) 2010-2012 David Rosca <nowrep@gmail.com>
*
* 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
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* ============================================================ */
#ifndef SCHEMEHANDLER_H
#define SCHEMEHANDLER_H
#include <QNetworkAccessManager>
#include "qz_namespace.h"
class QT_QUPZILLA_EXPORT SchemeHandler
{
public:
SchemeHandler();
virtual QNetworkReply* createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &request, QIODevice* outgoingData) = 0;
};
#endif // SCHEMEHANDLER_H

View File

@ -62,7 +62,7 @@ void AboutDialog::showAbout()
#endif #endif
)); ));
m_aboutHtml.append(tr("<b>WebKit version %1</b></p>").arg(QupZilla::WEBKITVERSION)); m_aboutHtml.append(tr("<b>WebKit version %1</b></p>").arg(QupZilla::WEBKITVERSION));
m_aboutHtml.append(tr("<p>&copy; %1 %2<br/>All rights reserved.<br/>").arg(QupZilla::COPYRIGHT, QupZilla::AUTHOR)); m_aboutHtml.append(tr("<p>&copy; %1 %2<br/>").arg(QupZilla::COPYRIGHT, QupZilla::AUTHOR));
m_aboutHtml.append(tr("<small>Build time: %1 </small></p>").arg(QupZilla::BUILDTIME)); m_aboutHtml.append(tr("<small>Build time: %1 </small></p>").arg(QupZilla::BUILDTIME));
m_aboutHtml.append(QString("<p><a href=%1>%1</a></p>").arg(QupZilla::WWWADDRESS)); m_aboutHtml.append(QString("<p><a href=%1>%1</a></p>").arg(QupZilla::WWWADDRESS));
m_aboutHtml.append("<p>" + mApp->getWindow()->weView()->webPage()->userAgentForUrl(QUrl()) + "</p>"); m_aboutHtml.append("<p>" + mApp->getWindow()->weView()->webPage()->userAgentForUrl(QUrl()) + "</p>");

View File

@ -7,7 +7,7 @@
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>381</width> <width>381</width>
<height>440</height> <height>416</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">

View File

@ -0,0 +1,57 @@
/* ============================================================
* QupZilla - WebKit based browser
* Copyright (C) 2010-2012 David Rosca <nowrep@gmail.com>
*
* 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
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* ============================================================ */
#include "checkboxdialog.h"
#include "ui_checkboxdialog.h"
CheckBoxDialog::CheckBoxDialog(const QDialogButtonBox::StandardButtons &buttons, QWidget* parent)
: QDialog(parent)
, ui(new Ui::CheckBoxDialog)
{
ui->setupUi(this);
ui->buttonBox->setStandardButtons(buttons);
}
void CheckBoxDialog::setPixmap(const QPixmap &pixmap)
{
ui->iconLabel->setPixmap(pixmap);
ui->iconLabel->setFixedWidth(pixmap.width());
}
void CheckBoxDialog::setText(const QString &text)
{
ui->textLabel->setText(text);
}
void CheckBoxDialog::setCheckBoxText(const QString &text)
{
ui->checkBox->setText(text);
}
bool CheckBoxDialog::isChecked() const
{
return ui->checkBox->isChecked();
}
int CheckBoxDialog::exec()
{
ui->buttonBox->setFocus();
setMaximumSize(size());
return QDialog::exec();
}

View File

@ -0,0 +1,51 @@
/* ============================================================
* QupZilla - WebKit based browser
* Copyright (C) 2010-2012 David Rosca <nowrep@gmail.com>
*
* 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
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* ============================================================ */
#ifndef CHECKBOXDIALOG_H
#define CHECKBOXDIALOG_H
#include <QDialog>
#include <QDialogButtonBox>
#include "qz_namespace.h"
namespace Ui
{
class CheckBoxDialog;
}
class QT_QUPZILLA_EXPORT CheckBoxDialog : public QDialog
{
Q_OBJECT
public:
explicit CheckBoxDialog(const QDialogButtonBox::StandardButtons &buttons, QWidget* parent = 0);
void setPixmap(const QPixmap &pixmap);
void setText(const QString &text);
void setCheckBoxText(const QString &text);
bool isChecked() const;
public slots:
int exec();
private:
Ui::CheckBoxDialog* ui;
};
#endif // CHECKBOXDIALOG_H

View File

@ -0,0 +1,98 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CheckBoxDialog</class>
<widget class="QDialog" name="CheckBoxDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>409</width>
<height>94</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="iconLabel"/>
</item>
<item>
<widget class="QLabel" name="textLabel">
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
</property>
</widget>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QCheckBox" name="checkBox"/>
</item>
<item>
<widget class="QDialogButtonBox" name="buttonBox">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>CheckBoxDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>CheckBoxDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -1,88 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>CloseDialog</class>
<widget class="QDialog" name="CloseDialog">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>208</width>
<height>98</height>
</rect>
</property>
<property name="windowTitle">
<string>There are still open tabs</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="1">
<widget class="QLabel" name="textLabel">
<property name="text">
<string/>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QDialogButtonBox" name="buttonBox">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="standardButtons">
<set>QDialogButtonBox::No|QDialogButtonBox::Yes</set>
</property>
</widget>
</item>
<item row="0" column="0" rowspan="3">
<widget class="QLabel" name="iconLabel">
<property name="text">
<string/>
</property>
<property name="alignment">
<set>Qt::AlignHCenter|Qt::AlignTop</set>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="dontAskAgain">
<property name="text">
<string>Don't ask again</string>
</property>
</widget>
</item>
</layout>
</widget>
<resources/>
<connections>
<connection>
<sender>buttonBox</sender>
<signal>accepted()</signal>
<receiver>CloseDialog</receiver>
<slot>accept()</slot>
<hints>
<hint type="sourcelabel">
<x>248</x>
<y>254</y>
</hint>
<hint type="destinationlabel">
<x>157</x>
<y>274</y>
</hint>
</hints>
</connection>
<connection>
<sender>buttonBox</sender>
<signal>rejected()</signal>
<receiver>CloseDialog</receiver>
<slot>reject()</slot>
<hints>
<hint type="sourcelabel">
<x>316</x>
<y>260</y>
</hint>
<hint type="destinationlabel">
<x>286</x>
<y>274</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -22,10 +22,10 @@
#include "globalfunctions.h" #include "globalfunctions.h"
#include "iconprovider.h" #include "iconprovider.h"
#include "enhancedmenu.h" #include "enhancedmenu.h"
#include "plaineditwithlines.h"
#include <QBoxLayout> #include <QBoxLayout>
#include <QMenuBar> #include <QMenuBar>
#include <QTextEdit>
#include <QStatusBar> #include <QStatusBar>
#include <QFileDialog> #include <QFileDialog>
#include <QMessageBox> #include <QMessageBox>
@ -39,7 +39,7 @@ SourceViewer::SourceViewer(QWebFrame* frame, const QString &selectedHtml)
setAttribute(Qt::WA_DeleteOnClose); setAttribute(Qt::WA_DeleteOnClose);
setWindowTitle(tr("Source of ") + frame->url().toString()); setWindowTitle(tr("Source of ") + frame->url().toString());
m_layout = new QBoxLayout(QBoxLayout::TopToBottom, this); m_layout = new QBoxLayout(QBoxLayout::TopToBottom, this);
m_sourceEdit = new QTextEdit(this); m_sourceEdit = new PlainEditWithLines(this);
m_sourceEdit->setObjectName("sourceviewer-textedit"); m_sourceEdit->setObjectName("sourceviewer-textedit");
m_statusBar = new QStatusBar(this); m_statusBar = new QStatusBar(this);
@ -175,10 +175,5 @@ void SourceViewer::goToLine()
return; return;
} }
m_sourceEdit->setUpdatesEnabled(false); m_sourceEdit->goToLine(line);
m_sourceEdit->moveCursor(QTextCursor::Start);
for (int i = 0; i < line; i++) {
m_sourceEdit->moveCursor(QTextCursor::Down);
}
m_sourceEdit->setUpdatesEnabled(true);
} }

View File

@ -23,7 +23,8 @@
#include "qz_namespace.h" #include "qz_namespace.h"
class QTextEdit; class PlainEditWithLines;
class QBoxLayout; class QBoxLayout;
class QStatusBar; class QStatusBar;
class QWebFrame; class QWebFrame;
@ -33,7 +34,7 @@ class QT_QUPZILLA_EXPORT SourceViewer : public QWidget
Q_OBJECT Q_OBJECT
public: public:
explicit SourceViewer(QWebFrame* frame, const QString &selectedHtml); explicit SourceViewer(QWebFrame* frame, const QString &selectedHtml);
QTextEdit* sourceEdit() { return m_sourceEdit; } PlainEditWithLines* sourceEdit() { return m_sourceEdit; }
signals: signals:
@ -49,7 +50,7 @@ private slots:
private: private:
QBoxLayout* m_layout; QBoxLayout* m_layout;
QTextEdit* m_sourceEdit; PlainEditWithLines* m_sourceEdit;
QWeakPointer<QWebFrame> m_frame; QWeakPointer<QWebFrame> m_frame;
QStatusBar* m_statusBar; QStatusBar* m_statusBar;
}; };

View File

@ -19,8 +19,8 @@
#include "ui_sourceviewersearch.h" #include "ui_sourceviewersearch.h"
#include "sourceviewer.h" #include "sourceviewer.h"
#include "iconprovider.h" #include "iconprovider.h"
#include "plaineditwithlines.h"
#include <QTextEdit>
#include <QShortcut> #include <QShortcut>
#include <QKeyEvent> #include <QKeyEvent>

View File

@ -19,6 +19,7 @@
#define PLUGINPROXY_H #define PLUGINPROXY_H
#include "mainapplication.h" #include "mainapplication.h"
#include "networkmanager.h"
#include "plugins.h" #include "plugins.h"
#include "qz_namespace.h" #include "qz_namespace.h"
@ -74,5 +75,6 @@ private:
}; };
#define QZ_REGISTER_EVENT_HANDLER(Type) mApp->plugins()->registerAppEventHandler(Type, this); #define QZ_REGISTER_EVENT_HANDLER(Type) mApp->plugins()->registerAppEventHandler(Type, this);
#define QZ_REGISTER_SCHEME_HANDLER(Scheme, Object) mApp->networkManager()->registerSchemeHandler(Scheme, Object);
#endif // PLUGINPROXY_H #endif // PLUGINPROXY_H

View File

@ -173,6 +173,8 @@ QString qz_urlEncodeQueryString(const QUrl &url)
returnString.append(url.encodedFragment()); returnString.append(url.encodedFragment());
} }
returnString.replace(" ", "%20");
return returnString; return returnString;
} }

View File

@ -0,0 +1,199 @@
/****************************************************************************
**
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
** the names of its contributors may be used to endorse or promote
** products derived from this software without specific prior written
** permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/
/* ============================================================
* QupZilla - WebKit based browser
* Copyright (C) 2010-2012 David Rosca <nowrep@gmail.com>
*
* 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
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* ============================================================ */
#include "plaineditwithlines.h"
#include <QPainter>
#include <QTextBlock>
PlainEditWithLines::PlainEditWithLines(QWidget* parent)
: QPlainTextEdit(parent)
, m_lineNumberArea(new LineNumberArea(this))
, m_countCache(-1, -1)
{
connect(this, SIGNAL(blockCountChanged(int)), this, SLOT(updateLineNumberAreaWidth(int)));
connect(this, SIGNAL(updateRequest(QRect, int)), this, SLOT(updateLineNumberArea(QRect, int)));
connect(this, SIGNAL(cursorPositionChanged()), this, SLOT(highlightCurrentLine()));
updateLineNumberAreaWidth(0);
highlightCurrentLine();
}
int PlainEditWithLines::lineNumberAreaWidth()
{
int digits = 1;
int max = qMax(1, blockCount());
while (max >= 10) {
max /= 10;
++digits;
}
int space = 5 + fontMetrics().width(QLatin1Char('9')) * digits;
return space;
}
void PlainEditWithLines::setReadOnly(bool ro)
{
QPlainTextEdit::setReadOnly(ro);
highlightCurrentLine();
}
void PlainEditWithLines::goToLine(int line)
{
setUpdatesEnabled(false);
moveCursor(QTextCursor::Start);
QTextCursor cursor = textCursor();
cursor.movePosition(QTextCursor::NextBlock, QTextCursor::MoveAnchor, line - 1);
setTextCursor(cursor);
setUpdatesEnabled(true);
}
void PlainEditWithLines::updateLineNumberAreaWidth(int /* newBlockCount */)
{
setViewportMargins(lineNumberAreaWidth(), 0, 0, 0);
}
void PlainEditWithLines::updateLineNumberArea(const QRect &rect, int dy)
{
if (dy) {
m_lineNumberArea->scroll(0, dy);
}
else if (m_countCache.first != blockCount() || m_countCache.second != textCursor().block().lineCount()) {
m_lineNumberArea->update(0, rect.y(), m_lineNumberArea->width(), rect.height());
m_countCache.first = blockCount();
m_countCache.second = textCursor().block().lineCount();
}
if (rect.contains(viewport()->rect())) {
updateLineNumberAreaWidth(0);
}
}
void PlainEditWithLines::resizeEvent(QResizeEvent* e)
{
QPlainTextEdit::resizeEvent(e);
QRect cr = contentsRect();
m_lineNumberArea->setGeometry(QRect(cr.left(), cr.top(), lineNumberAreaWidth(), cr.height()));
}
void PlainEditWithLines::highlightCurrentLine()
{
QList<QTextEdit::ExtraSelection> extraSelections;
QTextEdit::ExtraSelection selection;
QColor lineColor = palette().color(QPalette::Highlight).lighter();
selection.format.setBackground(lineColor);
selection.format.setProperty(QTextFormat::FullWidthSelection, true);
selection.cursor = textCursor();
selection.cursor.clearSelection();
extraSelections.append(selection);
setExtraSelections(extraSelections);
}
void PlainEditWithLines::lineNumberAreaPaintEvent(QPaintEvent* event)
{
const QRect &eventRect = event->rect();
QPainter painter(m_lineNumberArea);
painter.fillRect(eventRect, QColor(235, 235, 235));
painter.fillRect(QRect(eventRect.width() - 1, 0, 1, viewport()->height()), QColor(175, 175, 175));
QTextBlock block = firstVisibleBlock();
int blockNumber = block.blockNumber();
int top = (int) blockBoundingGeometry(block).translated(contentOffset()).top();
int bottom = top + (int) blockBoundingRect(block).height();
QColor textColor(175, 175, 175);
while (block.isValid() && top <= eventRect.bottom()) {
if (block.isVisible() && bottom >= eventRect.top()) {
QString number = QString::number(blockNumber + 1);
painter.setPen(textColor);
painter.drawText(0, top, m_lineNumberArea->width() - 3, fontMetrics().height(),
Qt::AlignRight, number);
}
block = block.next();
top = bottom;
bottom = top + (int) blockBoundingRect(block).height();
++blockNumber;
}
}
LineNumberArea::LineNumberArea(PlainEditWithLines* editor)
: QWidget(editor)
, m_codeEditor(editor)
{
}
QSize LineNumberArea::sizeHint() const
{
return QSize(m_codeEditor->lineNumberAreaWidth(), 0);
}
void LineNumberArea::paintEvent(QPaintEvent* event)
{
m_codeEditor->lineNumberAreaPaintEvent(event);
}

View File

@ -0,0 +1,116 @@
/****************************************************************************
**
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
** All rights reserved.
** Contact: Nokia Corporation (qt-info@nokia.com)
**
** This file is part of the examples of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:BSD$
** You may use this file under the terms of the BSD license as follows:
**
** "Redistribution and use in source and binary forms, with or without
** modification, are permitted provided that the following conditions are
** met:
** * Redistributions of source code must retain the above copyright
** notice, this list of conditions and the following disclaimer.
** * Redistributions in binary form must reproduce the above copyright
** notice, this list of conditions and the following disclaimer in
** the documentation and/or other materials provided with the
** distribution.
** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
** the names of its contributors may be used to endorse or promote
** products derived from this software without specific prior written
** permission.
**
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
** $QT_END_LICENSE$
**
****************************************************************************/
/* ============================================================
* QupZilla - WebKit based browser
* Copyright (C) 2010-2012 David Rosca <nowrep@gmail.com>
*
* 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
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
* ============================================================ */
#ifndef PLAINEDITWITHLINES_H
#define PLAINEDITWITHLINES_H
#include <QPlainTextEdit>
#include "qz_namespace.h"
class QPaintEvent;
class QResizeEvent;
class QSize;
class QWidget;
class LineNumberArea;
class QT_QUPZILLA_EXPORT PlainEditWithLines : public QPlainTextEdit
{
Q_OBJECT
public:
explicit PlainEditWithLines(QWidget* parent = 0);
void lineNumberAreaPaintEvent(QPaintEvent* event);
int lineNumberAreaWidth();
void setReadOnly(bool ro);
public slots:
void goToLine(int line);
protected:
void resizeEvent(QResizeEvent* event);
private slots:
void updateLineNumberAreaWidth(int newBlockCount);
void highlightCurrentLine();
void updateLineNumberArea(const QRect &, int);
private:
QWidget* m_lineNumberArea;
QPair<int, int> m_countCache;
};
class QT_QUPZILLA_EXPORT LineNumberArea : public QWidget
{
public:
explicit LineNumberArea(PlainEditWithLines* editor);
QSize sizeHint() const;
protected:
void paintEvent(QPaintEvent* event);
private:
PlainEditWithLines* m_codeEditor;
};
#endif // PLAINEDITWITHLINES_H

View File

@ -27,7 +27,7 @@
#include "ui_jsalert.h" #include "ui_jsalert.h"
#include "ui_jsprompt.h" #include "ui_jsprompt.h"
#endif #endif
#include "ui_closedialog.h" #include "checkboxdialog.h"
#include "widget.h" #include "widget.h"
#include "globalfunctions.h" #include "globalfunctions.h"
#include "pluginproxy.h" #include "pluginproxy.h"
@ -43,6 +43,7 @@
#include <QTimer> #include <QTimer>
#include <QNetworkReply> #include <QNetworkReply>
#include <QDebug> #include <QDebug>
#include <QStyle>
#include <QDesktopServices> #include <QDesktopServices>
#include <QMessageBox> #include <QMessageBox>
#include <QFileDialog> #include <QFileDialog>
@ -80,6 +81,10 @@ WebPage::WebPage(QupZilla* mainClass)
connect(this, SIGNAL(windowCloseRequested()), this, SLOT(windowCloseRequested())); connect(this, SIGNAL(windowCloseRequested()), this, SLOT(windowCloseRequested()));
connect(mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(addJavaScriptObject())); connect(mainFrame(), SIGNAL(javaScriptWindowObjectCleared()), this, SLOT(addJavaScriptObject()));
#if (QTWEBKIT_VERSION >= QTWEBKIT_VERSION_CHECK(2, 2, 0))
connect(this, SIGNAL(featurePermissionRequested(QWebFrame*, QWebPage::Feature)), this, SLOT(featurePermissionRequested(QWebFrame*, QWebPage::Feature)));
#endif
} }
QUrl WebPage::url() const QUrl WebPage::url() const
@ -281,6 +286,13 @@ void WebPage::windowCloseRequested()
webView->closeView(); webView->closeView();
} }
#if (QTWEBKIT_VERSION >= QTWEBKIT_VERSION_CHECK(2, 2, 0))
void WebPage::featurePermissionRequested(QWebFrame* frame, const QWebPage::Feature &feature)
{
// We should probably ask user here ... -,-
setFeaturePermission(frame, feature, PermissionGrantedByUser);
}
#endif
void WebPage::setSSLCertificate(const QSslCertificate &cert) void WebPage::setSSLCertificate(const QSslCertificate &cert)
{ {
@ -645,22 +657,20 @@ void WebPage::javaScriptAlert(QWebFrame* originatingFrame, const QString &msg)
} }
#ifndef NONBLOCK_JS_DIALOGS #ifndef NONBLOCK_JS_DIALOGS
QDialog* dialog = new QDialog(view()); QString title = tr("JavaScript alert");
Ui_CloseDialog* ui = new Ui_CloseDialog(); if (!url().host().isEmpty()) {
ui->setupUi(dialog); title.append(QString(" - %1").arg(url().host()));
ui->buttonBox->setStandardButtons(QDialogButtonBox::Ok);
ui->dontAskAgain->setText(tr("Prevent this page from creating additional dialogs"));
ui->textLabel->setText(msg);
ui->iconLabel->setPixmap(mApp->style()->standardPixmap(QStyle::SP_MessageBoxInformation));
ui->buttonBox->setFocus();
dialog->setWindowTitle(tr("JavaScript alert - %1").arg(url().host()));
dialog->exec();
if (ui->dontAskAgain->isChecked()) {
m_blockAlerts = true;
} }
delete dialog; CheckBoxDialog dialog(QDialogButtonBox::Ok, view());
dialog.setWindowTitle(title);
dialog.setText(msg);
dialog.setCheckBoxText(tr("Prevent this page from creating additional dialogs"));
dialog.setPixmap(mApp->style()->standardPixmap(QStyle::SP_MessageBoxInformation));
dialog.exec();
m_blockAlerts = dialog.isChecked();
#else #else
WebView* webView = qobject_cast<WebView*>(originatingFrame->page()->view()); WebView* webView = qobject_cast<WebView*>(originatingFrame->page()->view());
ResizableFrame* widget = new ResizableFrame(webView->overlayForJsAlert()); ResizableFrame* widget = new ResizableFrame(webView->overlayForJsAlert());

View File

@ -91,6 +91,10 @@ private slots:
void downloadRequested(const QNetworkRequest &request); void downloadRequested(const QNetworkRequest &request);
void windowCloseRequested(); void windowCloseRequested();
#if (QTWEBKIT_VERSION >= QTWEBKIT_VERSION_CHECK(2, 2, 0))
void featurePermissionRequested(QWebFrame* frame, const QWebPage::Feature &feature);
#endif
private: private:
virtual bool supportsExtension(Extension extension) const; virtual bool supportsExtension(Extension extension) const;
virtual bool extension(Extension extension, const ExtensionOption* option, ExtensionReturn* output = 0); virtual bool extension(Extension extension, const ExtensionOption* option, ExtensionReturn* output = 0);