Changeset 85196 in webkit


Ignore:
Timestamp:
Apr 28, 2011 9:39:18 AM (13 years ago)
Author:
Carlos Garcia Campos
Message:

2011-04-28 Carlos Garcia Campos <cgarcia@igalia.com>

Reviewed by Martin Robinson.

[GTK] Create the page client in the view widget
https://bugs.webkit.org/show_bug.cgi?id=59679

  • UIProcess/API/C/gtk/WKView.cpp: (WKViewCreate): Simply create a new view widget and return it. (WKViewGetPage): Use webkitWebViewBaseGetPage().
  • UIProcess/API/gtk/WebKitWebViewBase.cpp: (webkitWebViewBaseFinalize): Use finalize instead of dispose to make sure it's called only once, and release the private struct too. (webkitWebViewBaseInit): Create the page client. (webkitWebViewBaseClassInit): Don't use GObject private data structure. (webkitWebViewBaseCreate): New method to create a WebKitWebViewBase for a given context and page group. (webkitWebViewBaseGetWebViewInstance): (webkitWebViewBaseGetPage):
  • UIProcess/API/gtk/WebKitWebViewBase.h:
  • UIProcess/gtk/WebView.cpp: (WebKit::WebView::page): Get the page from the view widget. (WebKit::WebView::handleFocusInEvent): Ditto. (WebKit::WebView::handleFocusOutEvent): Ditto. (WebKit::WebView::WebView): Page client is now created with a view widget. (WebKit::WebView::paint): Get the page from the view widget. (WebKit::WebView::setSize): Ditto. (WebKit::WebView::handleKeyboardEvent): Ditto. (WebKit::WebView::handleMouseEvent): Ditto. (WebKit::WebView::handleWheelEvent): Ditto. (WebKit::WebView::close): Ditto. (WebKit::WebView::createDrawingAreaProxy): Ditto.
  • UIProcess/gtk/WebView.h: (WebKit::WebView::create): The page client will be created as private by the view widget, so it doesn't need to be ref counted, use PassOwnPtr instead of PassRefPtr.
