[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    playground/libs/webkitkde
From:       Urs Wolfer <uwolfer () kde ! org>
Date:       2009-05-11 21:22:47
Message-ID: 1242076967.622038.21272.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 966797 by uwolfer:

Performace optimization:
Create the page when it is needed, not in the ctor.
Patch by Paweł Prażak, thanks.
CCMAIL:kojot350@gmail.com

 M  +20 -8     kdewebkit/kwebview.cpp  
 M  +24 -2     kdewebkit/kwebview.h  
 M  +5 -1      part/webview.cpp  
 M  +1 -0      part/webview.h  


--- trunk/playground/libs/webkitkde/kdewebkit/kwebview.cpp #966796:966797
@@ -46,19 +46,20 @@
     , keyboardModifiers(Qt::NoModifier)
     , pressedButtons(Qt::NoButton)
     , searchBar(0)
+    , page(0)
     {}
+    
     bool customContextMenu;
     Qt::KeyboardModifiers keyboardModifiers;
     Qt::MouseButtons pressedButtons;
     KDEPrivate::SearchBar *searchBar;
+    KWebPage *page;
 };
 
 
 KWebView::KWebView(QWidget *parent)
     : QWebView(parent), d(new KWebView::KWebViewPrivate())
-{
-    setPage(new KWebPage(this));
-}
+{}
 
 KWebView::~KWebView()
 {
@@ -79,15 +80,26 @@
     d->customContextMenu = show;
 }
 
-KWebPage *KWebView::page()
+KWebPage *KWebView::page() const
 {
-    KWebPage *webPage = qobject_cast<KWebPage*>(QWebView::page());
-    if (!webPage) {
-        return 0;
+    if (!d->page) {
+        KWebView *that = const_cast<KWebView *>(this);
+        that->setNewPage();
     }
-    return webPage;
+    return d->page;
 }
 
+void KWebView::setNewPage()
+{
+    setPage(new KWebPage(this));
+}
+
+void KWebView::setPage(KWebPage *page)
+{
+    d->page = page;
+    QWebView::setPage(page);
+}
+
 void KWebView::wheelEvent(QWheelEvent *event)
 {
     if (QApplication::keyboardModifiers() & Qt::ControlModifier) {
--- trunk/playground/libs/webkitkde/kdewebkit/kwebview.h #966796:966797
@@ -44,9 +44,19 @@
 {
     Q_OBJECT
 public:
-    KWebView(QWidget *parent = 0);
+    explicit KWebView(QWidget *parent = 0);
     ~KWebView();
-    KWebPage *page();
+    /**
+     * This method returns the current KWebPage, if there is none, one will be \
created. +     * It calles virtual method setNewPage() to create new (K)WebPage, so
+     * of you reimplements KWebPage ypu should reimplement this setNewPage()
+     * @see setPage()
+     * @see setNewPage()
+     * @short Getter for KWebPage
+     * @return current KWebPage
+     */
+    KWebPage *page() const;
+    void setPage(KWebPage *page);
     QWidget *searchBar();
 
 public Q_SLOTS:
@@ -63,6 +73,18 @@
     void openUrlInNewTab(const KUrl &url);
 
 protected:
+    /**
+     * Creates new (K)WebPage. This virtual method is called by page() to create new \
(K)WebPage if necessary. +     * Reimplement this method if you reimplement KWebPage, \
e.g: +     * @code
+     * void MyWebView::setNewPage()
+     * {
+     *     setPage(new MyWebPage(this));
+     * }
+     * @endcode
+     * @see page()
+     */
+    virtual void setNewPage();
     void contextMenuEvent(QContextMenuEvent *event);
     void wheelEvent(QWheelEvent *event);
     void mousePressEvent(QMouseEvent *event);
--- trunk/playground/libs/webkitkde/part/webview.cpp #966796:966797
@@ -71,7 +71,6 @@
     : KWebView(parent), d(new WebViewPrivate(this))
 {
     d->part = wpart;
-    setPage(new WebPage(wpart, this));
     d->actionCollection = new KActionCollection(this);
     setAcceptDrops(true);
 }
@@ -86,6 +85,11 @@
     return d->result;
 }
 
+void WebView::setNewPage()
+{
+    setPage(new WebPage(d->part, this));
+}
+
 void WebView::contextMenuEvent(QContextMenuEvent *e)
 {
     d->result = page()->mainFrame()->hitTestContent(e->pos());
--- trunk/playground/libs/webkitkde/part/webview.h #966796:966797
@@ -43,6 +43,7 @@
     QWebHitTestResult contextMenuResult() const;
 
 protected:
+    void setNewPage();
     void contextMenuEvent(QContextMenuEvent *e);
     void selectActionPopupMenu(KParts::BrowserExtension::ActionGroupMap \
                &selectGroupMap);
     void linkActionPopupMenu(KParts::BrowserExtension::ActionGroupMap \
&linkGroupMap);


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic