--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/ginebra/chromerenderer.cpp Tue May 04 12:39:35 2010 +0300
@@ -0,0 +1,253 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+
+#include "chromerenderer.h"
+#include "chromewidget.h"
+#include <Qt>
+#include <QNetworkProxy>
+#include <QNetworkAccessManager>
+// -------------------------------------------------------
+
+// Simple wrapper class for QWebPage to allow intercepting of javascript errors in the chrome.
+class ChromeWebPage : public QWebPage {
+ public:
+ ChromeWebPage(ChromeRenderer *renderer) : QWebPage(renderer) {
+ qDebug() << "ChromeWebPage::ChromeWebPage";
+ #if (defined(Q_OS_SYMBIAN) && !defined(Q_CC_NOKIAX86))
+ // empty proxy only for ARMV5 Symbian targets
+ #else
+ networkAccessManager()->setProxy((QNetworkProxy(QNetworkProxy::HttpProxy,QString("bswebproxy01.americas.nokia.com"), 8080)));
+ #endif
+ }
+
+ // Called when javascript errors are hit in the chrome page.
+ virtual void javaScriptConsoleMessage(const QString & message, int lineNumber, const QString & sourceID) {
+ qDebug() << "Chrome javascript error:";
+ qDebug() << (const char*)QString(" %1:%2 %3")
+ .arg(sourceID)
+ .arg(lineNumber)
+ .arg(message).toAscii();
+ }
+};
+
+
+// -------------------------------------------------------
+
+ChromeRenderer::ChromeRenderer(QWidget *parent)
+ : QWidget(parent),
+ m_page(0),
+ m_widget(0)
+{
+ setMouseTracking(true);
+}
+
+ChromeRenderer::~ChromeRenderer()
+{
+ if (m_page)
+ m_page->setView(0);
+
+ if (m_page && m_page->parent() == this)
+ delete m_page;
+}
+
+QSize ChromeRenderer::sizeHint() const
+{
+ return QSize(1,1);
+}
+
+QWebPage *ChromeRenderer::page() const
+{
+ if (!m_page) {
+ ChromeRenderer *that = const_cast<ChromeRenderer *>(this);
+ that->setPage(new ChromeWebPage(that));
+ }
+ return m_page;
+}
+
+void ChromeRenderer::setPage(QWebPage* page){
+ if (m_page == page)
+ return;
+ if (m_page) {
+ if (m_page->parent() == this) {
+ delete m_page;
+ } else {
+ m_page->disconnect(this);
+ }
+ }
+ m_page = page;
+ if (m_page) {
+ m_page->setView(this);
+ m_page->setPalette(palette());
+ connect(m_page, SIGNAL(microFocusChanged()),
+ this, SLOT(updateMicroFocus()));
+ }
+ //setAttribute(Qt::WA_OpaquePaintEvent, m_page); // Needed?
+
+ update();
+}
+
+
+bool ChromeRenderer::event(QEvent *e)
+{
+ //qDebug() << "ChromeRenderer::event " << e;
+ if (m_page) {
+ if (e->type() == QEvent::ShortcutOverride) {
+ m_page->event(e);
+
+ } else if (e->type() == QEvent::Leave) {
+ m_page->event(e);
+ }
+ }
+
+ return QWidget::event(e);
+}
+/*
+void ChromeRenderer::resizeEvent(QResizeEvent *e)
+{
+ if (m_page)
+ m_page->setViewportSize(e->size());
+}
+
+
+void ChromeRenderer::paintEvent(QPaintEvent *ev)
+{
+ qDebug() << "ChromeRenderer::paintEvent: " << ev;
+ //if (!m_widget)
+ // return;
+
+ //QWebFrame *frame = m_page->mainFrame();
+ //QPainter p(this);
+
+ //frame->render(&p, ev->region());
+ //m_widget->repaintRequested(ev->rect());
+
+}
+
+void ChromeRenderer::mouseMoveEvent(QMouseEvent* ev)
+{
+ if (m_page) {
+ const bool accepted = ev->isAccepted();
+ m_page->event(ev);
+ ev->setAccepted(accepted);
+ }
+}
+
+void ChromeRenderer::mousePressEvent(QMouseEvent* ev)
+{
+ qDebug() << "ChromeRenderer::mousePressEvent: " << ev;
+ if (m_page) {
+ const bool accepted = ev->isAccepted();
+ m_page->event(ev);
+ ev->setAccepted(accepted);
+ }
+}
+
+void ChromeRenderer::mouseDoubleClickEvent(QMouseEvent* ev)
+{
+ if (m_page) {
+ const bool accepted = ev->isAccepted();
+ m_page->event(ev);
+ ev->setAccepted(accepted);
+ }
+}
+
+void ChromeRenderer::mouseReleaseEvent(QMouseEvent* ev)
+{
+ if (m_page) {
+ const bool accepted = ev->isAccepted();
+ m_page->event(ev);
+ ev->setAccepted(accepted);
+ }
+}*/
+
+void ChromeRenderer::keyPressEvent(QKeyEvent* ev)
+{
+ //qDebug() << "ChromeRenderer::keyPressEvent: " << ev;
+ bool isAccepted(ev->isAccepted());
+ if (m_page){
+ m_page->event(ev);
+ isAccepted = ev->isAccepted();
+ }
+#ifdef Q_OS_SYMBIAN //this is the hack for symbian fep key handler
+ if(!isAccepted && (ev->key() == Qt::Key_Select || ev->key() == Qt::Key_Return || ev->key() == Qt::Key_Enter)) {
+ emit symbianCarriageReturn();
+ isAccepted = ev->isAccepted();
+ }
+#endif
+ if (!ev->isAccepted()) {
+ //qDebug() << "ChromeRenderer::keyPressEvent: -> accepted";
+ QWidget::keyPressEvent(ev);
+ }
+}
+
+void ChromeRenderer::keyReleaseEvent(QKeyEvent* ev)
+{
+ if (m_page)
+ m_page->event(ev);
+ if (!ev->isAccepted())
+ QWidget::keyReleaseEvent(ev);
+}
+
+void ChromeRenderer::focusInEvent(QFocusEvent* ev)
+{
+ //qDebug() << "ChromeRenderer::focusInEvent: " << ev;
+ if (m_page && ev->reason() != Qt::PopupFocusReason)
+ m_page->event(ev);
+ else
+ QWidget::focusInEvent(ev);
+}
+
+void ChromeRenderer::focusOutEvent(QFocusEvent* ev)
+{
+ //qDebug() << "ChromeRenderer::focusOutEvent: " << ev;
+ if (m_page)
+ m_page->event(ev);
+ else
+ QWidget::focusOutEvent(ev);
+}
+
+bool ChromeRenderer::focusNextPrevChild(bool next)
+{
+ if (m_page && m_page->focusNextPrevChild(next))
+ return true;
+ return QWidget::focusNextPrevChild(next);
+}
+
+void ChromeRenderer::inputMethodEvent(QInputMethodEvent *e)
+{
+ if (m_page)
+ m_page->event(e);
+}
+
+QVariant ChromeRenderer::inputMethodQuery(Qt::InputMethodQuery property) const
+{
+ if (m_page)
+ return m_page->inputMethodQuery(property);
+
+ return QVariant();
+}
+
+/*
+void ChromeRenderer::changeEvent(QEvent *e)
+{
+ if (m_page && e->type() == QEvent::PaletteChange) {
+ m_page->setPalette(palette());
+ }
+ QWidget::changeEvent(e);
+}
+*/