Location:
trunk/Source/WebKit2
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r85193 r85196  
     12011-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        Reviewed by Martin Robinson.
     4
     5        [GTK] Create the page client in the view widget
     6        https://bugs.webkit.org/show_bug.cgi?id=59679
     7
     8        * UIProcess/API/C/gtk/WKView.cpp:
     9        (WKViewCreate): Simply create a new view widget and return it.
     10        (WKViewGetPage): Use webkitWebViewBaseGetPage().
     11        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
     12        (webkitWebViewBaseFinalize): Use finalize instead of dispose to
     13        make sure it's called only once, and release the private struct too.
     14        (webkitWebViewBaseInit): Create the page client.
     15        (webkitWebViewBaseClassInit): Don't use GObject private data structure.
     16        (webkitWebViewBaseCreate): New method to create a
     17        WebKitWebViewBase for a given context and page group.
     18        (webkitWebViewBaseGetWebViewInstance):
     19        (webkitWebViewBaseGetPage):
     20        * UIProcess/API/gtk/WebKitWebViewBase.h:
     21        * UIProcess/gtk/WebView.cpp:
     22        (WebKit::WebView::page): Get the page from the view widget.
     23        (WebKit::WebView::handleFocusInEvent): Ditto.
     24        (WebKit::WebView::handleFocusOutEvent): Ditto.
     25        (WebKit::WebView::WebView): Page client is now created with a view widget.
     26        (WebKit::WebView::paint): Get the page from the view widget.
     27        (WebKit::WebView::setSize): Ditto.
     28        (WebKit::WebView::handleKeyboardEvent): Ditto.
     29        (WebKit::WebView::handleMouseEvent): Ditto.
     30        (WebKit::WebView::handleWheelEvent): Ditto.
     31        (WebKit::WebView::close): Ditto.
     32        (WebKit::WebView::createDrawingAreaProxy): Ditto.
     33        * UIProcess/gtk/WebView.h:
     34        (WebKit::WebView::create): The page client will be created as
     35        private by the view widget, so it doesn't need to be ref counted,
     36        use PassOwnPtr instead of PassRefPtr.
     37
    1382011-04-28  Carlos Garcia Campos  <cgarcia@igalia.com>
    239
  • trunk/Source/WebKit2/UIProcess/API/C/gtk/WKView.cpp

    r85192 r85196  
    4141WKViewRef WKViewCreate(WKContextRef contextRef, WKPageGroupRef pageGroupRef)
    4242{
    43     RefPtr<WebView> view = WebView::create(toImpl(contextRef), toImpl(pageGroupRef));
    44     return toAPI(WEBKIT_WEB_VIEW_BASE(view.release().leakRef()->window()));
     43    return toAPI(webkitWebViewBaseCreate(toImpl(contextRef), toImpl(pageGroupRef)));
    4544}
    4645
    4746WKPageRef WKViewGetPage(WKViewRef viewRef)
    4847{
    49     return toAPI(webkitWebViewBaseGetWebViewInstance(toImpl(viewRef))->page());
     48    return toAPI(webkitWebViewBaseGetPage(toImpl(viewRef)));
    5049}
    5150
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp

    r85193 r85196  
    3333#include "NotImplemented.h"
    3434#include "RefPtrCairo.h"
     35#include "WebContext.h"
     36#include "WebPageProxy.h"
     37#include <WebKit2/WKContext.h>
    3538
    3639using namespace WebKit;
     
    4043
    4144struct _WebKitWebViewBasePrivate {
    42     WebView* webViewInstance;
     45    OwnPtr<WebView> webViewInstance;
     46    RefPtr<WebPageProxy> page;
    4347    GtkIMContext* imContext;
    4448    gint currentClickCount;
     
    107111}
    108112
    109 static void webkitWebViewBaseDispose(GObject* gobject)
     113static void webkitWebViewBaseFinalize(GObject* gobject)
    110114{
    111115    WebKitWebViewBase* webkitWebViewBase = WEBKIT_WEB_VIEW_BASE(gobject);
     
    117121    }
    118122
    119     G_OBJECT_CLASS(webkitWebViewBaseParentClass)->dispose(gobject);
     123    priv->page->close();
     124
     125    delete priv;
     126    webkitWebViewBase->priv = 0;
     127
     128    G_OBJECT_CLASS(webkitWebViewBaseParentClass)->finalize(gobject);
    120129}
    121130
    122131static void webkitWebViewBaseInit(WebKitWebViewBase* webkitWebViewBase)
    123132{
    124     WebKitWebViewBasePrivate* priv = G_TYPE_INSTANCE_GET_PRIVATE(webkitWebViewBase, WEBKIT_TYPE_WEB_VIEW_BASE, WebKitWebViewBasePrivate);
     133    WebKitWebViewBasePrivate* priv = new WebKitWebViewBasePrivate();
    125134    webkitWebViewBase->priv = priv;
    126135
     
    131140    priv->previousClickButton = 0;
    132141    priv->previousClickTime = 0;
     142
     143    priv->webViewInstance = WebView::create(GTK_WIDGET(webkitWebViewBase));
    133144}
    134145
     
    335346
    336347    GObjectClass* gobjectClass = G_OBJECT_CLASS(webkitWebViewBaseClass);
    337     gobjectClass->dispose = webkitWebViewBaseDispose;
     348    gobjectClass->finalize = webkitWebViewBaseFinalize;
    338349
    339350    GtkContainerClass* containerClass = GTK_CONTAINER_CLASS(webkitWebViewBaseClass);
    340351    containerClass->add = webkitWebViewBaseContainerAdd;
    341 
    342     g_type_class_add_private(webkitWebViewBaseClass, sizeof(WebKitWebViewBasePrivate));
    343352}
    344353
     
    362371}
    363372
     373WebKitWebViewBase* webkitWebViewBaseCreate(WebContext* context, WebPageGroup* pageGroup)
     374{
     375    WebKitWebViewBase* webkitWebViewBase = WEBKIT_WEB_VIEW_BASE(g_object_new(WEBKIT_TYPE_WEB_VIEW_BASE, NULL));
     376    WebKitWebViewBasePrivate* priv = webkitWebViewBase->priv;
     377
     378    priv->page = context->createWebPage(priv->webViewInstance.get(), pageGroup);
     379    priv->page->initializeWebPage();
     380
     381    return webkitWebViewBase;
     382}
     383
    364384WebView* webkitWebViewBaseGetWebViewInstance(WebKitWebViewBase* webkitWebViewBase)
    365385{
    366     return webkitWebViewBase->priv->webViewInstance;
    367 }
    368 
    369 void webkitWebViewBaseSetWebViewInstance(WebKitWebViewBase* webkitWebViewBase, WebView* webViewInstance)
    370 {
    371     webkitWebViewBase->priv->webViewInstance = webViewInstance;
     386    return webkitWebViewBase->priv->webViewInstance.get();
    372387}
    373388
     
    379394WebPageProxy* webkitWebViewBaseGetPage(WebKitWebViewBase* webkitWebViewBase)
    380395{
    381     return webkitWebViewBase->priv->webViewInstance->page();
    382 }
     396    return webkitWebViewBase->priv->page.get();
     397}
  • trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.h

    r85193 r85196  
    6060GType webkitWebViewBaseGetType();
    6161
     62WebKitWebViewBase* webkitWebViewBaseCreate(WebContext*, WebPageGroup*);
     63
    6264WebView* webkitWebViewBaseGetWebViewInstance(WebKitWebViewBase*);
    63 
    64 void webkitWebViewBaseSetWebViewInstance(WebKitWebViewBase*, WebView*);
    6565
    6666GtkIMContext* webkitWebViewBaseGetIMContext(WebKitWebViewBase*);
  • trunk/Source/WebKit2/UIProcess/gtk/WebView.cpp

    r85193 r85196  
    4646namespace WebKit {
    4747
     48WebPageProxy* WebView::page() const
     49{
     50    return webkitWebViewBaseGetPage(WEBKIT_WEB_VIEW_BASE(m_viewWidget));
     51}
     52
    4853void WebView::handleFocusInEvent(GtkWidget* widget)
    4954{
    5055    if (!(m_isPageActive)) {
    5156        m_isPageActive = true;
    52         m_page->viewStateDidChange(WebPageProxy::ViewWindowIsActive);
     57        page()->viewStateDidChange(WebPageProxy::ViewWindowIsActive);
    5358    }
    5459
    55     m_page->viewStateDidChange(WebPageProxy::ViewIsFocused);
     60    page()->viewStateDidChange(WebPageProxy::ViewIsFocused);
    5661}
    5762
     
    5964{
    6065    m_isPageActive = false;
    61     m_page->viewStateDidChange(WebPageProxy::ViewWindowIsActive);
     66    page()->viewStateDidChange(WebPageProxy::ViewWindowIsActive);
    6267}
    6368
     
    238243};
    239244
    240 WebView::WebView(WebContext* context, WebPageGroup* pageGroup)
    241     : m_isPageActive(true)
     245WebView::WebView(GtkWidget* viewWidget)
     246    : m_viewWidget(viewWidget)
     247    , m_isPageActive(true)
    242248    , m_nativeWidget(gtk_text_view_new())
    243249{
    244     m_page = context->createWebPage(this, pageGroup);
    245 
    246     m_viewWidget = static_cast<GtkWidget*>(g_object_new(WEBKIT_TYPE_WEB_VIEW_BASE, NULL));
    247     ASSERT(m_viewWidget);
    248 
    249     m_page->initializeWebPage();
    250 
    251     WebKitWebViewBase* webViewWidget = WEBKIT_WEB_VIEW_BASE(m_viewWidget);
    252     webkitWebViewBaseSetWebViewInstance(webViewWidget, this);
    253 
    254250    g_signal_connect(m_nativeWidget.get(), "backspace", G_CALLBACK(backspaceCallback), this);
    255251    g_signal_connect(m_nativeWidget.get(), "cut-clipboard", G_CALLBACK(cutClipboardCallback), this);
     
    270266void WebView::paint(GtkWidget* widget, GdkRectangle rect, cairo_t* cr)
    271267{
    272     m_page->drawingArea()->paint(IntRect(rect), cr);
     268    page()->drawingArea()->paint(IntRect(rect), cr);
    273269}
    274270
    275271void WebView::setSize(GtkWidget*, IntSize windowSize)
    276272{
    277     m_page->drawingArea()->setSize(windowSize, IntSize());
     273    page()->drawingArea()->setSize(windowSize, IntSize());
    278274}
    279275
    280276void WebView::handleKeyboardEvent(GdkEventKey* event)
    281277{
    282     m_page->handleKeyboardEvent(NativeWebKeyboardEvent(reinterpret_cast<GdkEvent*>(event)));
     278    page()->handleKeyboardEvent(NativeWebKeyboardEvent(reinterpret_cast<GdkEvent*>(event)));
    283279}
    284280
    285281void WebView::handleMouseEvent(GdkEvent* event, int currentClickCount)
    286282{
    287     m_page->handleMouseEvent(NativeWebMouseEvent(event, currentClickCount));
     283    page()->handleMouseEvent(NativeWebMouseEvent(event, currentClickCount));
    288284}
    289285
    290286void WebView::handleWheelEvent(GdkEventScroll* event)
    291287{
    292     m_page->handleWheelEvent(WebEventFactory::createWebWheelEvent(event));
     288    page()->handleWheelEvent(WebEventFactory::createWebWheelEvent(event));
    293289}
    294290
     
    346342void WebView::close()
    347343{
    348     m_page->close();
     344    page()->close();
    349345}
    350346
     
    352348PassOwnPtr<DrawingAreaProxy> WebView::createDrawingAreaProxy()
    353349{
    354     return ChunkedUpdateDrawingAreaProxy::create(WEBKIT_WEB_VIEW_BASE(m_viewWidget), m_page.get());
     350    return ChunkedUpdateDrawingAreaProxy::create(WEBKIT_WEB_VIEW_BASE(m_viewWidget), page());
    355351}
    356352
  • trunk/Source/WebKit2/UIProcess/gtk/WebView.h

    r85193 r85196  
    3434#include <WebCore/IntSize.h>
    3535#include <gtk/gtk.h>
    36 #include <wtf/PassRefPtr.h>
    37 #include <wtf/RefCounted.h>
    38 #include <wtf/RefPtr.h>
    3936
    4037namespace WebKit {
     
    4340class WebPageNamespace;
    4441
    45 class WebView : public RefCounted<WebView>, public PageClient {
     42class WebView : public PageClient {
    4643public:
    4744    ~WebView();
    48     static PassRefPtr<WebView> create(WebContext* context, WebPageGroup* pageGroup)
     45    static PassOwnPtr<WebView> create(GtkWidget* viewWidget)
    4946    {
    50         return adoptRef(new WebView(context, pageGroup));
     47        return adoptPtr(new WebView(viewWidget));
    5148    }
    5249
    53     GtkWidget* window() const { return m_viewWidget; }
    54 
    55     WebPageProxy* page() const { return m_page.get(); }
     50    WebPageProxy* page() const;
    5651
    5752    void handleFocusInEvent(GtkWidget*);
     
    6762
    6863private:
    69     WebView(WebContext*, WebPageGroup*);
     64    WebView(GtkWidget*);
    7065
    7166    bool isActive();
     
    121116    GtkWidget* m_viewWidget;
    122117    bool m_isPageActive;
    123     RefPtr<WebPageProxy> m_page;
    124118    Vector<WTF::String> m_pendingEditorCommands;
    125119    GRefPtr<GtkWidget> m_nativeWidget;
Note: See TracChangeset for help on using the changeset viewer.