Changeset 19046 in webkit


Ignore:
Timestamp:
Jan 23, 2007 8:35:12 AM (17 years ago)
Author:
lars
Message:

Reviewed by Zack

Widget and ScrollView do not own the Qt widgets
anymore. Make sure they can handle the case of
a null QWidget and never delete them.

Fix refcounting of FrameViews (they get created with a
refcount of 1) and add a few safety checks to the
FrameLoaderClientQt.

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r19045 r19046  
     12007-01-23  Lars Knoll <lars@trolltech.com>
     2
     3        Reviewed by Zack
     4
     5        Widget and ScrollView do not own the Qt widgets
     6        anymore. Make sure they can handle the case of
     7        a null QWidget and never delete them.
     8
     9        * platform/qt/ScrollViewQt.cpp:
     10        (WebCore::ScrollView::setScrollArea):
     11        (WebCore::ScrollView::updateContents):
     12        (WebCore::ScrollView::visibleWidth):
     13        (WebCore::ScrollView::visibleHeight):
     14        (WebCore::ScrollView::visibleContentRect):
     15        (WebCore::ScrollView::setContentsPos):
     16        (WebCore::ScrollView::resizeContents):
     17        (WebCore::ScrollView::contentsX):
     18        (WebCore::ScrollView::contentsY):
     19        (WebCore::ScrollView::contentsWidth):
     20        (WebCore::ScrollView::contentsHeight):
     21        (WebCore::ScrollView::scrollOffset):
     22        (WebCore::ScrollView::scrollBy):
     23        (WebCore::ScrollView::hScrollbarMode):
     24        (WebCore::ScrollView::vScrollbarMode):
     25        (WebCore::ScrollView::setHScrollbarMode):
     26        (WebCore::ScrollView::setVScrollbarMode):
     27        * platform/qt/WidgetQt.cpp:
     28        (WebCore::WidgetPrivate::~WidgetPrivate):
     29        (WebCore::Widget::setQWidget):
     30
    1312007-01-23  Zack Rusin  <zack@kde.org>
    232
  • trunk/WebCore/platform/qt/ScrollViewQt.cpp

    r18901 r19046  
    5858{
    5959    m_area = area;
    60     if (isFrameView()) {
     60    if (m_area && isFrameView()) {
    6161        ScrollViewCanvasQt* canvas = new ScrollViewCanvasQt(static_cast<FrameView*>(this), m_area);
    6262        m_area->setWidget(canvas);
     
    6868{
    6969    //Update is fine for both now=true/false cases
    70     if (m_area->widget())
     70    if (m_area && m_area->widget())
    7171        m_area->widget()->update(updateRect);
    7272}
     
    7474int ScrollView::visibleWidth() const
    7575{
     76    if (!m_area)
     77        return 0;
    7678    return m_area->maximumViewportSize().width();
    7779}
     
    7981int ScrollView::visibleHeight() const
    8082{
     83    if (!m_area)
     84        return 0;
    8185    return m_area->maximumViewportSize().height();
    8286}
     
    8488FloatRect ScrollView::visibleContentRect() const
    8589{
     90    if (!m_area)
     91        return FloatRect();
    8692    const QSize s(m_area->maximumViewportSize());
    8793
     
    9399void ScrollView::setContentsPos(int newX, int newY)
    94100{
     101    if (!m_area)
     102        return;
    95103    m_area->horizontalScrollBar()->setValue(newX);
    96104    m_area->verticalScrollBar()->setValue(newY);
     
    99107void ScrollView::resizeContents(int w, int h)
    100108{
    101     if (m_area->widget())
     109    if (m_area && m_area->widget())
    102110        m_area->widget()->resize(w, h);
    103111}
     
    105113int ScrollView::contentsX() const
    106114{
     115    if (!m_area)
     116        return 0;
    107117    return m_area->horizontalScrollBar()->value();
    108118}
     
    110120int ScrollView::contentsY() const
    111121{
     122    if (!m_area)
     123        return 0;
    112124    return m_area->verticalScrollBar()->value();
    113125}
     
    115127int ScrollView::contentsWidth() const
    116128{
    117     if (!m_area->widget())
     129    if (!m_area || !m_area->widget())
    118130        return 0;
    119131
     
    123135int ScrollView::contentsHeight() const
    124136{
    125     if (!m_area->widget())
     137    if (!m_area || !m_area->widget())
    126138        return 0;
    127139
     
    142154IntSize ScrollView::scrollOffset() const
    143155{
     156    if (!m_area)
     157        return IntSize();
    144158    return IntSize(m_area->horizontalScrollBar()->value(), m_area->verticalScrollBar()->value());
    145159}
     
    147161void ScrollView::scrollBy(int dx, int dy)
    148162{
     163    if (!m_area)
     164        return;
    149165    m_area->horizontalScrollBar()->setValue(m_area->horizontalScrollBar()->value() + dx);
    150166    m_area->verticalScrollBar()->setValue(m_area->verticalScrollBar()->value() + dy);
     
    153169ScrollbarMode ScrollView::hScrollbarMode() const
    154170{
     171    if (!m_area)
     172        return ScrollbarAuto;
    155173    switch (m_area->horizontalScrollBarPolicy())
    156174    {
     
    168186ScrollbarMode ScrollView::vScrollbarMode() const
    169187{
     188    if (!m_area)
     189        return ScrollbarAuto;
    170190    switch (m_area->verticalScrollBarPolicy())
    171191    {
     
    188208void ScrollView::setHScrollbarMode(ScrollbarMode newMode)
    189209{
     210    if (!m_area)
     211        return;
    190212    switch (newMode)
    191213    {
     
    204226void ScrollView::setVScrollbarMode(ScrollbarMode newMode)
    205227{
     228    if (!m_area)
     229        return;
    206230    switch (newMode)
    207231    {
  • trunk/WebCore/platform/qt/WidgetQt.cpp

    r18901 r19046  
    4848{
    4949    WidgetPrivate() : m_parent(0), m_widget(0), m_client(0) { }
    50     ~WidgetPrivate() { delete m_widget; }
     50    ~WidgetPrivate() { }
    5151
    5252    WidgetClient *m_client;
     
    141141void Widget::setQWidget(QWidget* child)
    142142{
    143     delete data->m_widget;
    144143    data->m_widget = child;
    145144}
  • trunk/WebKitQt/Api/qwebframe.cpp

    r19042 r19046  
    5858
    5959    d->frameView = new FrameView(d->frame.get());
     60    d->frameView->deref();
    6061    d->frameView->setScrollArea(this);
    6162    d->frame->setView(d->frameView.get());
     
    7879
    7980    d->frameView = new FrameView(d->frame.get());
     81    d->frameView->deref();
    8082    d->frameView->setScrollArea(this);
    8183    d->frame->setView(d->frameView.get());
     
    8486QWebFrame::~QWebFrame()
    8587{
     88    if (d->frameView)
     89        d->frameView->setScrollArea(0);
    8690    delete d;
    8791}
  • trunk/WebKitQt/ChangeLog

    r19044 r19046  
     12007-01-23  Lars Knoll <lars@trolltech.com>
     2
     3        Reviewed by Zack
     4
     5        Fix refcounting of FrameViews (they get created with a
     6        refcount of 1) and add a few safety checks to the
     7        FrameLoaderClientQt.
     8
     9        * Api/qwebframe.cpp:
     10        (QWebFrame::QWebFrame):
     11        (QWebFrame::~QWebFrame):
     12        * WebCoreSupport/FrameLoaderClientQt.cpp:
     13        (WebCore::FrameLoaderClientQt::detachedFromParent3):
     14        (WebCore::FrameLoaderClientQt::detachedFromParent4):
     15        (WebCore::FrameLoaderClientQt::dispatchDidHandleOnloadEvents):
     16        (WebCore::FrameLoaderClientQt::postProgressStartedNotification):
     17        (WebCore::FrameLoaderClientQt::postProgressEstimateChangedNotification):
     18        (WebCore::FrameLoaderClientQt::postProgressFinishedNotification):
     19        (WebCore::FrameLoaderClientQt::frameLoaderDestroyed):
     20        (WebCore::FrameLoaderClientQt::windowObjectCleared):
     21
    1222007-01-23  Zack Rusin  <zack@kde.org>
    223
  • trunk/WebKitQt/WebCoreSupport/FrameLoaderClientQt.cpp

    r19042 r19046  
    262262void FrameLoaderClientQt::detachedFromParent3()
    263263{
     264    if (!m_webFrame)
     265        return;
     266    if (m_webFrame->d->frameView)
     267        m_webFrame->d->frameView->setScrollArea(0);
    264268    m_webFrame->d->frameView = 0;
    265269}
     
    269273{
    270274    delete m_webFrame;
     275    m_webFrame = 0;
     276    m_frame = 0;
    271277}
    272278
     
    280286void FrameLoaderClientQt::dispatchDidHandleOnloadEvents()
    281287{
    282     emit m_webFrame->loadDone();
     288    if (m_webFrame)
     289        emit m_webFrame->loadDone();
    283290}
    284291
     
    407414void FrameLoaderClientQt::postProgressStartedNotification()
    408415{
    409     emit loadStarted(m_webFrame);
     416    if (m_webFrame && m_frame->page())
     417        emit loadStarted(m_webFrame);
    410418}
    411419
    412420void FrameLoaderClientQt::postProgressEstimateChangedNotification()
    413421{
    414     emit loadProgressChanged(m_frame->page()->progress()->estimatedProgress());
     422    if (m_webFrame && m_frame->page())
     423        emit loadProgressChanged(m_frame->page()->progress()->estimatedProgress());
    415424}
    416425
    417426void FrameLoaderClientQt::postProgressFinishedNotification()
    418427{
    419     emit loadFinished(m_webFrame);
     428    if (m_webFrame && m_frame->page())
     429        emit loadFinished(m_webFrame);
    420430}
    421431
     
    559569void FrameLoaderClientQt::frameLoaderDestroyed()
    560570{
     571    m_webFrame = 0;
    561572    m_frame = 0;
    562573    delete this;
     
    570581void FrameLoaderClientQt::windowObjectCleared() const
    571582{
    572     emit m_webFrame->cleared();
     583    if (m_webFrame)
     584        emit m_webFrame->cleared();
    573585}
    574586
Note: See TracChangeset for help on using the changeset viewer.