<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>34267</bug_id>
          
          <creation_ts>2010-01-28 08:08:57 -0800</creation_ts>
          <short_desc>[Qt] Support kinetic scrolling on Maemo 5</short_desc>
          <delta_ts>2010-02-01 19:50:18 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>hausmann</cc>
    
    <cc>joseph.ligman</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>xhiloh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>185481</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-01-28 08:08:57 -0800</bug_when>
    <thetext>Basically by forward-porting code from the Qt/Maemo branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185483</commentid>
    <comment_count>1</comment_count>
      <attachid>47620</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-01-28 08:12:23 -0800</bug_when>
    <thetext>Created attachment 47620
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185486</commentid>
    <comment_count>2</comment_count>
      <attachid>47620</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-01-28 08:22:39 -0800</bug_when>
    <thetext>Comment on attachment 47620
Patch

&gt; diff --git a/WebKit/qt/Api/qwebview.cpp b/WebKit/qt/Api/qwebview.cpp
&gt; index 9ef2e55..4eeb8ad 100644
&gt; --- a/WebKit/qt/Api/qwebview.cpp
&gt; +++ b/WebKit/qt/Api/qwebview.cpp
&gt; @@ -58,6 +58,107 @@ void QWebViewPrivate::_q_pageDestroyed()
&gt;      view-&gt;setPage(0);
&gt;  }
&gt;  
&gt; +#ifdef Q_WS_MAEMO_5
&gt; +#include &quot;qabstractkineticscroller.h&quot;
&gt; +
&gt; +class QWebViewKineticScroller : public QAbstractKineticScroller {
&gt; +public:
&gt; +    QWebViewKineticScroller()
&gt; +        : QAbstractKineticScroller()
&gt; +    {}

I would put the above on one line, since we have no implementation anyway

&gt; +
&gt; +    // remember the frame where the button was pressed
&gt; +    bool eventFilter(QObject *o, QEvent *e)

Almost all of qwebview.cpp uses ev and not e, please change

&gt; +    {
&gt; +        switch (e-&gt;type()) {
&gt; +        case QEvent::MouseButtonPress: {
&gt; +            QWebFrame *hitFrame = scrollingFrameAt(static_cast&lt;QMouseEvent *&gt;(e)-&gt;pos());

coding style, * should be aligned to the left

&gt; +            if (hitFrame)
&gt; +                _frame = hitFrame;

please use m_frame, which is webkit style.

&gt; +            break;
&gt; +        }
&gt; +        default:
&gt; +            break;
&gt; +        }
&gt; +        return QAbstractKineticScroller::eventFilter(o, e);
&gt; +    }
&gt; +
&gt; +protected:
&gt; +    QWebFrame *currentFrame() const

here as well

&gt; +    {
&gt; +        if (!_frame.isNull())
&gt; +            return _frame.data();
&gt; +
&gt; +        QWebView *web = static_cast&lt;QWebView *&gt;(widget());

web is a bad variable name, maybe use view instead

&gt; +        QWebFrame *frame = web-&gt;page()-&gt;mainFrame();

* again, please also run check-webkit-style on it

&gt; +        return frame;
&gt; +    }
&gt; +
&gt; +    /*! Returns the innermost frame at the given position that can scroll. */

use // commenting

&gt; +    QWebFrame *scrollingFrameAt(const QPoint &amp;pos) const

coding style, * and &amp;

&gt; +    {
&gt; +        QWebView *web = static_cast&lt;QWebView *&gt;(widget());

view

&gt; +        QWebFrame *mainFrame = web-&gt;page()-&gt;mainFrame();
&gt; +        QWebFrame *hitFrame = mainFrame-&gt;hitTestContent(pos).frame();

coding style

&gt; +        QSize range = hitFrame-&gt;contentsSize() - hitFrame-&gt;geometry().size();
&gt; +
&gt; +        while (hitFrame &amp;&amp; range.width() &lt;= 1 &amp;&amp; range.height() &lt;= 1)
&gt; +            hitFrame = hitFrame-&gt;parentFrame();

Are you sure infinite loops can never occour here?

&gt; +
&gt; +        return hitFrame;
&gt; +    }
&gt; +
&gt; +    void attachToWidget()
&gt; +    {
&gt; +        QWebView *web = static_cast&lt;QWebView *&gt;(widget());
&gt; +        QWebFrame *mainFrame = web-&gt;page()-&gt;mainFrame();
&gt; +        mainFrame-&gt;setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
&gt; +        mainFrame-&gt;setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff);
&gt; +        web-&gt;installEventFilter(this);
&gt; +    }
&gt; +
&gt; +    void removeFromWidget()
&gt; +    {
&gt; +        QWebView *web = static_cast&lt;QWebView *&gt;(widget());
&gt; +        web-&gt;removeEventFilter(this);
&gt; +        QWebFrame *mainFrame = web-&gt;page()-&gt;mainFrame();
&gt; +        mainFrame-&gt;setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAsNeeded);
&gt; +        mainFrame-&gt;setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAsNeeded);

