Changeset 56546 in webkit


Ignore:
Timestamp:
Mar 25, 2010 8:06:10 AM (14 years ago)
Author:
eric@webkit.org
Message:

2010-03-25 yael aharon <yael.aharon@nokia.com>

Reviewed by Laszlo Gombos.

[Qt] Windowed netscape plugins don't work with QGraphicsWebView on Symbian
https://bugs.webkit.org/show_bug.cgi?id=35112

Add a proxy widget when loading a QWidget based plugin in a QGraphicsWebView.

  • plugins/symbian/PluginContainerSymbian.cpp: (PluginContainerSymbian::PluginContainerSymbian): (PluginContainerSymbian::focusInEvent):
  • plugins/symbian/PluginContainerSymbian.h: (WebCore::PluginContainerSymbian::proxy):
  • plugins/symbian/PluginViewSymbian.cpp: (WebCore::PluginView::updatePluginWidget): (WebCore::PluginView::platformStart): (WebCore::PluginView::platformDestroy):
Location:
trunk/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r56543 r56546  
     12010-03-25  yael aharon  <yael.aharon@nokia.com>
     2
     3        Reviewed by Laszlo Gombos.
     4
     5        [Qt] Windowed netscape plugins don't work with QGraphicsWebView on Symbian
     6        https://bugs.webkit.org/show_bug.cgi?id=35112
     7
     8        Add a proxy widget when loading a QWidget based plugin in a QGraphicsWebView.
     9
     10        * plugins/symbian/PluginContainerSymbian.cpp:
     11        (PluginContainerSymbian::PluginContainerSymbian):
     12        (PluginContainerSymbian::focusInEvent):
     13        * plugins/symbian/PluginContainerSymbian.h:
     14        (WebCore::PluginContainerSymbian::proxy):
     15        * plugins/symbian/PluginViewSymbian.cpp:
     16        (WebCore::PluginView::updatePluginWidget):
     17        (WebCore::PluginView::platformStart):
     18        (WebCore::PluginView::platformDestroy):
     19
    1202010-03-25  Simon Fraser  <simon.fraser@apple.com>
    221
  • trunk/WebCore/plugins/symbian/PluginContainerSymbian.cpp

    r49574 r56546  
    3333using namespace WebCore;
    3434
    35 PluginContainerSymbian::PluginContainerSymbian(PluginView* view, QWidget* parent)
    36     : m_parent(parent)
     35PluginContainerSymbian::PluginContainerSymbian(PluginView* view, QWidget* parent, QGraphicsProxyWidget* proxy)
     36    : QWidget(parent)
    3737    , m_pluginView(view)
     38    , m_proxy(proxy)
    3839    , m_hasPendingGeometryChange(false)
    3940{
    40     setParent(m_parent);
    4141}
    4242
     
    6363}
    6464
    65 void PluginContainerSymbian::focusInEvent(QFocusEvent* event)
     65void PluginContainerSymbian::focusInEvent(QFocusEvent*)
    6666{
    6767    if (Page* page = m_pluginView->parentFrame()->page())
  • trunk/WebCore/plugins/symbian/PluginContainerSymbian.h

    r49574 r56546  
    2323#include <QWidget>
    2424
     25class QGraphicsProxyWidget;
     26
    2527namespace WebCore {
    2628
     
    3032        Q_OBJECT
    3133    public:
    32         PluginContainerSymbian(PluginView*, QWidget* parent);
     34        PluginContainerSymbian(PluginView*, QWidget* parent, QGraphicsProxyWidget* proxy = 0);
    3335        ~PluginContainerSymbian();
    3436
    3537        void requestGeometry(const QRect&, const QRegion& clip = QRegion());
    3638        void adjustGeometry();
     39        QGraphicsProxyWidget* proxy() { return m_proxy; }
    3740
    3841    protected:
     
    4144    private:
    4245        PluginView* m_pluginView;
    43         QWidget* m_parent;
     46        QGraphicsProxyWidget* m_proxy;
    4447        QRect m_windowRect;
    4548        QRegion m_clipRegion;
  • trunk/WebCore/plugins/symbian/PluginViewSymbian.cpp

    r55432 r56546  
    5353#include "npinterface.h"
    5454#include "npruntime_impl.h"
     55#include "qgraphicswebview.h"
    5556#include "runtime_root.h"
     57#include <QGraphicsProxyWidget>
    5658#include <QKeyEvent>
    5759#include <QPixmap>
     
    8688   
    8789    m_windowRect = IntRect(frameView->contentsToWindow(frameRect().location()), frameRect().size());
     90   
    8891    m_clipRect = windowClipRect();
    8992    m_clipRect.move(-m_windowRect.x(), -m_windowRect.y());
     
    388391    if (m_isWindowed) {
    389392        QWebPageClient* client = m_parentFrame->view()->hostWindow()->platformPageClient();
    390         // FIXME this will not work for QGraphicsView.
    391         // But we cannot use winId because it will create a window and on S60,
    392         // QWidgets should not create a window.
    393         Q_ASSERT(qobject_cast<QWidget*>(client->pluginParent()));
    394         setPlatformWidget(new PluginContainerSymbian(this,
    395             qobject_cast<QWidget*>(client->pluginParent())));
     393        QGraphicsProxyWidget* proxy = 0;
     394        if (QGraphicsWebView *webView = qobject_cast<QGraphicsWebView*>(client->pluginParent()))
     395            proxy = new QGraphicsProxyWidget(webView);
     396
     397        PluginContainerSymbian* container = new PluginContainerSymbian(this, proxy ? 0 : client->ownerWidget(), proxy);
     398        setPlatformWidget(container);
     399        if (proxy)
     400            proxy->setWidget(container);
     401       
    396402        m_npWindow.type = NPWindowTypeWindow;
    397403        m_npWindow.window = (void*)platformPluginWidget();
     
    409415void PluginView::platformDestroy()
    410416{
    411     delete platformPluginWidget();
     417    QWebPageClient* client = m_parentFrame->view()->hostWindow()->platformPageClient();
     418    if (QGraphicsWebView *webView = qobject_cast<QGraphicsWebView*>(client->pluginParent()))
     419        delete static_cast<PluginContainerSymbian*>(platformPluginWidget())->proxy();
     420    else
     421        delete platformPluginWidget();
    412422}
    413423
Note: See TracChangeset for help on using the changeset viewer.