Shouldn&apos;t you save the old scrollbar policyt instead and reapply it?

&gt; +    }
&gt; +
&gt; +    QRect positionRange() const
&gt; +    {
&gt; +        QRect r;
&gt; +        QWebFrame *frame = currentFrame();

style

&gt; +        r.setSize(frame-&gt;contentsSize() - frame-&gt;geometry().size());
&gt; +        return r;
&gt; +    }
&gt; +
&gt; +    QPoint position() const
&gt; +    {
&gt; +        QWebFrame *frame = currentFrame();

style

&gt; +        return frame-&gt;scrollPosition();
&gt; +    }
&gt; +
&gt; +    QSize viewportSize() const
&gt; +    {
&gt; +        return static_cast&lt;QWebView *&gt;(widget())-&gt;page()-&gt;viewportSize();

style.

&gt; +    }
&gt; +
&gt; +    void setPosition(const QPoint &amp;p, const QPoint &amp;overShootDelta)
&gt; +    {
&gt; +        Q_UNUSED(overShootDelta);

not webkit style, just leave out the second param. (please use point as well, not p)

or do

void setPosition(const QPoint&amp; point, const QPoint&amp; /* overShootDelta */)

&gt; +
&gt; +        QWebFrame *frame = currentFrame();
&gt; +        frame-&gt;setScrollPosition(p);
&gt; +    }
&gt; +
&gt; +    QPointer&lt;QWebFrame&gt; _frame;
&gt; +};
&gt; +
&gt; +#endif // Q_WS_MAEMO_5
&gt; +
&gt; +
&gt;  /*!
&gt;      \class QWebView
&gt;      \since 4.4
&gt; @@ -157,7 +258,11 @@ QWebView::QWebView(QWidget *parent)
&gt;  #if QT_VERSION &gt;= QT_VERSION_CHECK(4, 6, 0)
&gt;      setAttribute(Qt::WA_AcceptTouchEvents);
&gt;  #endif
&gt; -
&gt; +#if defined(Q_WS_MAEMO_5)
&gt; +    QAbstractKineticScroller *ks = new QWebViewKineticScroller();

use scroller instead of ks, *

&gt; +    ks-&gt;setWidget(this);
&gt; +    setProperty(&quot;kineticScroller&quot;, QVariant::fromValue(ks));
&gt; +#endif
&gt;      setAcceptDrops(true);
&gt;  
&gt;      setMouseTracking(true);
&gt; diff --git a/WebKit/qt/ChangeLog b/WebKit/qt/ChangeLog
&gt; index f9aa123..f295572 100644
&gt; --- a/WebKit/qt/ChangeLog
&gt; +++ b/WebKit/qt/ChangeLog
&gt; @@ -1,3 +1,27 @@
&gt; +2010-01-28  Andreas Kling  &lt;andreas.kling@nokia.com&gt;
&gt; +
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        [Qt] Support kinetic scrolling on Maemo 5
&gt; +
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=34267
&gt; +
&gt; +        Patch by Ralf Engels &lt;ralf.engels@nokia.com&gt; and
&gt; +        Robert Griebl &lt;rgriebl@trolltech.com&gt;
&gt; +
&gt; +        * Api/qwebview.cpp:
&gt; +        (QWebViewKineticScroller::QWebViewKineticScroller):
&gt; +        (QWebViewKineticScroller::eventFilter):
&gt; +        (QWebViewKineticScroller::currentFrame):
&gt; +        (QWebViewKineticScroller::scrollingFrameAt):
&gt; +        (QWebViewKineticScroller::attachToWidget):
&gt; +        (QWebViewKineticScroller::removeFromWidget):
&gt; +        (QWebViewKineticScroller::positionRange):
&gt; +        (QWebViewKineticScroller::position):
&gt; +        (QWebViewKineticScroller::viewportSize):
&gt; +        (QWebViewKineticScroller::setPosition):
&gt; +        (QWebView::QWebView):
&gt; +
&gt;  2010-01-28  Kenneth Rohde Christiansen  &lt;kenneth@webkit.org&gt;
&gt;  
&gt;          Reviewed by Simon Hausmann.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185526</commentid>
    <comment_count>3</comment_count>
      <attachid>47625</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2010-01-28 09:29:55 -0800</bug_when>
    <thetext>Created attachment 47625
Same patch with issues addressed

How would an infinite loop occur? Can a frame somehow be its own grandparent?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185585</commentid>
    <comment_count>4</comment_count>
      <attachid>47625</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-01-28 12:59:38 -0800</bug_when>
    <thetext>Comment on attachment 47625
Same patch with issues addressed

LGTM, but when we enable frameflattening it needs to be looked at again, as QWebFrame* scrollingFrameAt(const QPoint&amp; pos) const becomes useless.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185670</commentid>
    <comment_count>5</comment_count>
      <attachid>47625</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-28 17:49:24 -0800</bug_when>
    <thetext>Comment on attachment 47625
Same patch with issues addressed

Clearing flags on attachment: 47625

Committed r54034: &lt;http://trac.webkit.org/changeset/54034&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185671</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-01-28 17:49:31 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185834</commentid>
    <comment_count>7</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-01-29 05:37:38 -0800</bug_when>
    <thetext>doing this w/o a null check is really safe ?



+    // Returns the innermost frame at the given position that can scroll.
+    QWebFrame* scrollingFrameAt(const QPoint&amp; pos) const
+    {
+        QWebView* view = static_cast&lt;QWebView*&gt;(widget());

(..)

void attachToWidget()
+    {
+        QWebView* view = static_cast&lt;QWebView*&gt;(widget());
+        QWebFrame* mainFrame = view-&gt;page()-&gt;mainFrame();


what about QGWV ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>185835</commentid>
    <comment_count>8</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2010-01-29 05:39:22 -0800</bug_when>
    <thetext>err, ignore my concern. that is code inside qwebview.cpp ...

(In reply to comment #7)
&gt; doing this w/o a null check is really safe ?
&gt; +    // Returns the innermost frame at the given position that can scroll.
&gt; +    QWebFrame* scrollingFrameAt(const QPoint&amp; pos) const
&gt; +    {
&gt; +        QWebView* view = static_cast&lt;QWebView*&gt;(widget());
&gt; (..)
&gt; void attachToWidget()
&gt; +    {
&gt; +        QWebView* view = static_cast&lt;QWebView*&gt;(widget());
&gt; +        QWebFrame* mainFrame = view-&gt;page()-&gt;mainFrame();
&gt; 
&gt; what about QGWV ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186770</commentid>
    <comment_count>9</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2010-02-01 19:50:18 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (From update of attachment 47625 [details])
&gt; Clearing flags on attachment: 47625
&gt; 
&gt; Committed r54034: &lt;http://trac.webkit.org/changeset/54034&gt;

Cherry-picked into qtwebkit-4.6 with commit 68245b52f892a1effdfef9d70d8f9fa888d09e9f</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47620</attachid>
            <date>2010-01-28 08:12:23 -0800</date>
            <delta_ts>2010-01-28 09:29:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-34267.diff</filename>
            <type>text/plain</type>
            <size>4829</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnZpZXcuY3BwIGIvV2ViS2l0L3F0L0FwaS9x
d2Vidmlldy5jcHAKaW5kZXggOWVmMmU1NS4uNGVlYjhhZCAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0
L0FwaS9xd2Vidmlldy5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2Vidmlldy5jcHAKQEAgLTU4
LDYgKzU4LDEwNyBAQCB2b2lkIFFXZWJWaWV3UHJpdmF0ZTo6X3FfcGFnZURlc3Ryb3llZCgpCiAg
ICAgdmlldy0+c2V0UGFnZSgwKTsKIH0KIAorI2lmZGVmIFFfV1NfTUFFTU9fNQorI2luY2x1ZGUg
InFhYnN0cmFjdGtpbmV0aWNzY3JvbGxlci5oIgorCitjbGFzcyBRV2ViVmlld0tpbmV0aWNTY3Jv
bGxlciA6IHB1YmxpYyBRQWJzdHJhY3RLaW5ldGljU2Nyb2xsZXIgeworcHVibGljOgorICAgIFFX
ZWJWaWV3S2luZXRpY1Njcm9sbGVyKCkKKyAgICAgICAgOiBRQWJzdHJhY3RLaW5ldGljU2Nyb2xs
ZXIoKQorICAgIHt9CisKKyAgICAvLyByZW1lbWJlciB0aGUgZnJhbWUgd2hlcmUgdGhlIGJ1dHRv
biB3YXMgcHJlc3NlZAorICAgIGJvb2wgZXZlbnRGaWx0ZXIoUU9iamVjdCAqbywgUUV2ZW50ICpl
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChlLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBRRXZl
bnQ6Ok1vdXNlQnV0dG9uUHJlc3M6IHsKKyAgICAgICAgICAgIFFXZWJGcmFtZSAqaGl0RnJhbWUg
PSBzY3JvbGxpbmdGcmFtZUF0KHN0YXRpY19jYXN0PFFNb3VzZUV2ZW50ICo+KGUpLT5wb3MoKSk7
CisgICAgICAgICAgICBpZiAoaGl0RnJhbWUpCisgICAgICAgICAgICAgICAgX2ZyYW1lID0gaGl0
RnJhbWU7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFFBYnN0cmFjdEtp
bmV0aWNTY3JvbGxlcjo6ZXZlbnRGaWx0ZXIobywgZSk7CisgICAgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgUVdlYkZyYW1lICpjdXJyZW50RnJhbWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFf
ZnJhbWUuaXNOdWxsKCkpCisgICAgICAgICAgICByZXR1cm4gX2ZyYW1lLmRhdGEoKTsKKworICAg
ICAgICBRV2ViVmlldyAqd2ViID0gc3RhdGljX2Nhc3Q8UVdlYlZpZXcgKj4od2lkZ2V0KCkpOwor
ICAgICAgICBRV2ViRnJhbWUgKmZyYW1lID0gd2ViLT5wYWdlKCktPm1haW5GcmFtZSgpOworICAg
ICAgICByZXR1cm4gZnJhbWU7CisgICAgfQorCisgICAgLyohIFJldHVybnMgdGhlIGlubmVybW9z
dCBmcmFtZSBhdCB0aGUgZ2l2ZW4gcG9zaXRpb24gdGhhdCBjYW4gc2Nyb2xsLiAqLworICAgIFFX
ZWJGcmFtZSAqc2Nyb2xsaW5nRnJhbWVBdChjb25zdCBRUG9pbnQgJnBvcykgY29uc3QKKyAgICB7
CisgICAgICAgIFFXZWJWaWV3ICp3ZWIgPSBzdGF0aWNfY2FzdDxRV2ViVmlldyAqPih3aWRnZXQo
KSk7CisgICAgICAgIFFXZWJGcmFtZSAqbWFpbkZyYW1lID0gd2ViLT5wYWdlKCktPm1haW5GcmFt
ZSgpOworICAgICAgICBRV2ViRnJhbWUgKmhpdEZyYW1lID0gbWFpbkZyYW1lLT5oaXRUZXN0Q29u
dGVudChwb3MpLmZyYW1lKCk7CisgICAgICAgIFFTaXplIHJhbmdlID0gaGl0RnJhbWUtPmNvbnRl
bnRzU2l6ZSgpIC0gaGl0RnJhbWUtPmdlb21ldHJ5KCkuc2l6ZSgpOworCisgICAgICAgIHdoaWxl
IChoaXRGcmFtZSAmJiByYW5nZS53aWR0aCgpIDw9IDEgJiYgcmFuZ2UuaGVpZ2h0KCkgPD0gMSkK
KyAgICAgICAgICAgIGhpdEZyYW1lID0gaGl0RnJhbWUtPnBhcmVudEZyYW1lKCk7CisKKyAgICAg
ICAgcmV0dXJuIGhpdEZyYW1lOworICAgIH0KKworICAgIHZvaWQgYXR0YWNoVG9XaWRnZXQoKQor
ICAgIHsKKyAgICAgICAgUVdlYlZpZXcgKndlYiA9IHN0YXRpY19jYXN0PFFXZWJWaWV3ICo+KHdp
ZGdldCgpKTsKKyAgICAgICAgUVdlYkZyYW1lICptYWluRnJhbWUgPSB3ZWItPnBhZ2UoKS0+bWFp
bkZyYW1lKCk7CisgICAgICAgIG1haW5GcmFtZS0+c2V0U2Nyb2xsQmFyUG9saWN5KFF0OjpWZXJ0
aWNhbCwgUXQ6OlNjcm9sbEJhckFsd2F5c09mZik7CisgICAgICAgIG1haW5GcmFtZS0+c2V0U2Ny
b2xsQmFyUG9saWN5KFF0OjpIb3Jpem9udGFsLCBRdDo6U2Nyb2xsQmFyQWx3YXlzT2ZmKTsKKyAg
ICAgICAgd2ViLT5pbnN0YWxsRXZlbnRGaWx0ZXIodGhpcyk7CisgICAgfQorCisgICAgdm9pZCBy
ZW1vdmVGcm9tV2lkZ2V0KCkKKyAgICB7CisgICAgICAgIFFXZWJWaWV3ICp3ZWIgPSBzdGF0aWNf
Y2FzdDxRV2ViVmlldyAqPih3aWRnZXQoKSk7CisgICAgICAgIHdlYi0+cmVtb3ZlRXZlbnRGaWx0
ZXIodGhpcyk7CisgICAgICAgIFFXZWJGcmFtZSAqbWFpbkZyYW1lID0gd2ViLT5wYWdlKCktPm1h
aW5GcmFtZSgpOworICAgICAgICBtYWluRnJhbWUtPnNldFNjcm9sbEJhclBvbGljeShRdDo6VmVy
dGljYWwsIFF0OjpTY3JvbGxCYXJBc05lZWRlZCk7CisgICAgICAgIG1haW5GcmFtZS0+c2V0U2Ny
b2xsQmFyUG9saWN5KFF0OjpIb3Jpem9udGFsLCBRdDo6U2Nyb2xsQmFyQXNOZWVkZWQpOworICAg
IH0KKworICAgIFFSZWN0IHBvc2l0aW9uUmFuZ2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgUVJl
Y3QgcjsKKyAgICAgICAgUVdlYkZyYW1lICpmcmFtZSA9IGN1cnJlbnRGcmFtZSgpOworICAgICAg
ICByLnNldFNpemUoZnJhbWUtPmNvbnRlbnRzU2l6ZSgpIC0gZnJhbWUtPmdlb21ldHJ5KCkuc2l6
ZSgpKTsKKyAgICAgICAgcmV0dXJuIHI7CisgICAgfQorCisgICAgUVBvaW50IHBvc2l0aW9uKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIFFXZWJGcmFtZSAqZnJhbWUgPSBjdXJyZW50RnJhbWUoKTsK
KyAgICAgICAgcmV0dXJuIGZyYW1lLT5zY3JvbGxQb3NpdGlvbigpOworICAgIH0KKworICAgIFFT
aXplIHZpZXdwb3J0U2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8UVdlYlZpZXcgKj4od2lkZ2V0KCkpLT5wYWdlKCktPnZpZXdwb3J0U2l6ZSgpOworICAgIH0K
KworICAgIHZvaWQgc2V0UG9zaXRpb24oY29uc3QgUVBvaW50ICZwLCBjb25zdCBRUG9pbnQgJm92
ZXJTaG9vdERlbHRhKQorICAgIHsKKyAgICAgICAgUV9VTlVTRUQob3ZlclNob290RGVsdGEpOwor
CisgICAgICAgIFFXZWJGcmFtZSAqZnJhbWUgPSBjdXJyZW50RnJhbWUoKTsKKyAgICAgICAgZnJh
bWUtPnNldFNjcm9sbFBvc2l0aW9uKHApOworICAgIH0KKworICAgIFFQb2ludGVyPFFXZWJGcmFt
ZT4gX2ZyYW1lOworfTsKKworI2VuZGlmIC8vIFFfV1NfTUFFTU9fNQorCisKIC8qIQogICAgIFxj
bGFzcyBRV2ViVmlldwogICAgIFxzaW5jZSA0LjQKQEAgLTE1Nyw3ICsyNTgsMTEgQEAgUVdlYlZp
ZXc6OlFXZWJWaWV3KFFXaWRnZXQgKnBhcmVudCkKICNpZiBRVF9WRVJTSU9OID49IFFUX1ZFUlNJ
T05fQ0hFQ0soNCwgNiwgMCkKICAgICBzZXRBdHRyaWJ1dGUoUXQ6OldBX0FjY2VwdFRvdWNoRXZl
bnRzKTsKICNlbmRpZgotCisjaWYgZGVmaW5lZChRX1dTX01BRU1PXzUpCisgICAgUUFic3RyYWN0
S2luZXRpY1Njcm9sbGVyICprcyA9IG5ldyBRV2ViVmlld0tpbmV0aWNTY3JvbGxlcigpOworICAg
IGtzLT5zZXRXaWRnZXQodGhpcyk7CisgICAgc2V0UHJvcGVydHkoImtpbmV0aWNTY3JvbGxlciIs
IFFWYXJpYW50Ojpmcm9tVmFsdWUoa3MpKTsKKyNlbmRpZgogICAgIHNldEFjY2VwdERyb3BzKHRy
dWUpOwogCiAgICAgc2V0TW91c2VUcmFja2luZyh0cnVlKTsKZGlmZiAtLWdpdCBhL1dlYktpdC9x
dC9DaGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IGY5YWExMjMuLmYyOTU1NzIg
MTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvV2ViS2l0L3F0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDI3IEBACisyMDEwLTAxLTI4ICBBbmRyZWFzIEtsaW5nICA8YW5kcmVhcy5r
bGluZ0Bub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgW1F0XSBTdXBwb3J0IGtpbmV0aWMgc2Nyb2xsaW5nIG9uIE1hZW1vIDUKKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzQyNjcKKworICAg
ICAgICBQYXRjaCBieSBSYWxmIEVuZ2VscyA8cmFsZi5lbmdlbHNAbm9raWEuY29tPiBhbmQKKyAg
ICAgICAgUm9iZXJ0IEdyaWVibCA8cmdyaWVibEB0cm9sbHRlY2guY29tPgorCisgICAgICAgICog
QXBpL3F3ZWJ2aWV3LmNwcDoKKyAgICAgICAgKFFXZWJWaWV3S2luZXRpY1Njcm9sbGVyOjpRV2Vi
Vmlld0tpbmV0aWNTY3JvbGxlcik6CisgICAgICAgIChRV2ViVmlld0tpbmV0aWNTY3JvbGxlcjo6
ZXZlbnRGaWx0ZXIpOgorICAgICAgICAoUVdlYlZpZXdLaW5ldGljU2Nyb2xsZXI6OmN1cnJlbnRG
cmFtZSk6CisgICAgICAgIChRV2ViVmlld0tpbmV0aWNTY3JvbGxlcjo6c2Nyb2xsaW5nRnJhbWVB
dCk6CisgICAgICAgIChRV2ViVmlld0tpbmV0aWNTY3JvbGxlcjo6YXR0YWNoVG9XaWRnZXQpOgor
ICAgICAgICAoUVdlYlZpZXdLaW5ldGljU2Nyb2xsZXI6OnJlbW92ZUZyb21XaWRnZXQpOgorICAg
ICAgICAoUVdlYlZpZXdLaW5ldGljU2Nyb2xsZXI6OnBvc2l0aW9uUmFuZ2UpOgorICAgICAgICAo
UVdlYlZpZXdLaW5ldGljU2Nyb2xsZXI6OnBvc2l0aW9uKToKKyAgICAgICAgKFFXZWJWaWV3S2lu
ZXRpY1Njcm9sbGVyOjp2aWV3cG9ydFNpemUpOgorICAgICAgICAoUVdlYlZpZXdLaW5ldGljU2Ny
b2xsZXI6OnNldFBvc2l0aW9uKToKKyAgICAgICAgKFFXZWJWaWV3OjpRV2ViVmlldyk6CisKIDIw
MTAtMDEtMjggIEtlbm5ldGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3Jn
PgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgo=
</data>
<flag name="review"
          id="30107"
          type_id="1"
          status="-"
          setter="kenneth"
    />
    <flag name="commit-queue"
          id="30108"
          type_id="3"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47625</attachid>
            <date>2010-01-28 09:29:55 -0800</date>
            <delta_ts>2010-01-28 17:49:23 -0800</delta_ts>
            <desc>Same patch with issues addressed</desc>
            <filename>bug-34267-2.diff</filename>
            <type>text/plain</type>
            <size>5112</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYnZpZXcuY3BwIGIvV2ViS2l0L3F0L0FwaS9x
d2Vidmlldy5jcHAKaW5kZXggOWVmMmU1NS4uYjVhNWE5MCAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0
L0FwaS9xd2Vidmlldy5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2Vidmlldy5jcHAKQEAgLTU4
LDYgKzU4LDEwNiBAQCB2b2lkIFFXZWJWaWV3UHJpdmF0ZTo6X3FfcGFnZURlc3Ryb3llZCgpCiAg
ICAgdmlldy0+c2V0UGFnZSgwKTsKIH0KIAorI2lmZGVmIFFfV1NfTUFFTU9fNQorI2luY2x1ZGUg
InFhYnN0cmFjdGtpbmV0aWNzY3JvbGxlci5oIgorCitjbGFzcyBRV2ViVmlld0tpbmV0aWNTY3Jv
bGxlciA6IHB1YmxpYyBRQWJzdHJhY3RLaW5ldGljU2Nyb2xsZXIgeworcHVibGljOgorICAgIFFX
ZWJWaWV3S2luZXRpY1Njcm9sbGVyKCkgOiBRQWJzdHJhY3RLaW5ldGljU2Nyb2xsZXIoKSB7fQor
ICAgIC8vIHJlbWVtYmVyIHRoZSBmcmFtZSB3aGVyZSB0aGUgYnV0dG9uIHdhcyBwcmVzc2VkCisg
ICAgYm9vbCBldmVudEZpbHRlcihRT2JqZWN0KiBvLCBRRXZlbnQqIGV2KQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChldi0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgUUV2ZW50OjpNb3VzZUJ1dHRv
blByZXNzOiB7CisgICAgICAgICAgICBRV2ViRnJhbWUqIGhpdEZyYW1lID0gc2Nyb2xsaW5nRnJh
bWVBdChzdGF0aWNfY2FzdDxRTW91c2VFdmVudCo+KGV2KS0+cG9zKCkpOworICAgICAgICAgICAg
aWYgKGhpdEZyYW1lKQorICAgICAgICAgICAgICAgIG1fZnJhbWUgPSBoaXRGcmFtZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gUUFic3RyYWN0S2luZXRpY1Njcm9sbGVy
OjpldmVudEZpbHRlcihvLCBldik7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgUVdlYkZyYW1l
KiBjdXJyZW50RnJhbWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFtX2ZyYW1lLmlzTnVs
bCgpKQorICAgICAgICAgICAgcmV0dXJuIG1fZnJhbWUuZGF0YSgpOworCisgICAgICAgIFFXZWJW
aWV3KiB2aWV3ID0gc3RhdGljX2Nhc3Q8UVdlYlZpZXcqPih3aWRnZXQoKSk7CisgICAgICAgIFFX
ZWJGcmFtZSogZnJhbWUgPSB2aWV3LT5wYWdlKCktPm1haW5GcmFtZSgpOworICAgICAgICByZXR1
cm4gZnJhbWU7CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0aGUgaW5uZXJtb3N0IGZyYW1lIGF0
IHRoZSBnaXZlbiBwb3NpdGlvbiB0aGF0IGNhbiBzY3JvbGwuCisgICAgUVdlYkZyYW1lKiBzY3Jv
bGxpbmdGcmFtZUF0KGNvbnN0IFFQb2ludCYgcG9zKSBjb25zdAorICAgIHsKKyAgICAgICAgUVdl
YlZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxRV2ViVmlldyo+KHdpZGdldCgpKTsKKyAgICAgICAg
UVdlYkZyYW1lKiBtYWluRnJhbWUgPSB2aWV3LT5wYWdlKCktPm1haW5GcmFtZSgpOworICAgICAg
ICBRV2ViRnJhbWUqIGhpdEZyYW1lID0gbWFpbkZyYW1lLT5oaXRUZXN0Q29udGVudChwb3MpLmZy
YW1lKCk7CisgICAgICAgIFFTaXplIHJhbmdlID0gaGl0RnJhbWUtPmNvbnRlbnRzU2l6ZSgpIC0g
aGl0RnJhbWUtPmdlb21ldHJ5KCkuc2l6ZSgpOworCisgICAgICAgIHdoaWxlIChoaXRGcmFtZSAm
JiByYW5nZS53aWR0aCgpIDw9IDEgJiYgcmFuZ2UuaGVpZ2h0KCkgPD0gMSkKKyAgICAgICAgICAg
IGhpdEZyYW1lID0gaGl0RnJhbWUtPnBhcmVudEZyYW1lKCk7CisKKyAgICAgICAgcmV0dXJuIGhp
dEZyYW1lOworICAgIH0KKworICAgIHZvaWQgYXR0YWNoVG9XaWRnZXQoKQorICAgIHsKKyAgICAg
ICAgUVdlYlZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxRV2ViVmlldyo+KHdpZGdldCgpKTsKKyAg
ICAgICAgUVdlYkZyYW1lKiBtYWluRnJhbWUgPSB2aWV3LT5wYWdlKCktPm1haW5GcmFtZSgpOwor
ICAgICAgICBtX29sZEhvcml6b250YWxTY3JvbGxCYXJQb2xpY3kgPSBtYWluRnJhbWUtPnNjcm9s
bEJhclBvbGljeShRdDo6SG9yaXpvbnRhbCk7CisgICAgICAgIG1fb2xkVmVydGljYWxTY3JvbGxC
YXJQb2xpY3kgPSBtYWluRnJhbWUtPnNjcm9sbEJhclBvbGljeShRdDo6VmVydGljYWwpOworICAg
ICAgICBtYWluRnJhbWUtPnNldFNjcm9sbEJhclBvbGljeShRdDo6VmVydGljYWwsIFF0OjpTY3Jv
bGxCYXJBbHdheXNPZmYpOworICAgICAgICBtYWluRnJhbWUtPnNldFNjcm9sbEJhclBvbGljeShR
dDo6SG9yaXpvbnRhbCwgUXQ6OlNjcm9sbEJhckFsd2F5c09mZik7CisgICAgICAgIHZpZXctPmlu
c3RhbGxFdmVudEZpbHRlcih0aGlzKTsKKyAgICB9CisKKyAgICB2b2lkIHJlbW92ZUZyb21XaWRn
ZXQoKQorICAgIHsKKyAgICAgICAgUVdlYlZpZXcqIHZpZXcgPSBzdGF0aWNfY2FzdDxRV2ViVmll
dyo+KHdpZGdldCgpKTsKKyAgICAgICAgdmlldy0+cmVtb3ZlRXZlbnRGaWx0ZXIodGhpcyk7Cisg
ICAgICAgIFFXZWJGcmFtZSogbWFpbkZyYW1lID0gdmlldy0+cGFnZSgpLT5tYWluRnJhbWUoKTsK
KyAgICAgICAgbWFpbkZyYW1lLT5zZXRTY3JvbGxCYXJQb2xpY3koUXQ6OlZlcnRpY2FsLCBtX29s
ZFZlcnRpY2FsU2Nyb2xsQmFyUG9saWN5KTsKKyAgICAgICAgbWFpbkZyYW1lLT5zZXRTY3JvbGxC
YXJQb2xpY3koUXQ6Okhvcml6b250YWwsIG1fb2xkSG9yaXpvbnRhbFNjcm9sbEJhclBvbGljeSk7
CisgICAgfQorCisgICAgUVJlY3QgcG9zaXRpb25SYW5nZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBRUmVjdCByOworICAgICAgICBRV2ViRnJhbWUqIGZyYW1lID0gY3VycmVudEZyYW1lKCk7Cisg
ICAgICAgIHIuc2V0U2l6ZShmcmFtZS0+Y29udGVudHNTaXplKCkgLSBmcmFtZS0+Z2VvbWV0cnko
KS5zaXplKCkpOworICAgICAgICByZXR1cm4gcjsKKyAgICB9CisKKyAgICBRUG9pbnQgcG9zaXRp
b24oKSBjb25zdAorICAgIHsKKyAgICAgICAgUVdlYkZyYW1lKiBmcmFtZSA9IGN1cnJlbnRGcmFt
ZSgpOworICAgICAgICByZXR1cm4gZnJhbWUtPnNjcm9sbFBvc2l0aW9uKCk7CisgICAgfQorCisg
ICAgUVNpemUgdmlld3BvcnRTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxRV2ViVmlldyo+KHdpZGdldCgpKS0+cGFnZSgpLT52aWV3cG9ydFNpemUoKTsKKyAg
ICB9CisKKyAgICB2b2lkIHNldFBvc2l0aW9uKGNvbnN0IFFQb2ludCYgcG9pbnQsIGNvbnN0IFFQ
b2ludCYgLyogb3ZlclNob290RGVsdGEgKi8pCisgICAgeworICAgICAgICBRV2ViRnJhbWUqIGZy
YW1lID0gY3VycmVudEZyYW1lKCk7CisgICAgICAgIGZyYW1lLT5zZXRTY3JvbGxQb3NpdGlvbihw
b2ludCk7CisgICAgfQorCisgICAgUVBvaW50ZXI8UVdlYkZyYW1lPiBtX2ZyYW1lOworICAgIFF0
OjpTY3JvbGxCYXJQb2xpY3kgbV9vbGRWZXJ0aWNhbFNjcm9sbEJhclBvbGljeTsKKyAgICBRdDo6
U2Nyb2xsQmFyUG9saWN5IG1fb2xkSG9yaXpvbnRhbFNjcm9sbEJhclBvbGljeTsKK307CisKKyNl
bmRpZiAvLyBRX1dTX01BRU1PXzUKKworCiAvKiEKICAgICBcY2xhc3MgUVdlYlZpZXcKICAgICBc
c2luY2UgNC40CkBAIC0xNTcsNyArMjU3LDExIEBAIFFXZWJWaWV3OjpRV2ViVmlldyhRV2lkZ2V0
ICpwYXJlbnQpCiAjaWYgUVRfVkVSU0lPTiA+PSBRVF9WRVJTSU9OX0NIRUNLKDQsIDYsIDApCiAg
ICAgc2V0QXR0cmlidXRlKFF0OjpXQV9BY2NlcHRUb3VjaEV2ZW50cyk7CiAjZW5kaWYKLQorI2lm
IGRlZmluZWQoUV9XU19NQUVNT181KQorICAgIFFBYnN0cmFjdEtpbmV0aWNTY3JvbGxlciogc2Ny
b2xsZXIgPSBuZXcgUVdlYlZpZXdLaW5ldGljU2Nyb2xsZXIoKTsKKyAgICBzY3JvbGxlci0+c2V0
V2lkZ2V0KHRoaXMpOworICAgIHNldFByb3BlcnR5KCJraW5ldGljU2Nyb2xsZXIiLCBRVmFyaWFu
dDo6ZnJvbVZhbHVlKHNjcm9sbGVyKSk7CisjZW5kaWYKICAgICBzZXRBY2NlcHREcm9wcyh0cnVl
KTsKIAogICAgIHNldE1vdXNlVHJhY2tpbmcodHJ1ZSk7CmRpZmYgLS1naXQgYS9XZWJLaXQvcXQv
Q2hhbmdlTG9nIGIvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCBmOWFhMTIzLi5mMjk1NTcyIDEw
MDY0NAotLS0gYS9XZWJLaXQvcXQvQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyNyBAQAorMjAxMC0wMS0yOCAgQW5kcmVhcyBLbGluZyAgPGFuZHJlYXMua2xp
bmdAbm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFtRdF0gU3VwcG9ydCBraW5ldGljIHNjcm9sbGluZyBvbiBNYWVtbyA1CisKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM0MjY3CisKKyAgICAg
ICAgUGF0Y2ggYnkgUmFsZiBFbmdlbHMgPHJhbGYuZW5nZWxzQG5va2lhLmNvbT4gYW5kCisgICAg
ICAgIFJvYmVydCBHcmllYmwgPHJncmllYmxAdHJvbGx0ZWNoLmNvbT4KKworICAgICAgICAqIEFw
aS9xd2Vidmlldy5jcHA6CisgICAgICAgIChRV2ViVmlld0tpbmV0aWNTY3JvbGxlcjo6UVdlYlZp
ZXdLaW5ldGljU2Nyb2xsZXIpOgorICAgICAgICAoUVdlYlZpZXdLaW5ldGljU2Nyb2xsZXI6OmV2
ZW50RmlsdGVyKToKKyAgICAgICAgKFFXZWJWaWV3S2luZXRpY1Njcm9sbGVyOjpjdXJyZW50RnJh
bWUpOgorICAgICAgICAoUVdlYlZpZXdLaW5ldGljU2Nyb2xsZXI6OnNjcm9sbGluZ0ZyYW1lQXQp
OgorICAgICAgICAoUVdlYlZpZXdLaW5ldGljU2Nyb2xsZXI6OmF0dGFjaFRvV2lkZ2V0KToKKyAg
ICAgICAgKFFXZWJWaWV3S2luZXRpY1Njcm9sbGVyOjpyZW1vdmVGcm9tV2lkZ2V0KToKKyAgICAg
ICAgKFFXZWJWaWV3S2luZXRpY1Njcm9sbGVyOjpwb3NpdGlvblJhbmdlKToKKyAgICAgICAgKFFX
ZWJWaWV3S2luZXRpY1Njcm9sbGVyOjpwb3NpdGlvbik6CisgICAgICAgIChRV2ViVmlld0tpbmV0
aWNTY3JvbGxlcjo6dmlld3BvcnRTaXplKToKKyAgICAgICAgKFFXZWJWaWV3S2luZXRpY1Njcm9s
bGVyOjpzZXRQb3NpdGlvbik6CisgICAgICAgIChRV2ViVmlldzo6UVdlYlZpZXcpOgorCiAyMDEw
LTAxLTI4ICBLZW5uZXRoIFJvaGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4K
IAogICAgICAgICBSZXZpZXdlZCBieSBTaW1vbiBIYXVzbWFubi4K
</data>

          </attachment>
      

    </bug>

</bugzilla>