2009-07-09  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Make Widget RefCounted to fix:

        <rdar://problem/7038831> REGRESSION (TOT): In Mail, a crash occurs 
        at WebCore::Widget::afterMouseDown() after clicking To Do's close 
        box
        <rdar://problem/6978804> WER #16: Repro Access Violation in 
        WebCore::PluginView::bindingInstance (1310178023)
        -and-
        <rdar://problem/6991251> WER #13: Crash in WebKit!
        WebCore::PluginView::performRequest+203 (1311461169) 

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):
        (WebCore::FrameLoaderClientQt::createJavaAppletWidget):
        * WebCoreSupport/FrameLoaderClientQt.h:

2009-07-08  Pradeepto Bhattacharya  <pradeepto@kde.org>

        Reviewed by Ariya Hidayat.

        Build fix.

        * WebCoreSupport/FrameLoaderClientQt.h: Removed the slot slotCallPolicyFunction().

2009-07-08  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        https://bugs.webkit.org/show_bug.cgi?id=27080

        Fix DRT instability issues with fast/loader/submit-form-while-parsing-2.html

        When the form is submitted we call the policy function in the frame
        loader delayed with a queued connection. That queued connection
        sometimes interferes with the javascript timeout set in the testcase.

        Eliminate the entire delayed policy function mechanism and instead always
        call back directly, like in the other ports. In most other places we called
        the slot directly anyway.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::FrameLoaderClientQt): Remove m_policyFunction.
        (WebCore::FrameLoaderClientQt::callPolicyFunction): Call the policy function directly instead
        of emitting the queued signal.
        (WebCore::FrameLoaderClientQt::cancelPolicyCheck): Call callPolicyFunction directly.
        (WebCore::FrameLoaderClientQt::dispatchWillSubmitForm): Ditto.
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForMIMEType): Ditto.
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction): Ditto.
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction): Ditto.
        * WebCoreSupport/FrameLoaderClientQt.h: Remove m_policyFunction as well as the associated
        signal.

2009-07-07  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger Freyther.

        Add Qt DRT hook for clearing the frame name.

        * Api/qwebframe.cpp:
        (qt_drt_clearFrameName):

2009-07-05  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger Freyther.

        Fix two qdoc warnings.

        Added missing \property for QWebFrame::hasFocus and added \a
        tag for pos of QWebPage::frameAt.

        * Api/qwebframe.cpp:
        * Api/qwebpage.cpp:

2009-07-04  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        Use the recently introduced FocusController::setFocused

        Use the recently introduced FocusController::setFocused
        in the Qt platform. The SelectionController will be updated
        from within the FocusController now.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::focusInEvent):
        (QWebPagePrivate::focusOutEvent):

2009-07-02  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Improve documentation of QWebFrame::setFocus and hasFocus()
        Added missing Q_PROPERTY for QWebFrame::hasFocus.

        * Api/qwebframe.cpp: Clarify the docs.
        * Api/qwebframe.h: add Q_PROPERTY(focus).

2009-07-02  Joe Ligman  <joseph.ligman@nokia.com>

        Reviewed by Simon Hausmann.

        Bug 26855: [Qt] New methods for QWebFrame to check and set focus.

        Added new public methods QWebFrame::hasFocus() and QWebFrame::setFocus()
        Added auto test.

        * Api/qwebframe.cpp:
        (QWebFrame::hasFocus):
        (QWebFrame::setFocus):
        * Api/qwebframe.h:
        * tests/qwebframe/tst_qwebframe.cpp:

2009-07-01  Robert Hogan <robert@roberthogan.net>

        Reviewed by NOBODY.
        
        Fix Qt segfault when javascript disabled.
        If clients call addToJavaScriptWindowObject even though JavascriptEnabled is false
        webkit will segfault on the assert:
          ASSERTION FAILED: _rootObject
          (../../../WebCore/bridge/runtime.cpp:52
          JSC::Bindings::Instance::Instance(WTF::PassRefPtr<JSC::Bindings::RootObject>))
        Fix is to ensure JavaScript is enabled when client calls addToJavaScriptWindowObject.

        https://bugs.webkit.org/show_bug.cgi?id=26906

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

2009-07-01  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Move some API headers from WebCore.pro to headers.pri so that they
        get installed when running make install from the build directory.

        * Api/headers.pri:

2009-07-01  Balazs Kelemen  <kelemen.balazs.3@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Fixed robotized QtLauncher to work when there is no index.html in the user's home.

        * QtLauncher/main.cpp:
        (main):

2009-06-30  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.
        
        Renamed scrollbarUnderPoint to scrollbarAtPoint to follow conventions.

        * Api/qwebpage.cpp:
        (QWebPage::swallowContextMenuEvent):

2009-06-30  Joe Ligman  <joseph.ligman@nokia.com>

        Reviewed by Adam Treat.

        Bug 26422: [Qt] QWebPagePrivate::frameAt calculates wrong frame

        Added a public method QWebPage::frameAt
        Removed QWebPagePrivate::frameAt, which calcuated the wrong frame
        Modified QWebPage::swallowContextMenuEvent to use the new frameAt method
        New test case for frameAt added to tst_qwebpage.cpp

        * Api/qwebpage.cpp:
        (QWebPage::frameAt):
        (QWebPage::swallowContextMenuEvent):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * tests/qwebpage/frametest/iframe.html: Added.
        * tests/qwebpage/frametest/iframe2.html: Added.
        * tests/qwebpage/frametest/iframe3.html: Added.
        * tests/qwebpage/tst_qwebpage.cpp:
        (frameAtHelper):
        (tst_QWebPage::frameAt):
        * tests/qwebpage/tst_qwebpage.qrc:

2009-06-30  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        Add QWebFrame::baseUrl() function that exposes the base URL of a frame.
        Autotests included.

        * Api/qwebframe.cpp:
        (QWebFrame::baseUrl):
        * Api/qwebframe.h:
        * tests/qwebframe/tst_qwebframe.cpp:

2009-06-29  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Qt build, add missing isSpeaking() implementation to
        ContextMenuClient.

        * WebCoreSupport/ContextMenuClientQt.cpp:
        (WebCore::ContextMenuClientQt::isSpeaking):
        * WebCoreSupport/ContextMenuClientQt.h:

2009-06-28  Sriram Yadavalli  <sriram.yadavalli@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] Fix build break for Qt
        https://bugs.webkit.org/show_bug.cgi?id=26779

        * Api/qwebpage.cpp:
        (QWebPage::swallowContextMenuEvent):

2009-06-27  Simon Hausmann  <simon.hausmann@nokia.com>

        Build fix for Qt under Windows.

        * Api/qwebhistory.h: Use consistent export linkage for the datastream operators.

2009-06-26  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Simon Fraser.
        
        Changed call of scrollbarUnderMouse to scrollbarUnderPoint to match new API.

        * Api/qwebpage.cpp:
        (QWebPage::swallowContextMenuEvent):

2009-06-26  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Add support for saving and loading of QWebHistory to and from a QByteArray.

        This includes streaming operators for QWebHistory. for convenience.

        New autotests that test QWebHistory and QWebHistoryItem serialization.

        * Api/qwebhistory.cpp:
        (QWebHistory::restoreState):
        (QWebHistory::saveState):
        (operator<<):
        (operator>>):
        * Api/qwebhistory.h:
        * Api/qwebhistory_p.h:
        * tests/qwebhistory/tst_qwebhistory.cpp:
        (tst_QWebHistory::):
        (tst_QWebHistory::init):
        (tst_QWebHistory::title):
        (tst_QWebHistory::count):
        (tst_QWebHistory::back):
        (tst_QWebHistory::forward):
        (tst_QWebHistory::itemAt):
        (tst_QWebHistory::goToItem):
        (tst_QWebHistory::items):
        (tst_QWebHistory::serialize_1):
        (tst_QWebHistory::serialize_2):
        (tst_QWebHistory::serialize_3):
        (tst_QWebHistory::saveAndRestore_1):
        (tst_QWebHistory::saveAndRestore_2):
        (tst_QWebHistory::saveAndRestore_3):

2009-06-26  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Fix the behaviour of QWebHistory::itemAt to interpret the specified index as absolute index.

        Returns an invalid QWebHistoryItem if the index is out of range.

        * Api/qwebhistory.cpp:
        (QWebHistory::itemAt):
        * tests/qwebhistory/tst_qwebhistory.cpp:
        (tst_QWebHistory::itemAt):

2009-06-26  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Added a few autotest to QWebHistory.

        * tests/qwebhistory/data/page1.html: Added.
        * tests/qwebhistory/data/page2.html: Added.
        * tests/qwebhistory/data/page3.html: Added.
        * tests/qwebhistory/data/page4.html: Added.
        * tests/qwebhistory/data/page5.html: Added.
        * tests/qwebhistory/data/page6.html: Added.
        * tests/qwebhistory/qwebhistory.pro: Added.
        * tests/qwebhistory/tst_qwebhistory.cpp: Added.
        (tst_QWebHistory::):
        (tst_QWebHistory::tst_QWebHistory):
        (tst_QWebHistory::~tst_QWebHistory):
        (tst_QWebHistory::init):
        (tst_QWebHistory::cleanup):
        (tst_QWebHistory::title):
        (tst_QWebHistory::count):
        (tst_QWebHistory::back):
        (tst_QWebHistory::forward):
        (tst_QWebHistory::goToItem):
        (tst_QWebHistory::items):
        * tests/qwebhistory/tst_qwebhistory.qrc: Added.
        * tests/tests.pro:

2009-06-26  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>

        Reviewed by Simon Hausmann.

        Fix support for documenting functions prefixed with QWEBKIT_EXPORT

        Add QWEBKIT_EXPORT to the list of macros to ignore by qdoc.

        * docs/qtwebkit.qdocconf:

2009-06-26  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Eric Seidel.

        Bug 20303: [Qt] Key events are not working in frames.

        Send scrolling events to current focused frame, bubble the event
        up to parent frame if it is not handled.  Use EventHandler's new
        shared scrolling code.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::keyPressEvent):
        (QWebPagePrivate::handleScrolling):
        * Api/qwebpage_p.h:

2009-06-25  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Adam Treat.

        Add highlight functionality to the QWebPage::findText() method. Introduced is
        new HighlightAllOccurrences flag which passed to the function will make it mark
        all existing occurrences of specified string in the page.

        * Api/qwebpage.cpp:
        (QWebPage::findText):
        * Api/qwebpage.h:
        * Api/qwebview.cpp:

2009-06-19  Daniel Teske <qt-info@nokia.com>

        Reviewed by Simon Hausmann.

        Remove warnings for QString() constructions from const char *

        By explicitly wrapping it with QLatin1String() / QLatin1Char()

        * Api/qwebelement.cpp:
        (QWebElement::classes): Use QLatin1String.
        (QWebElement::addClass): Ditto.
        (QWebElement::removeClass): Ditto.
        (QWebElement::toggleClass): Ditto.

2009-06-18  Friedemann Kleint  <Friedemann.Kleint@nokia.com>

        Reviewed by Simon Hausmann.

        Fixed MinGW compilation.

        * Api/qwebelement.cpp:
        (QWebElement::evaluateScript):

2009-06-18  Markus Goetz <Markus.Goetz@nokia.com>

        Reviewed by Simon Hausman.

        Clarify in docs how to compile with debug information.

        * docs/qtwebkit.qdoc:

2009-06-17  Markus Goetz <Markus.Goetz@nokia.com>

        Reviewed by Simon Hausmann.

        QWebPage: Don't call supportsSsl()

        This stops QWebPage from loading the OpenSSL libs,
        certificates etc. when they are not needed for the non-HTTPS case.

        Loading the SSL libraries can be a very slow operation.

        * Api/qwebpage.cpp:
        (QWebPage::userAgentForUrl):

2009-06-16  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon Hausmann.

        Doc: Fixed QWebPage::forwardUnsupportedContent documentation and added
        more information about Web plugins.

        * Api/qwebpage.cpp:
        * Api/qwebsettings.cpp:
        * docs/qtwebkit.qdoc:

2009-06-16  Morten Engvoldsen  <morten.engvoldsen@nokia.com>

        Reviewed by Ariya Hidayat.

        Clearifying QWebFrame docs

        Adding docs to toHtml() and toPlainText()

        * Api/qwebframe.cpp:

2009-06-15  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Reviewed by Adam Treat.

        Support the back/forward/stop/refresh multimedia keys and accept the
        event when handling backspace and shift backspace as we should.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::keyPressEvent):

2009-06-15  Andre Pedralho  <andre.pedralho@openbossa.org>

        Reviewed by Adam Treat.

        https://bugs.webkit.org/show_bug.cgi?id=26351
        Remove bool QWebHitTestResult::isScrollBar() const and make sure a null QWebHitTestResult is returned instead.

        * Api/qwebframe.cpp:
        (QWebFrame::hitTestContent):
        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        (QWebPage::updatePositionDependentActions):

2009-06-15  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Adam Treat.

        Fix the logic for disabling the fixed layout feature, when an invalid
        QSize is set.

        * Api/qwebpage.cpp:
        (QWebPage::setFixedContentsSize):

2009-06-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Fisher.

        https://bugs.webkit.org/show_bug.cgi?id=24492

        Move registerURLSchemeAsLocal from FrameLoader to SecurityOrigin.

        * Api/qwebpage.cpp:
        (QWebPage::acceptNavigationRequest):

2009-06-10  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Ariya Hidayat.

        Documented ResolveRule and StylePriority enum values as well as their use in
        QWebElement::styleProperty and QWebElement::setStyleProperty methods.

        Based on the work of Simon Hausmann.

        * Api/qwebelement.cpp:
        (QWebElement::styleProperty):
        (QWebElement::setStyleProperty):
        * Api/qwebelement.h:

2009-06-09  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Rubber-stamped by Simon Hausmann.

        Fix qdoc warning, function parameter string must be referred.

        * Api/qwebview.cpp:

2009-06-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Renamed QWebSettings::AllowUniversalAccessFromFileUrls to
        LocalContentCanAccessRemoteUrls, as discussed in the API review.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        * Api/qwebsettings.h:

2009-06-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Merged useFixedLayout property with fixedLayoutSize and
        renamed the latter to fixedContentsSize.

        * Api/qwebpage.cpp:
        (QWebPage::fixedContentsSize):
        (QWebPage::setFixedContentsSize):
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):

2009-06-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Renamed QWebHitTestResult::linkTarget to linkElement() and made it return
        a QWebElement. The link target itself is always the target DOM attribute.

        * Api/qwebframe.cpp:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
        (QWebHitTestResult::linkElement):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * tests/qwebframe/tst_qwebframe.cpp:

2009-06-08  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Holger Freyther.

        Renamed QWebElement::enclosingBlock to enclosingBlockElement
        and changed the return type to QWebElement, as discussed in
        the API review. This API is more generic and through
        QWebElement's geometry() it is possible to retrieve the
        same information.

        * Api/qwebelement.cpp:
        (QWebElement::QWebElement):
        * Api/qwebelement.h:
        * Api/qwebframe.cpp:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
        (QWebHitTestResult::enclosingBlockElement):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:

2009-06-05  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Add missing includes of config.h

        * Api/qcookiejar.cpp:
        * Api/qwebnetworkinterface.cpp:
        * Plugins/ICOHandler.cpp:
        * WebCoreSupport/DragClientQt.cpp:
        * WebCoreSupport/EditCommandQt.cpp:

2009-06-03  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        Add API to make it possible to clear all memory caches used by
        QtWebKit.

        * Api/qwebsettings.cpp:
        (QWebSettings::clearMemoryCaches):
        * Api/qwebsettings.h:

2009-06-01  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Rubber-stamped by Gustavo Noronha.

        Before guessing the url trim the string to remove whitespace added to the start/end by the user.

        * Api/qwebview.cpp:
        (QWebView::guessUrlFromString):
        * tests/qwebview/tst_qwebview.cpp:
        (tst_QWebView::guessUrlFromString_data):

2009-06-01  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Rubber-stamped by Gustavo Noronha.

        Use QLatin1Char() to compile when QT_NO_CAST_FROM_ASCII and QT_NO_CAST_TO_ASCII is defined

        * Api/qwebview.cpp:
        (QWebView::guessUrlFromString):

2009-06-01  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Rubber-stamped by Gustavo Noronha.

        Cleanup autotest file
        - use proper includes
        - remove useless constructor and destructor
        - add missing newline at the end of the file

        * tests/qwebview/tst_qwebview.cpp:

2009-06-01  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Rubber-stamped by Gustavo Noronha.

        Add a missing space between two words in the documentation.

        * Api/qwebview.cpp:

2009-05-26  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=25823

        Add an API to generate a QUrl out of a string correcting for errors and missing information.
        See the API documentation for more details about the function.

        Autotests: included

        * Api/qwebview.cpp:
        (QWebView::guessUrlFromString):
        * Api/qwebview.h:
        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        (MainWindow::changeLocation):
        * tests/qwebview/.gitignore: Added.
        * tests/qwebview/qwebview.pro:
        (tst_QWebView::initTestCase):
        (tst_QWebView::cleanupTestCase):
        (tst_QWebView::init):
        (tst_QWebView::cleanup):
        (tst_QWebView::guessUrlFromString_data):
        (tst_QWebView::guessUrlFromString):

2009-05-23  David Kilzer  <ddkilzer@apple.com>

        Part 2 of 2: Bug 25495: Implement PassOwnPtr and replace uses of std::auto_ptr

        <https://bugs.webkit.org/show_bug.cgi?id=25495>

        Reviewed by Oliver Hunt.

        * WebCoreSupport/ChromeClientQt.h:
        (WebCore::ChromeClientQt::createHTMLParserQuirks): Return a
        PassOwnPtr<> instead of a raw HTMLParserQuirks pointer.

2009-05-23  Jakob Truelsen  <antialize@gmail.com>

        Reviewed by Holger Freyther.

        https://bugs.webkit.org/show_bug.cgi?id=25863

        Expose the default text encoding property to Qt.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::setDefaultTextEncoding):
        (QWebSettings::defaultTextEncoding):
        * Api/qwebsettings.h:

2009-05-21  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Simon Hausmann.

        [Qt] Additional test for resource load (CSS file) for QWebFrame.

        * tests/qwebframe/qwebframe.qrc:
        * tests/qwebframe/style.css: Added.
        * tests/qwebframe/tst_qwebframe.cpp:

2009-05-22  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed Qt build fix.

        Provide dummy implementation of pure virtual EditorClient method.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::getAutoCorrectSuggestionForMisspelledWord):
        * WebCoreSupport/EditorClientQt.h:

2009-05-20  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Simon Hausmann and Holger Freyther.

        [Qt] Add renderHints property to QWebView.

        * Api/qwebview.cpp:
        (QWebViewPrivate::QWebViewPrivate):
        (QWebView::renderHints):
        (QWebView::setRenderHints):
        (QWebView::setRenderHint):
        (QWebView::paintEvent):
        * Api/qwebview.h:
        * tests/qwebview/qwebview.pro: Added.
        * tests/qwebview/tst_qwebview.cpp: Added.
        (tst_QWebView::tst_QWebView):
        (tst_QWebView::~tst_QWebView):
        (tst_QWebView::init):
        (tst_QWebView::cleanup):
        (tst_QWebView::renderHints):
        * tests/tests.pro:

2009-05-20  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=25834

        Make ChromeClient a interface again

        With recent additions to ChromeClient.h empty defaults were
        added. This is bad for porters as these changes go unnoticed
        and at runtime no notImplemented warning is logged and grepping
        for notImplemented will not show anything. Change this Client
        to be like the other Clients again and always have pure virtuals
        (but for stuff inside #ifdef PLATFORM(MAC)).

        Update the various WebKit/* implementations to compile again.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::setCursor):
        (WebCore::ChromeClientQt::requestGeolocationPermissionForFrame):
        * WebCoreSupport/ChromeClientQt.h:
        (WebCore::ChromeClientQt::scrollRectIntoView):

2009-05-19  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        Fix a plugin bug in the WebKit code, similar to the one in WebCore.

        The problem is when a non visible QtPluginWidget would show it self
        in a sibling frame. The problem was due to our clipping. In Qt,
        if setMask is set with an empty QRegion, no clipping will
        be performed, so in that case we hide the PluginContainer

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::):

2009-05-18  Zoltan Horvath <horvath.zoltan.6@stud.u-szeged.hu>

        Reviewed by Ariya Hidayat.

        Makes QtLauncher to accept multiple urls in command line and opens these in separate windows.

        * QtLauncher/main.cpp:
        (MainWindow::newWindow):
        (main):

2009-05-14  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Ariya Hidayat.

        Add a comment to QWebView::iconChanged(), mentioning that you will
        need to set the icon database path for icons to be loaded, and thus
        receive the signal.

        * Api/qwebview.cpp:

2009-05-14  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Ariya Hidayat.

        Fix setHtml test case by adding <head> tag to the expected result. This tag is automatically added by WebKit.

        * tests/qwebframe/tst_qwebframe.cpp:

2009-05-14  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Ariya Hidayat.

        Add a test case for the signal urlChanged().
        * tests/qwebframe/tst_qwebframe.cpp:

2009-05-13  Yael Aharon <yael.aharon@nokia.com>

        Reviewed by Ariya Hidayat.

        Move emitting the signal QWebFrame::urlChanged to FrameLoaderClientQt::dispatchDidCommitLoad().
        This is to ensure that urlChanged() is emitted even if the frame has no title.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveTitle):
        (WebCore::FrameLoaderClientQt::dispatchDidCommitLoad):

2009-05-13  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Rubberstamped by Ariya Hidayat.

        Fix coding style: Add {} to contents of if, containing a for loop.

        * Api/qwebelement.cpp:
        (QWebElement::styleProperty):

2009-05-12  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Ariya Hidayat.

        Fixed a possible crash @styleProperty when there is no embedded/external CSS set.

        * Api/qwebelement.cpp:
        (QWebElement::styleProperty):
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::style):

2009-05-12  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Ariya Hidayat.

        Added external CSS test cases to QWebElement::styleProperty() method.

        Also some ::styleProperty() tests cleanup.

        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::style):

2009-05-12  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Ariya Hidayat.

        Many methods were not considering the case of the element not having
        siblings or children when inserting nodes, and thus broke in some
        situations. This patch fixes that.

        * Api/qwebelement.cpp:
        (QWebElement::prependInside):
        (QWebElement::appendOutside):
        (QWebElement::encloseWith):

2009-05-08  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Ariya Hidayat.

        Make is possible to mark a style property as important while setting
        it. Also support the normal CSS property syntax "!important", while
        accepting spaces between the ! and the important keyword.

        * Api/qwebelement.cpp:
        (QWebElement::setStyleProperty):
        * Api/qwebelement.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::style):

2009-05-08  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Ariya Hidayat.

        Working with Antonio Gomes.

        Add support for finding the style property actually applied to the element.

        * Api/qwebelement.cpp:
        (QWebElement::styleProperty):
        * Api/qwebelement.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::style):

2009-05-11  Norbert Leser  <norbert.leser@nokia.com>

        Reviewed by Darin Adler.

        Bug 24538: class/struct mixup in forward declarations
        https://bugs.webkit.org/show_bug.cgi?id=24538

        * Api/qwebpage.h:

2009-05-11  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Holger Freyther.

        Fix Qt build when ENABLE_DATABASE is turned off

        https://bugs.webkit.org/show_bug.cgi?id=25587

        * Api/qwebdatabase.cpp:
        (QWebDatabase::displayName):
        (QWebDatabase::expectedSize):
        (QWebDatabase::size):
        (QWebDatabase::fileName):
        (QWebDatabase::removeDatabase):
        * Api/qwebdatabase_p.h:
        * Api/qwebsecurityorigin.cpp:
        (QWebSecurityOrigin::allOrigins):
        (QWebSecurityOrigin::databases):

2009-05-05  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        Improve behaviour of the QWebElement enclose* functions, to work
        similar to the jQuery wrap functions. We now enclose the contents
        of the element in the child of the deepest descendant element
        within the structure of the enclose element structure given.

        * Api/qwebelement.cpp:
        (findInsertionPoint):
        (QWebElement::encloseContentsWith):
        (QWebElement::encloseWith):
        (QWebElement::replace):
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::encloseContentsWith):
        (tst_QWebElement::encloseWith):

2009-05-06  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        After commit rev @43215, setHtml() without a <head> tag,
        automatically adds it, so update our test case to respect this.

        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::textHtml):

2009-05-06  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed Qt build fix.

        Dont' use ENABLE() in Qt API headers, as they are not available when building
        against the API.

        * Api/qwebdatabase.h:
        * Api/qwebsecurityorigin.h:

2009-05-05  Ben Murdoch  <benm@google.com>

        Reviewed by Eric Seidel.
        
        Add #if ENABLE(DATABASE) guards around database code so toggling ENABLE_DATABASE off does not break builds.
        https://bugs.webkit.org/show_bug.cgi?id=24776

        * Api/qwebdatabase.cpp:
        * Api/qwebdatabase.h:
        * Api/qwebdatabase_p.h:
        * Api/qwebsecurityorigin.cpp:
        (QWebSecurityOrigin::databaseUsage):
        (QWebSecurityOrigin::databaseQuota):
        (QWebSecurityOrigin::setDatabaseQuota):
        * Api/qwebsecurityorigin.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::exceededDatabaseQuota):
        * WebCoreSupport/ChromeClientQt.h:

2009-05-05  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Various improvements to the class documentation, including a simple snippet for QWebElement.

        * Api/qwebelement.cpp:
        * Api/qwebframe.cpp:
        * docs/webkitsnippets/webelement/main.cpp: Added.
        * docs/webkitsnippets/webelement/webelement.pro: Added.

2009-05-05  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Simplify variant conversion by moving the null check into
        convertValueToQVariant.

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript): Moved null check into conversion function.
        * tests/qwebframe/tst_qwebframe.cpp:
        Added test to verify the correct conversion of null values to QVariant.

2009-05-01  Geoffrey Garen  <ggaren@apple.com>

        Rubber Stamped by Sam Weinig.
        
        Renamed JSValuePtr => JSValue.

        * Api/qwebelement.cpp:
        (setupScriptContext):
        (setupScriptObject):
        (QWebElement::evaluateScript):
        (QWebElement::functions):
        (QWebElement::scriptableProperty):
        (QWebElement::setScriptableProperty):
        (QWebElement::scriptableProperties):

2009-05-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Add a FrameLoaderClient callback for the ResourceRetrievedByXMLHttpRequest.

        https://bugs.webkit.org/show_bug.cgi?id=25347

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidLoadResourceByXMLHttpRequest):
        * WebCoreSupport/FrameLoaderClientQt.h:

2009-04-30  David Kilzer  <ddkilzer@apple.com>

        Provide a mechanism to create a quirks delegate for HTMLParser

        Reviewed by David Hyatt.

        * WebCoreSupport/ChromeClientQt.h:
        (WebCore::ChromeClientQt::createHTMLParserQuirks): Added.  The
        default implementation of this factory method returns 0.

2009-04-30  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Unreviewed build fix after r43072.

        * Api/qwebframe.cpp:
        (qt_drt_setJavaScriptProfilingEnabled): Enclose with JAVASCRIPT_DEBUGGER.

2009-04-30  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Unreviewed build fix after r43063.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::addMessageToConsole):
        * WebCoreSupport/ChromeClientQt.h:

2009-04-30  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        Implement encloseContentsWith and rename wrap to encloseWith.

        Also in encloseWith, make sure that you cannot enclose with
        non-enclosable elements.

        * Api/qwebelement.cpp:
        (QWebElement::encloseContentsWith):
        (QWebElement::encloseWith):
        * Api/qwebelement.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::encloseContentsWith):
        (tst_QWebElement::encloseWith):

2009-04-30  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        The Qt API exposes a global history patch CSSStyleSelector to make API consumers work again

        https://bugs.webkit.org/show_bug.cgi?id=20952

        The QtWebKit port made the mistake of exposing a global history. This broke
        with the addition of PageGroup and LinkHash. This needs to be repaired
        for Qt4.5.

        Add a function to LinkHash.cpp that is resolving a URL. Use this
        function from within CSSStyleSelector to forward the url to the
        QWebHistoryInterface API.

        It is sad that there is a path within visitedLinkHash which is now
        doing a memcpy, it is sad to add a PLATFORM(QT) define to CSSStyleSelector
        and using QtWebKit types within WebCore is a layering violation as well.

        PageGroup::setShouldTrackVisitedLinks is currently not enabled. For
        Qt4.6 a second version of the QWebHistoryInterface is going to be
        added which will fix things up.

        * Api/qwebhistoryinterface.cpp:
        (QWebHistoryInterface::setDefaultInterface): Add note for Qt4.6
        * Api/qwebpage.cpp: Remove PageGroup::setShouldTrackVisitedLinks(true)
        (QWebPagePrivate::QWebPagePrivate):
        * tests/qwebhistoryinterface/qwebhistoryinterface.pro: Added unit test.
        * tests/qwebhistoryinterface/tst_qwebhistoryinterface.cpp: Added unit test.
        (tst_QWebHistoryInterface::tst_QWebHistoryInterface):
        (tst_QWebHistoryInterface::~tst_QWebHistoryInterface):
        (tst_QWebHistoryInterface::init):
        (tst_QWebHistoryInterface::cleanup):
        (FakeHistoryImplementation::addHistoryEntry):
        (FakeHistoryImplementation::historyContains):
        (tst_QWebHistoryInterface::visitedLinks): Check the Qt4.4 behaviour.
        * tests/tests.pro:

2009-04-30  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Unreviewed build fix, after r43035.

        Temporarily use Position::deprecatedEditingOffset().

        * Api/qwebpage.cpp:
        (QWebPage::inputMethodQuery):

2009-03-27  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Reviewed by Simon Hausmann.

        Update the page actions when a finishing loading even if the frame is
        not the top frame such as when browsing inside of a website with frames.
        https://bugs.webkit.org/show_bug.cgi?id=24890

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoad):
        * tests/qwebpage/frametest/frame_a.html: Added.
        * tests/qwebpage/frametest/index.html: Added.
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::backActionUpdate):

2009-04-29  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Simon Hausmann.

        Implement QWebElement::evaluateScript.

        * Api/qwebelement.cpp:
        (setupScriptContext):
        (QWebElement::evaluateScript):
        * Api/qwebelement.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::evaluateScript):

2009-04-29  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Replaced QWebElementCollection with QList<QWebElement>.

        * Api/qwebelement.cpp:
        (QWebElement::findAll):
        * Api/qwebelement.h:
        * Api/qwebframe.cpp:
        (QWebFrame::findAllElements):
        * Api/qwebframe.h:
        * QtLauncher/main.cpp:
        (MainWindow::selectElements):
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::simpleCollection):
        (tst_QWebElement::namespaceURI):
        (tst_QWebElement::nullSelect):

2009-04-28  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        QWebElement API changes after another round of API review:

        * Fix argument names of findAll/findFirst
        * Split up toXml into innerXml and outerXml
        * Removed confusing toggleClass overload
        * Fixed casing of namespaceUri to follow QXmlStreamReader
        * Removed tagName from firstChild/nextSibling/etc.
        * Renamed append/prepend/insertAfter/insertBefore to [append|prepend][Inside|Outside]
        * Renamed wrapWith() back to wrap()
        * Made clone() const
        * Renamed remove() to takeFromDocument(), added removeFromDocument()
        * Renamed clear() to removeChildren()
        * Renamed scriptsFunctions/callScriptFunction to functions()/callFunction()
        * Renamed scriptProperty to scriptableProperty

        * Api/qwebelement.cpp:
        (QWebElement::findAll):
        (QWebElement::findFirst):
        (QWebElement::setOuterXml):
        (QWebElement::toOuterXml):
        (QWebElement::setInnerXml):
        (QWebElement::toInnerXml):
        (QWebElement::namespaceUri):
        (QWebElement::firstChild):
        (QWebElement::lastChild):
        (QWebElement::nextSibling):
        (QWebElement::previousSibling):
        (QWebElement::callFunction):
        (QWebElement::functions):
        (QWebElement::scriptableProperty):
        (QWebElement::setScriptableProperty):
        (QWebElement::scriptableProperties):
        (QWebElement::appendInside):
        (QWebElement::prependInside):
        (QWebElement::prependOutside):
        (QWebElement::appendOutside):
        (QWebElement::clone):
        (QWebElement::takeFromDocument):
        (QWebElement::removeFromDocument):
        (QWebElement::removeChildren):
        (QWebElement::wrap):
        (QWebElement::replace):
        * Api/qwebelement.h:
        * Api/qwebframe.cpp:
        (QWebFrame::findAllElements):
        (QWebFrame::findFirstElement):
        * Api/qwebframe.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::textHtml):
        (tst_QWebElement::classes):
        (tst_QWebElement::namespaceURI):
        (tst_QWebElement::foreachManipulation):
        (tst_QWebElement::callFunction):
        (tst_QWebElement::callFunctionSubmitForm):
        (tst_QWebElement::functionNames):
        (tst_QWebElement::properties):
        (tst_QWebElement::appendAndPrepend):
        (tst_QWebElement::insertBeforeAndAfter):
        (tst_QWebElement::remove):
        (tst_QWebElement::clear):
        (tst_QWebElement::replaceWith):

2009-04-28  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Fix some qdoc warnings.

        * Api/qwebframe.cpp: Fix links.
        * Api/qwebnetworkinterface.cpp: Make docs internal.
        * Api/qwebnetworkinterface.h: Ditto.
        * Api/qwebpage.cpp: Fix property name in \property.

2009-04-24  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Ariya Hidayat.

        Fix qdoc warning about link to QAction::isEnabled.

        * Api/qwebpage.cpp:

2009-04-24  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        Added support for generating API docs in the Qt build using "make docs"

        Added code snippets and overview from the Qt sources references in the API docs.

        * Api/qwebpage.cpp: Adjust paths to snippets.
        * Api/qwebview.cpp: Ditto.
        * docs/docs.pri: Added.
        * docs/qtwebkit.qdoc: Added.
        * docs/qtwebkit.qdocconf: Added.
        * docs/webkitsnippets/qtwebkit_build_snippet.qdoc: Added.
        * docs/webkitsnippets/qtwebkit_qwebview_snippet.cpp: Added.
        * docs/webkitsnippets/simple/main.cpp: Added.
        * docs/webkitsnippets/simple/simple.pro: Added.
        * docs/webkitsnippets/webpage/main.cpp: Added.
        * docs/webkitsnippets/webpage/webpage.pro: Added.

2009-04-23  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Ariya Hidayat.

        [Qt] Added QWebElement::computedStyleProperty method.

        * Api/qwebelement.cpp:
        (QWebElement::computedStyleProperty):
        * Api/qwebelement.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::computedStyle):

2009-04-23  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Rubber-stamped by Ariya Hidayat.

        [Qt] Rename QWebElement arguments from html to markup

        * Api/qwebelement.cpp:
        (QWebElement::append):
        (QWebElement::prepend):
        (QWebElement::insertBefore):
        (QWebElement::insertAfter):
        * Api/qwebelement.h:

2009-04-21  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Ariya Hidayat.

        QWebElementSelection renamed to QWebElementCollection.

        * Api/qwebelement.cpp:
        (QWebElement::findAll):
        (QWebElementCollectionPrivate::QWebElementCollectionPrivate):
        (QWebElementCollectionPrivate::create):
        (QWebElementCollection::QWebElementCollection):
        (QWebElementCollection::operator=):
        (QWebElementCollection::~QWebElementCollection):
        (QWebElementCollection::operator+):
        (QWebElementCollection::append):
        (QWebElementCollection::count):
        (QWebElementCollection::at):
        (QWebElementCollection::toList):
        * Api/qwebelement.h:
        * Api/qwebframe.cpp:
        (QWebFrame::findAllElements):
        * Api/qwebframe.h:
        * QtLauncher/main.cpp:
        (MainWindow::selectElements):
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::simpleCollection):
        (tst_QWebElement::iteration):
        (tst_QWebElement::emptyCollection):
        (tst_QWebElement::appendCollection):
        (tst_QWebElement::nullSelect):

2009-04-17  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=25242

        Remove QtCore 4.5 dependency from QWebElement test

        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::iteration): Use QList::count() instead of QList::length()

2009-04-16  Holger Hans Peter Freyther  <zecke@selfish.org>

        Rubber-stamped by Simon Hausmann.

        Make the operator== and operator!= non inline to
        allow looking at the d-pointer in the future.

        * Api/qwebelement.cpp:
        (QWebElement::operator==):
        (QWebElement::operator!=):
        * Api/qwebelement.h:

2009-04-15  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Ariya Hidayat.

        Rename extend() method in QWebElementSelection to append().

        * Api/qwebelement.cpp:
        (QWebElementSelection::append):
        * Api/qwebelement.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::appendSelection):

2009-04-15  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Simon Hausmann.

        Fixed nit/typo in QWebElement documentation.

        * Api/qwebelement.cpp:

2009-04-14  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=24841

        Fix linking against QtWebKit for Symbian and other platforms
        where the OS ABI distinguishes between an import or an export situation.

        * Api/qwebkitglobal.h: Instead of white-listing Win, remove the test.

2009-04-14  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Tor Arne Vestbø.

        Rename QWebElement::setHtml and html to setXml and toXml respectivily.
        
        Also add a mean to define the scope (inner or other).

        * Api/qwebelement.cpp:
        (QWebElement::setXml):
        (QWebElement::toXml):
        * Api/qwebelement.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::textHtml):
        (tst_QWebElement::foreachManipulation):

2009-04-14  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Tor Arne Vestbø.

        Rename QWebElement::setText() and text() to ::setPlainText and
        ::toPlainText, respectively.

        * Api/qwebelement.cpp:
        (QWebElement::setPlainText):
        (QWebElement::toPlainText):
        * Api/qwebelement.h:
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::textHtml):
        (tst_QWebElement::simpleSelection):
        (tst_QWebElement::appendAndPrepend):
        (tst_QWebElement::insertBeforeAndAfter):
        (tst_QWebElement::replaceWith):
        (tst_QWebElement::wrap):
        (tst_QWebElement::firstChildNextSiblingWithTag):
        (tst_QWebElement::lastChildPreviousSiblingWithTag):

2009-04-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Rename DOM API select function to findFirst, findAll, etc.

        * Api/qwebelement.cpp:
        (QWebElement::findAll):
        (QWebElement::findFirst):
        * Api/qwebelement.h:
        * Api/qwebframe.cpp:
        (QWebFrame::findAllElements):
        (QWebFrame::findFirstElement):
        * Api/qwebframe.h:
        * QtLauncher/main.cpp:
        (MainWindow::selectElements):
        * tests/qwebelement/tst_qwebelement.cpp:
        (tst_QWebElement::simpleSelection):
        (tst_QWebElement::attributesNS):
        (tst_QWebElement::classes):
        (tst_QWebElement::namespaceURI):
        (tst_QWebElement::iteration):
        (tst_QWebElement::foreachManipulation):
        (tst_QWebElement::callFunctionSubmitForm):
        (tst_QWebElement::documentElement):
        (tst_QWebElement::frame):
        (tst_QWebElement::style):
        (tst_QWebElement::extendSelection):
        (tst_QWebElement::properties):
        (tst_QWebElement::appendAndPrepend):
        (tst_QWebElement::insertBeforeAndAfter):
        (tst_QWebElement::remove):
        (tst_QWebElement::clear):
        (tst_QWebElement::replaceWith):
        (tst_QWebElement::wrap):
        (tst_QWebElement::nullSelect):
        (tst_QWebElement::firstChildNextSibling):
        (tst_QWebElement::firstChildNextSiblingWithTag):
        (tst_QWebElement::lastChildPreviousSibling):
        (tst_QWebElement::lastChildPreviousSiblingWithTag):

2009-04-06  Simon Hausmann  <simon.hausmann@nokia.com>
            Ariya Hidayat <ariya.hidayat@nokia.com>
            Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>
            Genevieve Mak <gen@staikos.net>

        Reviewed by Tor Arne Vestbø, Simon Hausmann

        First revision of new API in the Qt port to access the DOM.

        * Api/headers.pri: Added qwebelement.h to the API headers.
        * Api/qwebelement.cpp: Added.
        * Api/qwebelement.h: Added.
        * Api/qwebframe.cpp:
        (QWebFrame::documentElement): Added accessor for the document element.
        (QWebFrame::selectElements): Added convenienc query method.
        (QWebFrame::selectElement): Ditto.
        (QWebHitTestResult::element): Added accessor for underlying DOM element.
        * Api/qwebframe.h:
        * QtLauncher/main.cpp: Simple test gui for element selections.
        * tests/qwebelement/qwebelement.pro: Added.
        * tests/qwebelement/tst_qwebelement.cpp: Added.
        * tests/tests.pro: Added QWebElement & QWebElementSelection unit tests.

2009-04-02  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Qt build.

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction): Adapted code to renamed loadFrameRequest function.

2009-04-02  Takumi Asaki <takumi.asaki@nokia.com>

        Reviewed by Simon Hausmann.

        Fix pre-edit handling of text fields with input methods.

        The input method sends an empty preeditString() if all characters of
        the preedit should be deleted. So inputMethodEvent() has to use
        preeditString() if it's empty.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::inputMethodEvent):

2009-03-30  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Tor Arne Vestbø.

        Document that setHtml/setContent loads only the html/data immediately, not external objects.

        * Api/qwebframe.cpp:
        * Api/qwebview.cpp:

2009-03-29  Darin Adler  <darin@apple.com>

        Try to fix Qt build.

        * WebCoreSupport/EditorClientQt.cpp: Added include of HTMLElement.h.

        * WebCoreSupport/FrameLoaderClientQt.cpp: Added include of FormState.h.
        (WebCore::FrameLoaderClientQt::prepareForDataSourceReplacement):
        Removed unneeded call to detachChildren, which is called by FrameLoader
        right after this.
        (WebCore::FrameLoaderClientQt::createFrame): Use loadURLIntoChildFrame
        as other platforms do in the corresponding functions.

2009-03-27  Erik L. Bunce  <elbunce@xendom.com>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=24869

        Fixes an incorrect case in tst_qwebpage.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::cursorMovements):

2009-03-27  Erik L. Bunce  <elbunce@xendom.com>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=24746

        Add new editing related QWebPage::WebActions
        * Clipboard: PasteAndMatchStyle
        * Formatting: RemoveFormat, ToggleStrikethrough, ToggleSubscript, and
          ToggleSuperscript
        * List Editing: InsertUnorderedList, InsertOrderedList, Indent, Outdent
        * Paragraph Justification: AlignCenter, AlignJustified, AlignLeft, AlignRight 

        Improved selection and editing tests.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateEditorActions):
        (QWebPage::action):
        * Api/qwebpage.h:
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::textSelection):
        (tst_QWebPage::textEditing):

2009-03-26  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Tor Arne Vestbø.

        Fix the documentation of the QLocale usage in userAgentForUrl.

        * Api/qwebpage.cpp:

2009-03-20  Erik L. Bunce  <elbunce@xendom.com>

        Reviewed by Simon Hausmann.

        Fix for InsertParagraphSeparator and InsertLineSeparator so that
        QWebPage::action() creates QActions for them. Also make sure they get
        updated appropriately.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateEditorActions):
        (QWebPage::action):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::textEditing):

2009-03-20  Erik L. Bunce  <elbunce@xendom.com>

        Reviewed by Tor Arne Vestbø.

        Fix QWebPage::WebActions action states to more closely match when they are
        actually applicable and remove erroneous documentation.

        * Most WebActions implemented using editor commands now use the
          Editor::Command::isEnabled() to control their availability.
        * SelectAll is always enabled (since it's editor command is).
        * SetTextDirection{} family of WebActions are available when canEdit() is true
          and not just canEditRichly().

        Fix and clarify documentation about the availability of various web actions.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateAction):
        (QWebPagePrivate::updateEditorActions):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::textSelection):

2009-03-19  Ariya Hidayat <ariya.hidayat@trolltech.com>

        Reviewed by Simon Hausmann.

        Fixes pedantic compilation in QtWebKit.

        There are no semi-colons after namespace declarations.

        * Api/qwebdatabase.h:
        * Api/qwebsecurityorigin.h:

2009-03-19  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon Hausmann.

        Doc: Removed obsolete warning about Flash and other plugins.

        * Api/qwebsettings.cpp:

2009-03-19  Paul Olav Tvete  <paul.tvete@nokia.com>

        Reviewed by Simon Hausmann.

        Properly escape tooltip text

        ManualTest: http://xkcd.com/554/

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::setToolTip):

2009-03-10  Adam Treat  <adam.treat@torchmobile.com>

        Build fix for Qt after r41555.

        * Api/qwebpage.cpp:
        (QWebPage::acceptNavigationRequest):

2009-03-10  Xan Lopez  <xlopez@igalia.com>

        Build fix, no review.

        * Api/qwebpage.cpp:
        (QWebPage::inputMethodQuery):

2009-03-07  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Cameron Zwarich.

        These methods are clearly returning the wrong values as the two were
        returning swapped information.

        * Api/qwebpage.cpp:
        (QWebPage::totalBytes):
        (QWebPage::bytesReceived):

2009-03-05  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Rubber-stamped by Simon Hausmann.

        [Qt] NPAPI plugins are supported, adjust the API documentation.

        * Api/qwebsettings.cpp:

2009-03-04  Adam Barth  <abath@webkit.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24356

        Fix WebKit style for allowUniversalAccessFromFileURLs.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):

2009-03-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=24340

        Expose AllowUniversalAccessFromFileUrls to Qt clients.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        * Api/qwebsettings.h:

2009-03-03  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        [Qt] Create and update the action for SelectAll.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateAction):
        (QWebPagePrivate::updateEditorActions):
        (QWebPage::action):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::textSelection):

2009-03-02  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Eric Seidel.

        Add three new drt helper functions that enable all of the tests in
        LayoutTests/animation/* and LayoutTests/transitions/* to now pass.

        * Api/qwebframe.cpp:
        (qt_drt_pauseAnimation):
        (qt_drt_pauseTransitionOfProperty):
        (qt_drt_numberOfActiveAnimations):

2009-03-02  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Reviewed by George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=21230
        On X11 match the behavior of Firefox and also copy the url to the
        clipboard selection when the action Copy Link Location is executed.

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):

2009-02-25  Kavindra Palaraja  <kavindra.palaraja@nokia.com>

        Reviewed by Simon Hausmann.

        Fix the documentation for the linkHovered signal.

        * Api/qwebpage.cpp:

2009-02-23  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=24094
        Make sure to empty the cache on exit to get rid of superfluous leak messages
        for CachedResource's in order to keep the leak messages accurate.  This
        is analagous to what the Mac port is doing on application exit when all
        WebView's have been closed.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::_q_cleanupLeakMessages):
        (QWebPage::QWebPage):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2009-02-23  Thiago Macieira  <thiago.macieira@nokia.com>

        Reviewed by Simon Hausmann.

        Fix the Copyright notices in a few files

        * WebKit_pch.h:

2009-02-16  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Avoid loading plugins when they're disabled in the settings.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::canShowMIMEType): Don't call into the
        PluginDatabase if plugins are disabled in the settings.

2009-02-13  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Reviewed by Nikolas Zimmermann.

        https://bugs.webkit.org/show_bug.cgi?id=23738
        Expose the url elements target frame string.  This is the sister function
        to the existing linkTargetFrame which returns the QWebFrame*.  When the
        linkTargetFrame is 0 it is useful to know what the target was to be.

        * Api/qwebframe.cpp:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
        (QWebHitTestResult::linkTarget):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * tests/qwebframe/tst_qwebframe.cpp:

2009-02-13  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon Hausmann.

        Removed documentation for internal functions.

        * Api/qwebsettings.cpp:

2009-02-13  Martin Smith  <msmith@trolltech.com>

        Reviewed by Simon Hausmann.

        Corrected some minor qdoc errors.

        * Api/qwebsettings.cpp:

2009-02-11  Dimitri Dupuis-latour  <dupuislatour@apple.com>

        Stub out InspectorClientQt::hiddenPanels.

        Reviewed by Timothy Hatcher.

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::hiddenPanels):
        * WebCoreSupport/InspectorClientQt.h:

2009-02-10  Karsten Heimrich  <kheimric@trolltech.com>

        Reviewed by Simon Hausmann.

        Fixes missing navigation/url update while clicking on anchor inside
        webpage.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidChangeLocationWithinPage):
        update and emit in case we navigate inside a webpage

2009-02-10  Adam Treat  <adam.treat@torchmobile.com>

        Fix the Qt build as class Selection is now VisibleSelection.

        * Api/qwebpage.cpp:
        (QWebPage::inputMethodQuery):

2009-02-06  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::updateGlobalHistoryRedirectLinks):
        * WebCoreSupport/FrameLoaderClientQt.h:

2009-02-06  Kavindra Palaraja  <kavindra.palaraja@nokia.com>

        Reviewed by Simon Hausmann.

        Doc - made 2 functions internal as they are not part of the API anymore (and this fixes 2 qdoc warnings)

        * Api/qwebsettings.cpp:

2009-02-06  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Added an overload of QWebFrame::addToJavaScriptWindowObject that takes a QScriptEngine::ValueOwnership parameter.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject): New overload.
        * Api/qwebframe.h:
        * tests/qwebframe/tst_qwebframe.cpp: Added unit tests for ownership
        models.

2009-02-06  Aaron Boodman  <aa@chromium.org>

        Reviewed by Holger Freyther.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::documentElementAvailable):)
        Fix compile error in Qt build introduced by the below change (r40694).

2009-02-05  Aaron Boodman  <aa@chromium.org>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=23708
        Adds documentElementAvailable() callback to FrameLoaderClient.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClient::documentElementAvailable):
        Stub out documentElementAvailable().
        * WebCoreSupport/FrameLoaderClientQt.h:
        Ditto.

2009-02-04  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon Hausmann.

        Doc: Documented the return value of the evaluateJavaScript() function.

        * Api/qwebframe.cpp:

2009-02-03  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Added a unit test to verify the succesful conversion from QByteArray to
        JSByteArray and back to QByteArray.

        * tests/qwebframe/tst_qwebframe.cpp:

2009-02-02  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * Api/qwebframe.cpp:
        (QWebFrame::QWebFrame):
        (QWebFrame::load):
        (QWebFrame::setHtml):
        (QWebFrame::setContent):

2009-02-02  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):

2009-02-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Track redirects in global history.

        Keep Qt building.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::updateGlobalHistoryForRedirectWithoutHistoryItem):
        (WebCore::FrameLoaderClientQt::createFrame):
        * WebCoreSupport/FrameLoaderClientQt.h:

2009-02-02  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Update for changes to WebCore.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):
        (WebCore::FrameLoaderClientQt::createJavaAppletWidget):
        * WebCoreSupport/FrameLoaderClientQt.h:

2009-02-02  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Nikolas Zimmermann.

        https://bugs.webkit.org/show_bug.cgi?id=23587
        Refactor HitTestRequest to eliminate all the ugly boolean arguments and
        use an enum bitflag instead.  Cleanup all the code that constructs the
        various HitTestRequests to make the code more readable.

        * Api/qwebframe.cpp:
        (QWebFrame::hitTestContent):

2009-02-02  Adam Treat  <adam.treat@torchmobile.com>

        Fix the Qt build to call forceLayout on the view instead.

        * Api/qwebpage.cpp:
        (QWebPage::setFixedLayoutSize):
        (QWebPage::setUseFixedLayout):

2009-02-02  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Darin Adler.

        Move Frame::forceLayout, Frame::adjustPageHeight and Frame::forceLayoutWithPageWidthRange to FrameView

        https://bugs.webkit.org/show_bug.cgi?id=23428

        FrameView::forceLayout could be killed but the comment might
        contain a value over the the plain FrameView::layout...

        Adjust the WebCore/WebKit consumers of these methods.

        * Api/qwebpage.cpp:
        (QWebPage::setViewportSize):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::forceLayout):

2009-01-30  Geoffrey Garen  <ggaren@apple.com>

        Build fix.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):

2009-01-30  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=22056

        Kill FrameLoaderClient.cpp, move the code over to Frame::createView

        FrameLoaderClient is supposed to be an interface, move the
        to be shared code to Frame which is a controller and is
        allowed to create a FrameView.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):

2009-01-30  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Split "lockHistory" into "lockHistory" and "lockBackForwardList" in
        preparation for setting them differently during a redirect.

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):

2009-01-30  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        Remove FrameLoaderClient code that is now handled by FrameLoader itself

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::frameLoadCompleted):

2009-01-30  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Hide the Offline Web Application Cache path API from the public API
        for now.

        * Api/qwebsettings.cpp:
        (qt_websettings_setOfflineWebApplicationCachePath):
        (qt_websettings_offlineWebApplicationCachePath):
        * Api/qwebsettings.h:

2009-01-28  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Nikolas Zimmermann and George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=23557
        Do not clip the QWebFrame::hitTestContent method to the visible viewport
        and add a regression test to make sure it works.

        * Api/qwebframe.cpp:
        (QWebFrame::hitTestContent):
        * tests/qwebframe/tst_qwebframe.cpp:

2009-01-28  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        Provide default implementations of JavaScript dialog boxes like in
        most web browsers, i.e. indicate that is from JavaScript and show the
        frame URL.

        * Api/qwebpage.cpp:
        (QWebPage::javaScriptAlert):
        (QWebPage::javaScriptConfirm):
        (QWebPage::javaScriptPrompt):

2009-01-27  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon Hausmann.

        http://www.qtsoftware.com/developer/task-tracker/index_html?id=238391&method=entry

        [Qt] If QPainter fails to start on a QPrinter instance, do not
        continue printing.

        * Api/qwebframe.cpp:
        (QWebFrame::print):

2009-01-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Dan Bernstein

        Rework FrameLoaderClient to work on a CachedFrame basis instead of CachedPage

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::savePlatformDataToCachedFrame):
        (WebCore::FrameLoaderClientQt::transitionToCommittedFromCachedFrame):
        * WebCoreSupport/FrameLoaderClientQt.h:

2009-01-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by David Hyatt
        
        Back out r40285, because it was checked in with no bug number, no
        testcase, is rendering change that did not get thorough review,
        and broke the Mac build.

        * Api/qwebframe.cpp:
        (QWebFrame::hitTestContent):

2009-01-26  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Nikolas Zimmermann.

        Do not clip the QWebFrame::hitTestContent method to the visible viewport.

        * Api/qwebframe.cpp:
        (QWebFrame::hitTestContent):

2009-01-26  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon Hausmann.

        Doc: qdoc fix for a link to a property and added a basic description of the offline caching and storage features from HTML 5.

        * Api/qwebpage.cpp:
        * Api/qwebsettings.cpp:

2009-01-25  Urs Wolfer  <uwolfer@kde.org>

        Reviewed by Simon Hausmann.

        Add QWebPage::SelectAll to WebAction enum to select all content.

        https://bugs.webkit.org/show_bug.cgi?id=22946

        * Api/qwebpage.cpp:
        (QWebPagePrivate::editorActionForKeyEvent):
        * Api/qwebpage.h:

2009-01-25  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon Hausmann.

        Doc: Fixed the terminology used.

        * Api/qwebpage.cpp:

2009-01-25  Thiago Macieira  <thiago.macieira@nokia.com>

        Reviewed by Simon Hausmann.

        Rename links from trolltech.com to qtsoftware.com

        * Api/qwebpluginfactory.cpp:

2009-01-25  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon Hausmann.

        Make QWebPage auto-test more robust by cleaning up generated files

        Sometimes the auto-test may segfault, leaving behind files because the
        call to cleanupTestCase() never happens, so we also clean up the files
        at initTestCase() just to make sure we're running in a clean environment.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::cleanupFiles):
        (tst_QWebPage::initTestCase):
        (tst_QWebPage::cleanupTestCase):

2008-12-20  Urs Wolfer  <uwolfer@kde.org>

        Reviewed by Simon Hausmann.

        Fix: compile qwebhistory.h with pendantic comiler flag.

        https://bugs.webkit.org/show_bug.cgi?id=22947

        * Api/qwebhistory.h:

2009-01-24  Adam Treat  <adam.treat@torchmobile.com>

        Oops, fix the Qt build.

        * Api/qwebframe.cpp:
        (QWebFrame::render):

2009-01-24  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Nikolas Zimmermann.

        Add QWebFrame::renderContents() method which allows arbitary rendering
        of any content region within the QWebFrame.  It also does not draw any
        scrollbars.

        * Api/qwebframe.cpp:
        (QWebFrame::renderContents):
        * Api/qwebframe.h:

2009-01-23  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon Hausmann.

        Make the test more robust by taking into account the platform-specific
        cursor flashing time.

        * tests/qwebframe/tst_qwebframe.cpp:

2009-01-20  Friedemann Kleint  <Friedemann.Kleint@nokia.com>

        Reviewed by Simon Hausmann.

        Fix spelling error in QWebPage

        * Api/qwebpage.cpp:
        (QWebPage::action):

2009-01-19  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Fix calling of onkeypress event handlers on input elements when pressing enter
        and other text insertion commands in the Qt port.

        Similar to the win and mac ports don't execute text inserting editor
        commands on RawKeyDown but continue processing the event first in
        WebCore, i.e. also get a keypress event sent. If unhandled it will
        come back to EditorClientQt::handleKeyboardEvent later and we execute
        it then.

        This also fixes search by pressing enter on www.trafikanten.no.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::editorCommandForWebActions): Make function
        accessible from other files.
        (QWebPage::triggerAction): Adjust to new function visibility.
        * Api/qwebpage_p.h: Ditto.
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent): Don't execute
        text inserting commands on RawKeyPressDown.

2009-01-16  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        [Qt] Increase popup focus delay time to a sensible 500 ms.

        * tests/qwebframe/tst_qwebframe.cpp:

2009-01-16  Ariya Hidayat  <ariya.hidayat@trolltech.com>

         Reviewed by Adam Roben.

         [Qt] Prevent crash if plugin data is NULL.

         * WebCoreSupport/FrameLoaderClientQt.cpp: NULL check.
         (WebCore::FrameLoaderClientQt::objectContentType):

2009-01-16  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        [Qt] Per-line cursor movement tests depend on platform-specific font
        metrics. Remove them to avoid test failures on different platforms.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::cursorMovements):

2009-01-16  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        http://www.qtsoftware.com/developer/task-tracker/index_html?id=219344&method=entry

        [Qt] API documentation for QWebPage::WebAction enum.

        * Api/qwebpage.cpp:

2009-01-16  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Another attempt at fixing the Qt build.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

2009-01-14  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Unit tests for text selection and editing actions of QWebPage.
        The following are tested:
            - the actions are not NULL
            - the actions are disabled when contentEditable is false
            - the actions are enabled when contentEditable is true

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::textSelection):
        (tst_QWebPage::textEditing):

2009-01-14  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Fix failing assertion when pressing an extra mouse button on a
        QWebView.

        Mice with more than three buttons - for example with a dedicated
        "back" button - can generate Qt::XButton1 or Button2.
        WebCore::MouseButton contains only Left, Middle and Right, so in
        Qt's PlatformMouseEvent we map to NoButton, resulting in a mouse
        press or release even with no button set. That triggers an assertion
        in EventTargetNode::dispatchMouseEvent requiring that either a button
        is set or it is just a mouse move event, which is correct.

        In QWebPage decide not to dispatch such mouse events where we cannot
        map the mouse button to a WebCore::MouseButton.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::mousePressEvent):
        (QWebPagePrivate::mouseDoubleClickEvent):
        (QWebPagePrivate::mouseTripleClickEvent):
        (QWebPagePrivate::mouseReleaseEvent):

2009-01-14  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon Hausmann.

        http://www.qtsoftware.com/developer/task-tracker/index_html?id=241144&method=entry

        [Qt] Create actions for text selection and editing for QWebPage.
        Also properly disable and enable them when contentEditable is toggled.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateAction):
        (QWebPagePrivate::updateEditorActions):
        (QWebPage::action):

2009-01-14  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon Hausmann.

        [Qt] Unit tests for cursor movements. The following are tested:
            - the actions are not NULL
            - the actions are disabled when contentEditable is false
            - the actions are enabled when contentEditable is true
            - the cursor moves properly when the actions are triggered

        * tests/qwebpage/tst_qwebpage.cpp:
        (CursorTrackedPage::CursorTrackedPage):
        (CursorTrackedPage::selectedText):
        (CursorTrackedPage::selectionStartOffset):
        (CursorTrackedPage::selectionEndOffset):
        (CursorTrackedPage::isSelectionCollapsed):
        (tst_QWebPage::cursorMovements):

2009-01-08  Yongjun Zhang  <yongjun.zhang@nokia.com>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=23187

        Update webview with the intersected rect.

        In ChromeClientQt::repaint, view should be updated with the
        intersected rect, not the whole windowRect;

        This generally is not a problem for normal viewport setup where
        viewport size is the same as the qwebview widget size.  However, if we
        set the viewport size smaller than qwebkit widget, we will see
        unwanted painting outside the viewport.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::repaint):

2009-01-13  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Tor Arne Vestbø.

        [Qt] Missing piece from my previous commit:
        Disable and enable the cursor navigation actions when contentEditable
        is changed.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateEditorActions):

2009-01-13  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Create actions for cursor navigation for QWebPage. 
        Also properly disable and enable them when contentEditable is toggled.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateAction):
        (QWebPage::action):

2009-01-13  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        https://bugs.webkit.org/show_bug.cgi?id=23171

        Based on patch by Yael Aharon  <yael.aharon@nokia.com>

        Make the QWebSettings functions for setting the path for the local
        storage database private QtWebkit API, including the ability to
        associated a QWebPage with a named page group.

        * Api/qwebpage.cpp:
        (qt_webpage_setGroupName): Added.
        (qt_webpage_groupName): Added.
        * Api/qwebpage.h:
        (ExtensionOption::handle): Added internal helper function.
        * Api/qwebsettings.cpp:
        (qt_websettings_setLocalStorageDatabasePath): Made private API.
        (qt_websettings_localStorageDatabasePath): Made private API.
        * Api/qwebsettings.h:
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::database): Small cleanup.
        (tst_QWebPage::multiplePageGroupsAndLocalStorage): New test for the
        page group handling, written by Yael.

2009-01-12  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon Hausmann.

        [Qt] Ensure that we're always notified of navigation actions for local anchors
        
        FrameLoader::checkNavigationPolicy() does not notify us if the request has
        been checked before (which happens for local anchors), but in the case of
        our clients not accepting the navigation request we do want to be notified
        again later on, so we clear the lastCheckedRequest flag.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):

2009-01-12  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Tor Arne Vestbø.

        Build fix: use qobject_cast which does not rely on RTTI. This fixes the
        unit test when building it with a version of Qt (e.g. Qt/Embedded)
        configured without RTTI.

        * tests/qwebframe/tst_qwebframe.cpp:

2009-01-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Tor Arne Vestbø.

        When the QWebView is disabled context menus implemented in JavaScript should not pop up.

        Just like in QWidget::event() we have to check for the disabled state and
        ignore context menu events.

        * Api/qwebview.cpp:

2009-01-12  Simon Hausmann  <simon.hausmann@nokia.com

        Reviewed by Tor Arne Vestbø.

        Fix QWebView appearance when showed uninitialized without page.

        Only set WA_OpaquePaintEvent if we have a page set that will actually
        paint the entire contents, otherwise the optimization does not apply
        as we do not have a paintEvent() implementation and Qt has to fill the
        view with its default background instead.

        * Api/qwebview.cpp:
        (QWebView::QWebView):
        (QWebView::setPage):

2009-01-11  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Tor Arne Vestbø.

        Do not create a QVariant from QObject* directly, use the
        template-specialized function.

        * tests/qwebframe/tst_qwebframe.cpp:
        (MyQObject::myOverloadedSlot):

2009-01-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Tor Arne Vestbø.

        Documentation fixes, remove duplicated docs, document missing
        parameters and return values.

        * Api/qwebdatabase.cpp:
        * Api/qwebpage.cpp:

2009-01-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Fix linking against QtWebKit on Windows, by defining the EXPORT macros
        _exactly_ the same way as in qglobal.h, depending on QT_NODLL,
        QT_MAKEDLL and QT_SHARED.

        * Api/qwebkitglobal.h:

2009-01-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Remove qwebnetworkinterface.h from WEBKIT_API_HEADERS as it's not
        public Qt 4.4/4.5 API.

        * Api/headers.pri:

2009-01-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed Qt build fix, remove qcookiejar.h from the API headers and
        therefore HEADERS. It's not part of the API and it moc shouldn't be
        called on it.

        * Api/headers.pri:

2009-01-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Rubber-stamped by Tor Arne Vestbø.

        Remove files not present anymore from the WEBKIT_API_HEADERS variable.

        * Api/headers.pri:

2009-01-08  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Simon Hausmann.

        Don't set the minimumFontSize and minimumLogicalFontSize as these are
        just for accessibility and should be left up to the client application.

        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):

2009-01-08  Kavindra Palaraja  <kdpalara@trolltech.com>

        Reviewed by Simon Hausmann.

        Small fixes to the API documentation, missing 4.5 tags and
        undocumented parameters.

        * Api/qwebhistory.cpp:
        * Api/qwebpage.cpp:
        * Api/qwebsettings.cpp:

2009-01-07  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Add Qt API to QWebHitTestResult::isScrollBar method

        * Api/qwebframe.cpp:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
        (QWebHitTestResult::isScrollBar):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):

2009-01-07  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Add Qt API for QWebFrame::scrollBarGeometry method

        * Api/qwebframe.cpp:
        (QWebFrame::scrollBarGeometry):
        * Api/qwebframe.h:

2009-01-07  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Fix unused variable warnings

        * tests/qwebpage/tst_qwebpage.cpp:
        (TestPage::createWindow):

2009-01-07  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        Qt build fix after r39670.

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):

2009-01-06  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Holger Freyther.

        Allow building QtWebKit statically (within Qt).

        http://trolltech.com/developer/task-tracker/index_html?id=211273&method=entry

        * Api/qwebkitglobal.h:

2009-01-06  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Simon Hausmann.

        Update the documentation to reflect when these API changes will land in
        upstream Qt

        * Api/qwebframe.cpp:
        * Api/qwebpage.cpp:

2009-01-05  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Add Qt API for QWebFrame::contentsSizeChanged signal

        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::contentsSizeChanged):
        * WebCoreSupport/ChromeClientQt.h:

2009-01-05  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Fixes QWebFrame::setScrollBarPolicy(..) to actually work.  Also happens
        to fix 192 layout tests that were previously failing for Qt.

        * Api/qwebframe.cpp:
        (QWebFrame::setScrollBarPolicy):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):

2009-01-04  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Add new API to QWebHitTestResult to return a rect for the smallest enclosing
        block element of the hit test

        * Api/qwebframe.cpp:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
        (QWebHitTestResult::enclosingBlock):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:

2008-12-30  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Make the qt port build and work with the new fixedLayoutSize feature

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPage::fixedLayoutSize):
        (QWebPage::setFixedLayoutSize):
        (QWebPage::useFixedLayout):
        (QWebPage::setUseFixedLayout):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):

2008-12-19  Jade Han <jade.han@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Allow conversion of JavaScript Number and Boolean types to Qt types

        https://bugs.webkit.org/show_bug.cgi?id=22880

        * tests/qwebframe/tst_qwebframe.cpp:
        (MyQObject::myInvokableWithBoolArg):

2008-12-18  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Tor Arne Vestbø.

        When Web Inspector is launched without an associated node,
        call show() instead of inspect().

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):

2008-12-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        - stub out FrameLoaderClient::shouldUseCredentialStorage().

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::shouldUseCredentialStorage):
        * WebCoreSupport/FrameLoaderClientQt.h:

2008-12-18  Sam Weinig  <sam@webkit.org>

        Reviewed by John Sullivan.

        Stub out FrameLoaderClient::dispatchDidFirstVisuallyNonEmptyLayout()

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidFirstVisuallyNonEmptyLayout):
        * WebCoreSupport/FrameLoaderClientQt.h:

2008-12-16  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger Freyther.

        Added support for unload event counting to the Qt DRT.

        * Api/qwebpage.cpp:
        (qt_drt_run): Moved function here.
        * Api/qwebpage_p.h: Moved drt run boolean here.
        * WebCoreSupport/EditorClientQt.cpp: Moved drt run boolean.
        (WebCore::EditorClientQt::shouldShowDeleteInterface): Use the new drt
        run variable.
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidFinishDocumentLoad): Add DRT
        output for unload event handler counting.

2008-12-15  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        Change the order of sub frame initialisation to avoid crashes

        Add the newly created frame to the FrameTree before calling
        WebCore::Frame::init to not segfault on
        LayoutTests/fast/loader/frame-creation-removal.html.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):

2008-12-15  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger Freyther.

        Implement setJavaScriptProfilingEnabled in the Qt DRT to pass fast/profiler.

        * Api/qwebframe.cpp:
        (qt_drt_setJavaScriptProfilingEnabled):

2008-12-12  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Fix pressing return/enter not triggering any action on web sites
        that define event handlers, such as the JS console in the web
        inspector.

        Process the key events in the DOM first and if not handled map them
        to editor actions.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::editorActionForKeyEvent): Made a class method.
        (QWebPagePrivate::keyPressEvent): Pass the key event first to the DOM.
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent): Map the key event to
        actions and trigger them.

2008-12-12  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon Hausmann.

        Create the plugin widget even though the web page has no associated
        view. This prevents the plugin to be uselessly constructed more than once.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::createViewlessPlugin):

2008-12-11  Enrico Ros  <enrico.ros@m31.com>

        Reviewed by Simon Hausmann.

        Fix the broken focus behavior that happened when QWebPage lost
        focus to a popup menu.

        The previous code didn't notify the QWebPage at all when the
        focus was back in (breaking focus rects, caret blinking, ...).
        By the way when a popup is show, 2 FocusOut events are delivered
        to the QWebPage, but this doesn't seem to hurt.

        Added a test to check popup opening, closing a lineedit blinks.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::focusInEvent):
        (QWebPagePrivate::focusOutEvent):
        * tests/qwebframe/tst_qwebframe.cpp:
        (tst_QWebFrame::):

2008-12-11  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Tor Arne Vestbø.

        When the web page is navigated away, delete the instance
        of the native plugin.

        http://trolltech.com/developer/task-tracker/index_html?id=214946&method=entry

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::):
        * tests/qwebpage/tst_qwebpage.cpp:
        (PluginTrackedPage::PluginTrackedPage):
        (PluginTrackedPage::createPlugin):
        (tst_QWebPage::destroyPlugin):

2008-12-11  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        Allow applications to save and restore their state between loads.

        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::restoreViewState):
        (WebCore::FrameLoaderClientQt::saveViewStateToItem):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::modified):

2008-12-08  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Darin Adler and Holger Freyther.

        Make Widget::frameRectsChanged() and overrides non-const

        This will hopefully allow us to get rid of some of the mutables in
        the classes that react to the callback by changing their own state.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::):

2008-12-10  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        API changes discussed with Simon Hausmann, Tor Arne
        Vestbø, Ariya Hidayat...

        * Api/qwebdatabase.cpp:
        (QWebDatabase::fileName):
        (QWebDatabase::removeDatabase):
        * Api/qwebdatabase.h:
        * Api/qwebframe.cpp:
        (QWebFrame::scroll):
        (QWebFrame::scrollPosition):
        (QWebFrame::setScrollPosition):
        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        (QWebPage::setContentEditable):
        (QWebPage::isContentEditable):
        (QWebPage::extension):
        * Api/qwebpage.h:
        * Api/qwebsecurityorigin.cpp:
        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        * Api/qwebsettings.h:
        * QtLauncher/main.cpp:
        (MainWindow::setEditable):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::exceededDatabaseQuota):
        (WebCore::ChromeClientQt::runOpenPanel):
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::isEditable):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::database):

2008-12-09  Balazs Kelemen  <Kelemen.Balazs.3@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Extended QtLauncher so now it can load pages from an url list
        one by one. This can be useful for testing purposes (eq. leak hunting).
        The -r option activates this feature.

        https://bugs.webkit.org/show_bug.cgi?id=20932

        * QtLauncher/main.cpp:
        (MainWindow::webPage):
        Just a coding style repairing (* written with no space between the return type name)
        (MainWindow::webView):
        I need the webView to connect it with the URLLoader object.
        (URLLoader::URLLoader):
        (URLLoader::loadNext):
        (URLLoader::init):
        (URLLoader::getUrl):
        (main):

2008-12-10  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build, added const to Node* parameter after change
        in signature.

        * WebCoreSupport/ChromeClientQt.h:
        (WebCore::ChromeClientQt::formStateDidChange):

2008-12-09  Brett Wilson  <brettw@chromium.org>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=22177

        Add a callback on ChromeClient that the state of form elements on
        the page has changed. This is to allow clients implementing session
        saving to know when the current state is dirty.

        * WebCoreSupport/ChromeClientQt.h:
        (WebCore::ChromeClientQt::formStateDidChange):

2008-12-09  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon Hausmann.

        Fix the documentation of the localStorageDatabasePath setters/getters.

        * Api/qwebsettings.cpp:

2008-12-08  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon Hausmann.

        Multiple files support for the file chooser.

        * Api/qwebpage.cpp:
        (QWebPage::chooseFiles):
        * Api/qwebpage.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::runOpenPanel):

2008-12-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt

        https://bugs.webkit.org/show_bug.cgi?id=15671

        Renderer::caretRect() is now localCaretRect(), which needs
        converting to absolute coordinates (taking transforms into account).

        * Api/qwebpage.cpp:
        (QWebPage::inputMethodQuery):

2008-12-03  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon Hausmann.

        Allow passing jsNull and jsUndefined to Qt plugins

        Currently limited to functions with QString and QVariant arguments,
        and properties of these types. Both jsNull and jsUndefined ends up
        as default-constructed QStrings and QVariants, which means you can
        check for isEmpty() and isValid() in the native plugin code.

        Based on patches by Jade Han <jade.han@nokia.com>

        * tests/qwebframe/tst_qwebframe.cpp:

2008-12-02  Simon Hausmann  <hausmann@webkit.org>

        Rubber-stamped by Tor Arne Vestbø.

        Initial API documentation for QWebDatabase, QWebSecurityOrigin and
        QWebFrame::securityOrigin().

        * Api/qwebdatabase.cpp:
        * Api/qwebframe.cpp:
        * Api/qwebsecurityorigin.cpp:

2008-11-27  Kent Hansen  <khansen@trolltech.com>

        Reviewed by Simon Hausmann.

        Added auto tests for making JavaScript bindings for Qt plugin widgets
        work again.

        * tests/qwebpage/tst_qwebpage.cpp:
        (PluginPage::PluginPage):
        (PluginPage::CallInfo::CallInfo):
        (PluginPage::createPlugin):
        (tst_QWebPage::createPlugin):

2008-11-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Build fix. Use WebCore::Frame::loader instead of QWebFrame

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::updateGlobalHistory):

2008-11-24  Darin Fisher  <darin@chromium.org>

        Fix bustage.

        http://bugs.webkit.org/show_bug.cgi?id=15643

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::isSelectTrailingWhitespaceEnabled):
        * WebCoreSupport/EditorClientQt.h:

2008-11-24  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        - https://bugs.webkit.org/show_bug.cgi?id=22470
          remove unneeded URL argument from FrameLoaderClient::updateGlobalHistory

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::updateGlobalHistory): Get the URL from the
        DocumentLoader.
        * WebCoreSupport/FrameLoaderClientQt.h: Remove argument.

2008-11-24  Darin Fisher  <darin@chromium.org>

        Fix bustage.

        https://bugs.webkit.org/show_bug.cgi?id=22448

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):

2008-11-20  Sam Weinig  <sam@webkit.org>

        Fix Qt build.

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):

2008-11-19  Darin Fisher  <darin@chromium.org>

        Fix bustage.

        https://bugs.webkit.org/show_bug.cgi?id=22373
        Ports busted by addition of ScriptValue.{h,cpp}

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):

2008-11-19  Darin Fisher  <darin@chromium.org>

        Fix bustage.

        https://bugs.webkit.org/show_bug.cgi?id=22373
        Ports busted by addition of ScriptValue.{h,cpp}

        * Api/qwebframe.cpp:

2008-11-19  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build, remove file referenced in the qrc file that does not
        exist and is not needed.

        * tests/qwebframe/qwebframe.qrc:

2008-11-18  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Tor Arne Vestbø.

        Missing file in new unit test for QWebFrame (r38493).

        * tests/qwebframe/qwebframe.pro:
        * tests/qwebframe/qwebframe.qrc: Added.

2008-11-18  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        Make sure QWidget based plugins are invisible until placed into the layout

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2008-11-18  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon Hausmann.

        React properly to frame rect changes for QWidget based plugins

        We now set the geometry of the QWidget in frameRectsChanged,
        intead of setFrameRect, which means we pick up the changes to
        the frame rect when scrolling. We also set a mask on the
        widget to keep it from painting over scrollbars and the like

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::):

2008-11-18  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Tor Arne Vestbø.

        Fix crash when trying to pick a file using the file chooser.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::runOpenPanel):

2008-11-18  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann.

        Attempt to share transitionToCommittedForNewPage of FrameLoaderClient with the different ports

        After Hyatt's work on Widget and ScrollView there is little difference
        between the implementation of Qt, Gtk+ and Win. In fact any kind of
        difference is mostly a bug. Alp has fixed two of such errors for the Gtk+
        port and the Qt port has at least one of them left.

        The only difference between the implementations is in getting the the
        IntSize for the new FrameView, the background color to be applied and
        eventually some post processing.

        Unify the implementations by providing a static helper function that
        takes a Frame, IntSize, color and transparency bit and calling it from
        the Gtk+, the Qt and the Windows port.

        * Api/qwebframe.cpp:
        * Api/qwebframe_p.h:
        * Api/qwebpage.cpp:
        (QWebPage::setPalette):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):

2008-11-17  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.
        
        Try to fix qt build.

        * Api/qwebframe.cpp:

2008-11-17  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Tor Arne Vestbø and Simon Hausmann.

        Fix regression when loading resources from Qt resource system using qrc:/.

        Added a unit test to catch future regression.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * tests/qwebframe/image.png: Added.
        * tests/qwebframe/tst_qwebframe.cpp:

2008-11-16  Darin Adler  <darin@apple.com>

        - try to fix build

        * Api/qwebhistory.cpp: Added include of "KURL.h".

2008-10-24  Yael Aharon <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        Added some basic unit tests for the public database API.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::initTestCase):
        (tst_QWebPage::cleanupTestCase):
        (tst_QWebPage::database):

2008-11-14  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build, add missing export macros for the new classes.

        * Api/qwebdatabase.h:
        * Api/qwebsecurityorigin.h:

2008-10-24  Yael Aharon <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        Adding public API to provide access to the security origin
        (QWebSecurityOrigin) and the databases used for the offline
        storage (QWebDatabase).

        In addition QWebSettings gains configuration functions for
        enabling/disabling offline storage, web application cache
        and DOM local storage.

        This commits lands the core feature(s), the unit tests and the
        documentation are going to follow in the comming days/weeks.

        Note: The API is not frozen yet.

        * Api/headers.pri:
        * Api/qwebdatabase.cpp: Added.
        (QWebDatabase::QWebDatabase):
        (QWebDatabase::operator=):
        (QWebDatabase::name):
        (QWebDatabase::displayName):
        (QWebDatabase::expectedSize):
        (QWebDatabase::size):
        (QWebDatabase::absoluteFilePath):
        (QWebDatabase::origin):
        (QWebDatabase::remove):
        (QWebDatabase::~QWebDatabase):
        * Api/qwebdatabase.h: Added.
        * Api/qwebdatabase_p.h: Added.
        * Api/qwebframe.cpp:
        (QWebFrame::securityOrigin):
        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * Api/qwebsecurityorigin.cpp: Added.
        (QWebSecurityOrigin::QWebSecurityOrigin):
        (QWebSecurityOrigin::operator=):
        (QWebSecurityOrigin::scheme):
        (QWebSecurityOrigin::host):
        (QWebSecurityOrigin::port):
        (QWebSecurityOrigin::databaseUsage):
        (QWebSecurityOrigin::databaseQuota):
        (QWebSecurityOrigin::setDatabaseQuota):
        (QWebSecurityOrigin::~QWebSecurityOrigin):
        (QWebSecurityOrigin::allOrigins):
        (QWebSecurityOrigin::databases):
        * Api/qwebsecurityorigin.h: Added.
        * Api/qwebsecurityorigin_p.h: Added.
        (QWebSecurityOriginPrivate::QWebSecurityOriginPrivate):
        (QWebSecurityOriginPrivate::~QWebSecurityOriginPrivate):
        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        (QWebSettings::setOfflineStoragePath):
        (QWebSettings::offlineStoragePath):
        (QWebSettings::setOfflineStorageDefaultQuota):
        (QWebSettings::offlineStorageDefaultQuota):
        (QWebSettings::setOfflineWebApplicationCachePath):
        (QWebSettings::offlineWebApplicationCachePath):
        (QWebSettings::setLocalStorageDatabasePath):
        (QWebSettings::localStorageDatabasePath):
        * Api/qwebsettings.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::exceededDatabaseQuota):

2008-11-12  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Tor Arne Vestbø.

        Mention the color role change (r38331) in the API doc.

        * Api/qwebpage.cpp:

2008-11-11  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Tor Arne Vestbø and Simon Hausmann.

        Use QPalette::Base (instead of QPalette::Background) for the page
        background.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::updateBackground):
        * Api/qwebview.cpp:
        (QWebView::QWebView):

2008-11-11  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Geoff Garen.

        Remove pointless dependencies on the now-deleted kjs directory.

        * WebKit_pch.h:

2008-11-10  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Rubber-stamped by Simon Hausmann.

        To fit Qt API, scroll offset is a QPoint instead of a QSize.

        * Api/qwebframe.cpp:
        (QWebFrame::scrollOffset):
        (QWebFrame::setScrollOffset):
        * Api/qwebframe.h:

2008-11-10  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon Hausmann.

        Doc: Fixed qdoc warnings by supplying function documentation.

        * Api/qwebframe.cpp:
        * Api/qwebview.cpp:

2008-11-10  Tobias Koenig <tobias.koenig@trolltech.com>

        Reviewed by Simon Hausmann.

        Removed old and stale prf file that breaks the MingW build.

        * Api/qtwebkit.prf: Removed.

2008-11-10  Kavindra Palaraja  <kdpalara@trolltech.com>

        Reviewed by Simon Hausmann.

        Clarify QWebFrame/View::setHTML docs with regards to relative URLs

        * Api/qwebframe.cpp:
        * Api/qwebview.cpp:

2008-11-10  Joerg Bornemann  <joerg.bornemann@nokia.com>

        Reviewed by Simon Hausmann

        Don't define _CRT_RAND_S on Windows CE in the precompiled
        header, to fix the CE build.

        * WebKit_pch.h:

2008-11-07  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Tor Arne Vestbø and Simon Hausmann.

        Added an option to allow printing the background color and images.
        Mostly reworked from a patch by Holger.
        This setting is enabled by default.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        * Api/qwebsettings.h:

2008-11-06  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Added a unit tests for QWebFrame::metaData().

        * tests/qwebframe/tst_qwebframe.cpp:

2008-11-06  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Improved documentation for QWebFrame::metaData().

        * Api/qwebframe.cpp:

2008-11-05  Sriram Yadavalli <sriram.yadavalli@nokia.com>

        Reviewed by Simon Hausmann.

        Added QWebFrame::metaData() to provide a way in the public API
        to retrieve the values of the <meta> tags.

        See https://bugs.webkit.org/show_bug.cgi?id=22071

        * Api/qwebframe.cpp:
        (QWebFrame::metaData):
        * Api/qwebframe.h:

2008-10-24  Yael Aharon <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        Add userData() and setUserData() to QWebHistoryItem.
        Add setMaximumItemCount() and maximumItemCount() to QWebHistory.
        Add currentItemIndex() to QWebHistory.

        See also https://bugs.webkit.org/show_bug.cgi?id=21864

        Small cleanup by Simon (docs and forward declaration of QWebHistoryItem in qwebframe.h)

        * Api/qwebframe.h:
        * Api/qwebhistory.cpp:
        (QWebHistoryItem::userData):
        (QWebHistoryItem::setUserData):
        (QWebHistory::currentItemIndex):
        (QWebHistory::maximumItemCount):
        (QWebHistory::setMaximumItemCount):
        * Api/qwebhistory.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::saveViewStateToItem):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::modified):

2008-11-03  Cameron Zwarich  <zwarich@apple.com>

        Rubber-stamped by Maciej Stachowiak.

        Move more files into the runtime subdirectory of JavaScriptCore.

        * Api/qwebpage.cpp:

2008-10-25  Jade Han  <jade.han@nokia.com>

        Reviewed by Anders. 

        Enable custom properties for Qt runtime objects in QtWebKit

        https://bugs.webkit.org/show_bug.cgi?id=21813

        * tests/qwebframe/tst_qwebframe.cpp:

2008-10-24  Sam Weinig  <sam@webkit.org>

        Another Qt build fix.

        * WebCoreSupport/ChromeClientQt.cpp:

2008-10-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Fix https://bugs.webkit.org/show_bug.cgi?id=21759
        Layering violation: FileChooser should not depend on Document/Frame/Page

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::runOpenPanel):
        * WebCoreSupport/ChromeClientQt.h:

2008-10-24  Timothy Hatcher  <timothy@apple.com>

        Stub out new InspectorClient methods.

        https://bugs.webkit.org/show_bug.cgi?id=21856

        Reviewed by Darin Adler.

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::populateSetting): Not implemented.
        (WebCore::InspectorClientQt::storeSetting): Ditto.
        (WebCore::InspectorClientQt::removeSetting): Ditto.
        * WebCoreSupport/InspectorClientQt.h:

2008-10-24  Darin Adler  <darin@apple.com>

        - finish rolling out https://bugs.webkit.org/show_bug.cgi?id=21732

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript): Use JSValue* instead of JSValuePtr.

2008-10-23  Yael Aharon <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        Invalid history entries could cause a crash in QT Webkit

        * Api/qwebhistory.cpp:
        (QWebHistoryItem::originalUrl):
        (QWebHistoryItem::url):
        (QWebHistoryItem::title):
        (QWebHistoryItem::lastVisited):
        (QWebHistoryItem::icon):
        (QWebHistoryItem::isValid):
        * Api/qwebhistory.h:
        * Api/qwebhistory_p.h:
        (QWebHistoryItemPrivate::QWebHistoryItemPrivate):
        (QWebHistoryItemPrivate::~QWebHistoryItemPrivate):
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::modified):

2008-10-22  Yael Aharon <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        emit scrollRequested unconditionally when scrolling.

        See https://bugs.webkit.org/show_bug.cgi?id=21790

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::scroll):

2008-10-23  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Tor Arne.

        Fix handling of mouse events when embedding QWebView into the
        QGraphicsView.

        QWebPage accepts or ignores events to indicate whether the web page
        handled the event. However for QWebView to behave like a good widget
        it should always accept the mouse events to indicate that it handled
        them and that they should not be subject to event propagation.

        The graphics view relies on acceptance of the initial mouse click to
        make the embedded widget the focus item.

        * Api/qwebview.cpp:
        (QWebView::mouseMoveEvent):
        (QWebView::mousePressEvent):
        (QWebView::mouseDoubleClickEvent):
        (QWebView::mouseReleaseEvent):
        (QWebView::contextMenuEvent):
        (QWebView::wheelEvent):

2008-10-22  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon Hausmann.

        For public API, use the term boundingRect instead of boundingBox.

        * Api/qwebframe.cpp:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
        (QWebHitTestResult::boundingRect):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:

2008-06-03  Siraj Razick  <siraj.razick@collabora.co.uk>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=19374

        Expose boundingBox value in QWebHitTestResult

        Add API function QRect QWebHitResult::boundingBox() const

        API docs by Ariya.

        * Api/qwebframe.cpp:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
        (QWebHitTestResult::boundingBox):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:

2008-10-21  Yael Aharon <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

        emit repaintRequested unconditionally when repaint is requested.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::repaint):

2008-10-20  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Remove FrameLoaderClient::detachedFromParent4.  It is no longer used by any port.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        * WebCoreSupport/FrameLoaderClientQt.h:

2008-10-19  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        - next step of https://bugs.webkit.org/show_bug.cgi?id=21732
          improve performance by eliminating JSValue as a base class for JSCell

        Remove most uses of JSValue, which will be removed in a future patch.

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript): Use JSValuePtr.

2008-10-14  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Clip painter to dirty rect before passing on to WebKit
        
        This was previously done in ScrollViewQt, but after the
        refactoring of ScrollView we need to do it in QWebFrame
        instead, similar to Safari/Win.

        * Api/qwebframe.cpp:
        (QWebFrame::render):

2008-10-08  Matthias Ettrich <ettrich@nokia.com>

        Reviewed by Simon.

        Make QWebView ignore focus changes with PopupFocusReason to avoid
        massive updates when menus open and close.

        * Api/qwebview.cpp:
        (QWebView::focusInEvent):
        (QWebView::focusOutEvent):

2008-10-08  Kavindra Palaraja  <kdpalara@trolltech.com>

        Reviewed by Simon.

        Fixed a qdoc warning and adjusted some spacing

        * Api/qwebframe.cpp:

2008-10-08  Rhys Weatherley  <rhys.weatherley@nokia.com>

        Reviewed by Simon.

        Compile for platforms without context menus.

        * Api/qwebpage.cpp:
        (QWebPage::createStandardContextMenu):

2008-10-08  André Pönitz  <apoenitz@trolltech.com>

        Reviewed by Simon.

        Fix compilation with Qt namespaces.

        * WebCoreSupport/EditCommandQt.h:

2008-10-07  Tor Arne Vestbø  <tavestbo@trolltech.com>

        QtWebKit build fix after changes to FrameLoaderClient.h in r37371

        * WebCoreSupport/FrameLoaderClientQt.h:

2008-10-07  Holger Hans Peter Freyther  <zecke@selfish.org>

        [qt] Build fix after Scrollbar.h and Widget.h changes.

        * Api/qwebpage.cpp:
        (QWebPage::swallowContextMenuEvent):

2008-10-06  David Hyatt  <hyatt@apple.com>

        Enable viewless Mac WebKit to paint some basic pages.
        
        Reviewed by Sam Weinig

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):

2008-10-03  David Hyatt  <hyatt@apple.com>

        Fix scroll method on Qt.  The delta was supposed to use .width()/.height() and not .x()/.y().

        Fix the QtPluginWidget to do an invalidate properly.

        Reviewed by ggaren

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::scroll):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::):

2008-10-03  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Build fix. Remove addToDirtyRegion from the header file.

        * WebCoreSupport/ChromeClientQt.h:

2008-10-03  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Build fix.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::scroll):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::):
        (WebCore::FrameLoaderClientQt::createPlugin):

2008-10-03  David Hyatt  <hyatt@apple.com>

        Remove addToDirtyRegion.
        
        Reviewed by Oliver Hunt

        * WebCoreSupport/ChromeClientQt.cpp:

2008-10-02  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=21314
        
        Make scrollBackingStore cross-platform.

        Reviewed by Sam Weinig

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::repaint):
        (WebCore::ChromeClientQt::scroll):
        * WebCoreSupport/ChromeClientQt.h:

2008-10-01  David Hyatt  <hyatt@apple.com>
        
        https://bugs.webkit.org/show_bug.cgi?id=21282
        
        Make contentsToScreen/screenToContents cross-platform.  Only implemented by Mac/Win right now.
        
        Reviewed by Adam Roben

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::windowToScreen):
        (WebCore::ChromeClientQt::screenToWindow):
        * WebCoreSupport/ChromeClientQt.h:

2008-09-30  Dave Hyatt  <hyatt@apple.com>

        http://bugs.webkit.org/show_bug.cgi?id=21250
        
        Rename updateContents to repaintContentRectangle and make it cross-platform by always sending
        repaints up through the ChromeClient.

        Reviewed by Darin Adler

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::repaint):
        * WebCoreSupport/ChromeClientQt.h:

2008-09-29  Gunnar Sletta  <gunnar@trolltech.com>

        Reviewed by Simon

        Compile on windows using MSVC 2005

        For the PCH We need to define _WIN32_WINNT and include windows.h early on,
        otherwise we'll miss several functions.

        * WebKit_pch.h:

2008-09-29  Thiago Macieira  <thiago.macieira@nokia.com>

        Reviewed by Simon.

        Changed copyright from Trolltech ASA to Nokia.
        
        Nokia acquired Trolltech ASA, assets were transferred on September 26th 2008.
        

        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * Api/qwebhistory.cpp:
        * Api/qwebhistory.h:
        * Api/qwebhistory_p.h:
        * Api/qwebkitglobal.h:
        * Api/qwebnetworkinterface.cpp:
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebpluginfactory.cpp:
        * Api/qwebpluginfactory.h:
        * Api/qwebsettings.cpp:
        * Api/qwebsettings.h:
        * Api/qwebview.cpp:
        * Api/qwebview.h:
        * Plugins/ICOHandler.cpp:
        * QtLauncher/main.cpp:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        * WebCoreSupport/FrameLoaderClientQt.h:
        * WebCoreSupport/InspectorClientQt.cpp:
        * WebCoreSupport/InspectorClientQt.h:
        * tests/qwebframe/tst_qwebframe.cpp:
        * tests/qwebpage/tst_qwebpage.cpp:

2008-09-28  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by David Hyatt.

        Ensure the mainThreadIdentifier is set as well as other bits and pieces of
        the threading machinery, by calling JSC::initializeThreading().

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):

2008-09-27  David Hyatt  <hyatt@apple.com>

        Forgot to land renaming changes in WebKit.

        * Api/qwebframe.cpp:
        (QWebFrame::render):
        (QWebFrame::pos):
        (QWebFrame::geometry):
        * Api/qwebpage.cpp:
        (QWebPage::viewportSize):
        (QWebPage::setViewportSize):

2008-09-27  Simon Hausmann  <hausmann@webkit.org>

        Qt build fix - use frameRect instead of frameGeometry, adapt
        to renamed scrollbar frameview methods.

        * Api/qwebpage.cpp:
        (QWebPage::viewportSize):
        (QWebPage::setViewportSize):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):

2008-09-27  Jan Michael Alonzo  <jmalonzo@webkit.org>

        Qt build fix - rename frameGeometry to frameRect per r36995.

        * Api/qwebframe.cpp:
        (QWebFrame::render):
        (QWebFrame::pos):
        (QWebFrame::geometry):

2008-09-26  Ariya Hidayat  <ahidayat@trolltech.com>

        Reviewed by Simon.

        Fixed potential crash when deleting QWebView instance.

        When deleting the view, sets the page's view to NULL.
        The reason is that the page is smart and its destructor might lead to a call
        that operates on a view (which is in the process of being deleted).

        * Api/qwebpage.h:
        * Api/qwebview.cpp:
        (QWebView::~QWebView):

2008-09-26  Ariya Hidayat  <ahidayat@trolltech.com>

        Reviewed by Simon.

        Fixed using modifiers to type special symbols (e.g '@','$') does not work on Mac OS X.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):

2008-09-26  Håvard Wall  <hwall@trolltech.com>

        Reviewed by Simon.

        Fix compilation with QT_NO_MESSAGEBOX

        * Api/qwebpage.cpp:
        (QWebPage::javaScriptAlert):
        (QWebPage::javaScriptConfirm):

2008-09-23  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Remove deprecated JS Qt bindings object call/construct code and fix autotests

        * tests/qwebframe/tst_qwebframe.cpp:

2008-09-16  Alp Toker  <alp@nuanti.com>

        Prospective Qt build fix. ScrollBar.h -> Scrollbar.h

        * Api/qwebframe.cpp:
        * Api/qwebpage.cpp:

2008-09-15  Eli Fidler  <eli@staikos.net>

        Reviewed by Simon.

        Yahoo assumes non-RFC compliant HTTP redirect behaviour. QtWebKit is (more)
        compliant, so broken. I think the Yahoo-assumed behaviour is real-world standard.

        Basically, Yahoo's login procedure for flickr looks like this:
        1. load flickr.com, click "sign in"
        2. this is a Yahoo page with a form
        (https://login.yahoo.com/config/login?.src=flickr...)
        when you click the "Sign In" button, the form submits to a yahoo.com POST URL
        3. The POST returns with a 302 (redirect) to another yahoo.com URL
        4. If you POST the redirected Location:, it all breaks. Yahoo assumes you will
        convert the method to GET, which works fine but is definitely not
        RFC-compliant. It would be compliant for 303, and the RFC says that many
        implementations treat 302 and 303 the same way (for HTTP/1.0 compliance), but
        converting to GET is explicitly wrong for 302.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::started):

2008-09-15  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Make QtInstance::create() private and fix caching

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

2008-09-11  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Rubber-stamped by Simon.

        Prevent leaking pages and frames in QWebKit autotest

        * tests/qwebpage/tst_qwebpage.cpp:

2008-09-11  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon

        Fix QtWebKit autotest

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::userStyleSheet):

2008-09-09  Joerg Bornemann  <joerg.bornemann@trolltech.com>

        Reviewed by Simon.

        Added missing WebCore prefix to ResourceRequest

        This is needed for Windows/CE compilation where there is a conflict
        with a global ResourceRequest type. Elsewhere in this file ResourceRequest
        is also prefixed with WebCore::

        * Api/qwebframe.cpp:
        (QWebFrame::QWebFrame):

2008-09-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>

        Reviewed by Maciej Stachowiak.

        Bug 20704: Replace the KJS namespace
        <https://bugs.webkit.org/show_bug.cgi?id=20704>

        Rename the KJS namespace to JSC.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):
        (QWebFrame::evaluateJavaScript):

2008-09-04  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon

        Fix the QtWebKit build to match changes in r36016

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

2008-09-04  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Re-enable support for user stylesheets in QtWebKit
        
        QtWebKit now follows the FRAME_LOADS_USER_STYLESHEET
        code path, which allows us to keep API support for
        loading user style sheets from remote URLs.
        
        As part of the change UserStyleSheetLoader.cpp/h was
        moved from WebCore/loader/mac to WebCore/loader.

        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::userStyleSheet):

2008-08-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Eric Seidel.

        [janitor/qt] Start replacing port specific getters with the generic native getter
        To get the native presentation of an image we currently have platform
        specific #ifdef's and a generic getter using NativeImagePtr. This patch
        extends this to the ImageBuffer and updates the Qt platform to get rid
        of the special #ifdefs.

        https://bugs.webkit.org/attachment.cgi?id=22861

        * Api/qwebframe.cpp:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
        * Api/qwebhistory.cpp:
        * Api/qwebsettings.cpp:
        (QWebSettings::iconForUrl):

2008-08-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Catch up with the introduction of PageGroup in r30840. Enable tracking of
        visited links, enable this in QWebPage next to the other WebCore init call.
        Calling this more than once is no issue and a cheap operation, we also do not
        reset the state. When clearing the history of a page, clear the link state.

        * Api/qwebhistory.cpp:
        (QWebHistory::clear):
        * Api/qwebhistoryinterface.cpp:
        (QWebHistoryInterface::setDefaultInterface):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):

2008-08-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Revert revision 34348 which removed the global historyContains() function.

        This function was needed to implement the public API of QWebHistoryInterface
        and will be used again in the near future.

        * Api/qwebhistoryinterface.cpp:
        (WebCore::historyContains):

2008-08-27  Erik Bunce  <elbunce@thehive.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=20223

        Add QWebPage::contentsChanged() signal to notify of content changes.

        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::respondToChangedContents):

2008-08-27  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders

        <rdar://problem/6134133> - Crash when loading large movie as a standalone document

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::pluginWillHandleLoadError): Stubbed for now
        * WebCoreSupport/FrameLoaderClientQt.h:

2008-08-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        [inspector] Emit signals from attachWindow and detachWindow in the Qt platform
        Allow the user of the API to honor the attachWindow and detachWindow
        requests and attach the QWebPage/QWebView wherever it is wanted. This needs
        some more API in QWebPage to be properly exposed.

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::createPage):
        (WebCore::InspectorClientQt::attachWindow):
        (WebCore::InspectorClientQt::detachWindow):
        * WebCoreSupport/InspectorClientQt.h:

2008-08-19  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Geoff Garen.

        Bring back shared JSGlobalData and implicit locking, because too many clients rely on it.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

2008-08-15  Håvard Wall  <hwall@trolltech.com>

        Reviewed by Simon.

        Fixes: compile with QT_NO_UNDOCOMMAND/STACK
        

        * Api/qwebpage.cpp:
        (SetCursorEvent::SetCursorEvent):
        (QWebPagePrivate::createContextMenu):
        (QWebPage::action):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * WebCoreSupport/EditCommandQt.cpp:
        (EditCommandQt::EditCommandQt):
        * WebCoreSupport/EditCommandQt.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (dumpPath):
        (WebCore::EditorClientQt::shouldInsertText):
        (WebCore::EditorClientQt::shouldChangeSelectedRange):
        (WebCore::EditorClientQt::isEditable):
        (WebCore::EditorClientQt::registerCommandForUndo):
        (WebCore::EditorClientQt::clearUndoRedoOperations):
        (WebCore::EditorClientQt::canUndo):
        (WebCore::EditorClientQt::canRedo):
        (WebCore::EditorClientQt::undo):
        (WebCore::EditorClientQt::redo):
        (WebCore::EditorClientQt::shouldInsertNode):

2008-08-15  Håvard Wall  <hwall@trolltech.com>

        Reviewed by Simon.

        Fixes: compile with QT_NO_STYLE_STYLESHEET
        

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::postProgressFinishedNotification):
        (WebCore::FrameLoaderClientQt::createPlugin):

2008-08-15  Håvard Wall  <hwall@trolltech.com>

        Reviewed by Simon.

        Fixes: compile with QT_NO_SHORTCUT
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::mouseMoveEvent):
        (QWebPagePrivate::mouseReleaseEvent):
        (QWebPagePrivate::dragMoveEvent):

2008-08-15  Håvard Wall  <hwall@trolltech.com>

        Reviewed by Simon.

        Fixes:    compile with QT_NO_CONTEXTMENU
        

        * Api/qwebpage.cpp:
        (editorCommandForWebActions):
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::createMainFrame):
        (QWebPagePrivate::updateEditorActions):
        (QWebPage::setEditable):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        * Api/qwebview.h:

2008-08-15  Håvard Wall  <hwall@trolltech.com>

        Reviewed by Simon.

        Fixes: compile with QT_NO_WHEELEVENT
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateEditorActions):
        (QWebPage::event):
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        * Api/qwebview.h:

2008-08-15  Håvard Wall  <hwall@trolltech.com>

        Reviewed by Simon.

        Fixes: compile with QT_NO_PRINTER
        

        * Api/qwebframe.cpp:
        (QWebFrame::print):
        * Api/qwebframe.h:

2008-08-15  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon.

        Doc: Added documentation for default property values.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::keyPressEvent):
        (QWebPage::triggerAction):
        (QWebPage::acceptNavigationRequest):
        (QWebPage::action):
        * Api/qwebview.cpp:

2008-08-15  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon.

        Doc: Renamed snippets that appear in the code directory.
        

        * Api/qwebview.cpp:
        (QWebView::event):
        (QWebView::print):

2008-08-12  Timothy Hatcher  <timothy@apple.com>

        Add a stub for InspectorClient::setAttachedWindowHeight.

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::setAttachedWindowHeight):
        Call notImplemented().
        * WebCoreSupport/InspectorClientQt.h:

2008-08-13  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Use full-page zoom in QtLauncher.

        * QtLauncher/main.cpp:
        (MainWindow::zoomIn):
        (MainWindow::zoomOut):
        (MainWindow::resetZoom):
        (MainWindow::setupUI):

2008-08-13  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Fix linking with QtWebKit.

        * Api/qwebframe.h: remove non-existing function/property.

2008-08-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Based on patch by Siraj razick <siraj.razick@collabora.co.uk>

        https://bugs.webkit.org/show_bug.cgi?id=19125

        Added functions to get/set the zoom factor.

        Added a QWebFrame/QWebView::zoomFactor as well as a boolean
        ZoomTextOnly attribute in QWebSettings.

        * Api/qwebframe.cpp:
        (QWebFrame::setZoomFactor):
        (QWebFrame::zoomFactor):
        * Api/qwebframe.h:
        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        * Api/qwebsettings.h:
        * Api/qwebview.cpp:
        (QWebView::setZoomFactor):
        (QWebView::zoomFactor):
        * Api/qwebview.h:

2008-08-13  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Fix QWebFrame::setHtml() not setting the new contents immediately.

        Added a setter to the DocumentLoader to toggle the deferred loading of the main
        resource when it comes from substitute data.

        Disable deferred loading of the main resource when we have valid substitute data,
        as used by QWebFrame::setHtml.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::download):

2008-08-13  Simon Hausmann  <hausmann@webkit.org>

        Rubber-stamped by Holger.

        Fix QWebPage::isModified().

        isModified() would return true after loading a new page or it would continue to
        return true after undoing modifications. Fix this by eliminating the
        QWebPagePrivate::modified variable and use the undoStack's canUndo() property
        instead.

        https://bugs.webkit.org/show_bug.cgi?id=19252

        * Api/qwebpage.cpp:
        (QWebPage::action):
        * Api/qwebpage_p.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::respondToChangedContents):

2008-08-13  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon.

        Updated docs with the signal emission behavior of urlChanged()

        * Api/qwebframe.cpp:

2008-08-13  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Fix Ctrl+Y to work again when editing text in contextEditable mode.

        This fixes regression in LayoutTests/editing/pasteboard/emacs-cntl-y-001.html

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):

2008-08-13  Thiago Macieira  <tjmaciei@trolltech.com>

        Reviewed by Simon.

        Fix encoding of [ and ] in the host part of the URL

        Until QUrl is fixed (making QUrl's tolerant parser more tolerant), we have to
        add this workaround to the QUrl <> WebCore::KURL conversion operator so that it
        doesn't encode [ and ] when they are found in the host part. That is, the
        following URL:
        http://[::1]/
        is valid and should not be reencoded to:
        http://%5b::1%5d/

        This change adds the automatic test for it.

        * tests/qwebframe/tst_qwebframe.cpp:

2008-08-12  Urs Wolfer  <uwolfer@kde.org>

        Reviewed by Simon.

        https://bugs.webkit.org/show_bug.cgi?id=20357

        Fix crash in QWebPage in case contextMenuEvent has been overwritten
        because context menu has the view as parent and thus is deleted too early.

        Add testcase for this crash.

        * Api/qwebpage_p.h:
        * tests/qwebpage/tst_qwebpage.cpp:
        (tst_QWebPage::contextMenuCrash):

2008-08-07  Simon Hausmann  <hausmann@webkit.org>

        Rubber-stamped by Lars.

        Added API tests for QWebPage/QWebFrame based on QTestLib.

        * tests/qwebframe/qwebframe.pro: Added.
        * tests/qwebframe/tst_qwebframe.cpp: Added.
        * tests/qwebpage/qwebpage.pro: Added.
        * tests/qwebpage/tst_qwebpage.cpp: Added.
        * tests/tests.pro: Added.

2008-08-06  Benjamin C Meyer  <ben@meyerhome.net>

        Reviewed by Simon.

        During the drag operation only accept the event if the action is not ignore action.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::dragEnterEvent):
        (QWebPagePrivate::dragMoveEvent):
        (QWebPagePrivate::dropEvent):

2008-08-06  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Fix the Qt build due to recent ScriptController refactoring.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

2008-08-05  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Move event handling of the return-key from EditorClientQt to QWebPage.
        
        https://bugs.webkit.org/show_bug.cgi?id=20191
        
        This is a first step in refactoring the big switch block
        in EditorClientQt::handleKeyboardEvent to using WebActions
        instead.
        
        The new logic uses two new StandardKeys from QKeySequence:
        
        - InsertParagraphSeparator
        - InsertLineSeparator
        
        Which translate to the commands InsertNewline and InsertLineBreak
        respectivly. On Windows/X11 pressing the shift modifier will invoke
        the latter action. For Mac this is triggered by pressing the meta
        modifier (Ctrl).
        
        Initial patch by: Erik Bunce

        * Api/qwebpage.cpp:
        (editorActionForKeyEvent):
        * Api/qwebpage.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):

2008-08-04  Erik Bunce  <elbunce@thehive.com>

        Reviewed by Simon.

        https://bugs.webkit.org/show_bug.cgi?id=20221

        Add updateAction() support to ToggleBold, ToggleItalic, and ToggleUnderline.
        Add lookup table for mapping web actions to editor commands.

        * Api/qwebpage.cpp:
        (editorCommandForWebActions):
        (QWebPagePrivate::updateAction):
        (QWebPagePrivate::updateEditorActions):
        (QWebPage::triggerAction):
        (QWebPage::setEditable):

2008-08-03  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        A bunch of improvements to the QtLauncher.

        Among others:
        - Unify and unclutter the toolbar, use menu for addition actions
        - Simplify URL edit, just use QLineEdit (no fancy close button etc)
        - Guess the URL from the command line so now we can run ./QtLauncher www.google.com
        - Shortcut keys for most actions
        - Simple autocomplete for the URL edit
        - Actions for zooming, New Window and Close Window
        - Show Format menu only when the content is set to editable

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        (MainWindow::webPage):
        (MainWindow::changeLocation):
        (MainWindow::loadFinished):
        (MainWindow::showLinkHover):
        (MainWindow::newWindow):
        (MainWindow::zoomIn):
        (MainWindow::zoomOut):
        (MainWindow::resetZoom):
        (MainWindow::print):
        (MainWindow::setEditable):
        (MainWindow::dumpHtml):
        (MainWindow::setupUI):
        (main):

2008-08-04  Erik Bunce  <elbunce@thehive.com>

        Reviewed by Simon.

        https://bugs.webkit.org/show_bug.cgi?id=20198

        Allow Copy key sequence to work in non-editable areas.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::keyPressEvent):

2008-07-31  Erik Bunce  <elbunce@thehive.com>

        Reviewed by Simon.

        Make sure edit actions get updated when the contents change.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::respondToChangedContents):

2008-07-31  Erik Bunce  <elbunce@thehive.com>

        Reviewed by Simon.

        Add simple edit test abilities to QtLauncher.

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        (MainWindow::setEditable):
        (MainWindow::dumpHtml):

2008-07-31  Alexey Proskuryakov  <ap@webkit.org>

        Rubber-stamped by Maciej.

        Eliminate JSLock (it was already disabled, removing the stub implementaion and all
        call sites now).

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

2008-07-27  David Kilzer  <ddkilzer@apple.com>

        Fix Qt build failure.

        * Api/qwebframe.h:
        (QWebFrame::setScrollOffset): Make argument const.

2008-07-26  Marc Ordinas i Llopis  <marc.ordinasillopis@collabora.co.uk>

        Reviewed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=20010
        [Qt] Add API access to scrolling

        * Api/qwebframe.cpp: Added access to a frame scroll offset.
        (QWebFrame::scroll):
        (QWebFrame::scrollOffset):
        (QWebFrame::setScrollOffset):
        * Api/qwebframe.h:

2008-07-26  Daniel Jalkut  <jalkut@red-sweater.com>

        Build fix.  Adjust to updated WebCore FrameLoader method names & signatures.

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):

2008-07-25  Joerg Bornemann  <joerg.bornemann@trolltech.com>

        Reviewed by Simon.

        Compile with QT_NO_PRINTER.

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):

2008-07-24  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon

        Don't insert text on keyDown event in EditorClientQt.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):

2008-07-04  Benjamin C Meyer  <ben@meyerhome.net>

        Reviewed by Simon.

        Update the webkit version in the QtWebKit useragent string to match trunk

        * Api/qwebpage.cpp:

2008-07-02  Simon Hausmann  <hausmann@webkit.org>

        Build fix.

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction): The signature of setBaseWritingDirection
        changed to take an enum instead of a string.

2008-07-01  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        Disable JSLock for per-thread contexts.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):
        Pass a parameter (false) to JSLock to indicate that WebKit doesn't need locking.
        Include JSLock.h, as it is no longer brought in implicitly.

2008-07-01  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Don't show the tooltip instantly in the QtLauncher.
        
        Let the QWebView handle tooltips by itself, so we get
        the expected delay as everywhere else.

        * QtLauncher/main.cpp:

2008-06-30  Simon Hausmann  <hausmann@webkit.org>

        Rubber-stamped by Niko.

        Removed the obsolete and unmaintained WebKitPart. The integration of
        QtWebKit into KDE is now done in the webkitkde component inside KDE.

        * WebKitPart/WebKitFactory.cpp: Removed.
        * WebKitPart/WebKitFactory.h: Removed.
        * WebKitPart/WebKitPart.cpp: Removed.
        * WebKitPart/WebKitPart.desktop: Removed.
        * WebKitPart/WebKitPart.h: Removed.
        * WebKitPart/WebKitPart.rc: Removed.
        * WebKitPart/WebKitPartBrowser.rc: Removed.
        * WebKitPart/WebKitPartBrowserExtension.cpp: Removed.
        * WebKitPart/WebKitPartBrowserExtension.h: Removed.
        * WebKitPart/WebKitPartClient.cpp: Removed.
        * WebKitPart/WebKitPartClient.h: Removed.
        * WebKitPart/WebKitPartInterface.cpp: Removed.
        * WebKitPart/WebKitPartInterface.h: Removed.
        * WebKitPart/org.kde.WebKitPart.xml: Removed.

2008-06-24  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build, added missing include for RuntimeObjectImp.

        * Api/qwebframe.cpp:

2008-06-23  Benjamin C Meyer  <ben@meyerhome.net>

        Reviewed by Simon.

        Add function to retrieve the standard context menu

2008-06-20  Marc Ordinas i Llopis  <marc.ordinasillopis@collabora.co.uk>

        Reviewed by Simon.

        https://bugs.webkit.org/show_bug.cgi?id=19082
        [Qt] Full-page plugins not activated

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::committedLoad): Re-check if there's a
        plugin present, as it can be created during the function.

2008-06-20  Marco Barisione  <marco.barisione@collabora.co.uk>

        Reviewed by Simon.

        https://bugs.webkit.org/show_bug.cgi?id=19082
        [Qt] Full-page plugins not activated

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::canShowMIMEType): Return true if the
        MIME type is supported by a plugin.

2008-06-18  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        Prepare JavaScript heap for being per-thread.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject): Trying not to break the build.

2008-06-18  Julien Chaffraix  <jchaffraix@webkit.org>

        Qt Build fix after r34627.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2008-06-15  Darin Adler  <darin@apple.com>

        - give Frame object functions shorter names: scriptProxy() -> script(),
          selectionController() -> selection(), animationController() -> animation()

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::focusInEvent):
        (QWebPagePrivate::focusOutEvent):
        (QWebPage::inputMethodQuery):
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):

2008-06-15  Darin Adler  <darin@apple.com>

        - new names for more JavaScriptCore files

        * WebKit_pch.h:

2008-06-15  Darin Adler  <darin@apple.com>

        - new names for a few key JavaScriptCore files

        * Api/qwebframe.cpp:

2008-06-14  Darin Adler  <darin@apple.com>

        Rubber stamped by Sam.

        - new names for kjs_binding.h and kjs_proxy.h

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):
        * WebKit_pch.h:

2008-06-14  Darin Adler  <darin@apple.com>

        - fix build

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init): Added a missing semicolon.

2008-06-14  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - more https://bugs.webkit.org/show_bug.cgi?id=17257
          start ref counts at 1 instead of 0 for speed

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init): Use create instead of new.
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createDocumentLoader): Ditto.

2008-06-13  Darin Adler  <darin@apple.com>

        - try to fix build

        * WebCoreSupport/FrameLoaderClientQt.h: Add missing argument.

2008-06-13  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - updated for addition of FormState argument to action policy functions

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):

2008-06-11  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Fix left-click and middle-click mouse event are not properly accepted.
        
        When copying or pasting text using left or middle-click, the event must be
        accepted so that it will not be potentially processed further by the parent
        and/or sub-classed widget.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::mouseReleaseEvent):

2008-06-11  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Fix input element does not accept character typed in using AltGr.

        EditorClient is modified to catch AltGr and Ctrl+Alt key combination.
        This fixes http://trolltech.com/developer/task-tracker/index_html?id=207050&method=entry

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):

2008-05-26  Jonathon Jongsma  <jonathon.jongsma@collabora.co.uk>

        Reviewed by Simon.

        https://bugs.webkit.org/show_bug.cgi?id=19323

        Implemented the QWebPage::editable property.

        Small documentation fixes by Simon.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPage::setEditable):
        (QWebPage::isEditable):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h: implement the editable property and add API so that
        applications can switch edit mode on and off for a particular QWebPage
        * WebCoreSupport/EditorClientQt.cpp: retrieve editable property from the
        QWebPage instead of always returning false

2008-06-09  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon

        Make sure web action in context menus have the right enablement,
        while not messing up other web actions not included in the menu.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createContextMenu):
        (QWebPage::updatePositionDependentActions):
        * Api/qwebpage_p.h:

2008-06-09  Benjamin C Meyer  <ben@meyerhome.net>

        Reviewed by Simon

        Add Shift-Space shortcut to go up one screen, the opposite of Space
        which goes down one screen.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::handleScrolling):

2008-06-04  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fix a failing assertion when calling QWebFrame::evaluateJavaScript.

        The starting line number has to be 1 instead of 0.

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):

2008-06-03  Jonathon Jongsma  <jonathon.jongsma@collabora.co.uk>

        Reviewed by Darin Adler.

        * Api/qwebhistoryinterface.cpp: Remove WebCore::historyContains().  This
        function is not used anywhere internally and is only a convenience
        function that can still be accomplished using
        QWebHistoryInterface::historyContains();

2008-05-29  Kavindra Devi Palaraja  <kdpalara@trolltech.com>

        Reviewed by Simon.

        Doc: Mention the requirement of a QApplication with QtWebKit
        

        * Api/qwebview.cpp:

2008-05-29  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon.

        Some clarifications for the documentation.
        

        * Api/qwebpage.cpp:
        * Api/qwebpluginfactory.cpp:

2008-05-27  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Fix web inspector does not returns its state properly after its window is minimized.

        As hinted by Holger, InspectorClientView::hideEvent is not needed.
        This fixes bug https://bugs.webkit.org/show_bug.cgi?id=18967

        * WebCoreSupport/InspectorClientQt.cpp:

2008-05-21  Siraj Razick  <siraj.razick@collabora.co.uk>

        Reviewed by Simon.

        Add <param name="classid"/> support for application/x-qt-object plugins

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2008-05-13  Andy Shaw  <andy@trolltech.com>

        Reviewed by Simon.

        Fixes: QWebHistory::forward() should go forwards and not back

        * Api/qwebhistory.cpp:

2008-05-12  Alexey Proskuryakov  <ap@webkit.org>

        Roll out recent  threading changes (r32807, r32810, r32819, r32822) to simplify
        SquirrelFish merging.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

2008-05-09  Thiago Macieira  <tjmaciei@trolltech.com>

        Reviewed by Simon.

        Fix bad includes in QtWebKit public headers.
        
        Make sure to include qglobal.h using the QtCore prefix so that an explicit
        include/QtCore is not needed in the application's build system. Also make sure
        that qwebsettings.h includes the local qwebkitglobal.h.
        

        * Api/qwebkitglobal.h:
        * Api/qwebsettings.h:

2008-05-08  Marc Ordinas i Llopis  <marc.ordinasillopis@collabora.co.uk>

        Reviewed by Simon.

        https://bugs.webkit.org/show_bug.cgi?id=18935

        Based on work by Sriram Neelakandan for the Gtk port.

        * WebCoreSupport/FrameLoaderClientQt.cpp: Initialize
        m_hasSentResponseToPlugin.
        (WebCore::FrameLoaderClientQt::FrameLoaderClientQt):
        (WebCore::FrameLoaderClientQt::redirectDataToPlugin):

2008-05-08  Warwick Allison  <warwick@trolltech.com>

        Reviewed by Simon.

        Fixes: WebKit expects initial input method state to be *disabled*.
        
        At least QWS does not need the initial input method state to be forced to
        enabled, but other platforms (esp. X11) do. Until fixed/tested on those
        platforms, this is specific to QWS.
        

        * Api/qwebview.cpp:
        (QWebView::QWebView):

2008-05-06  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix logic error in QWebHitTestResult::isNull().

        * Api/qwebframe.cpp:

2008-05-02  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Doc: Mention that you have to enable plugins in QWebSettings for them to work.

        * Api/qwebpage.cpp:

2008-05-02  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build, ExecState is required here.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):

2008-05-01  Marc Ordinas i Llopis  <marc.ordinasillopis@collabora.co.uk>

        Reviewed by Alp Toker.
        Qt parts OK'ed by Simon Hausmann.

        https://bugs.webkit.org/show_bug.cgi?id=14750
        Added support for NPAPI plugins on Gtk and Qt-x11 ports.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::FrameLoaderClientQt):
        (WebCore::FrameLoaderClientQt::finishedLoading):
        (WebCore::FrameLoaderClientQt::setMainDocumentError):
        (WebCore::FrameLoaderClientQt::committedLoad):
        (WebCore::FrameLoaderClientQt::objectContentType):
        (WebCore::FrameLoaderClientQt::createPlugin):
        (WebCore::FrameLoaderClientQt::redirectDataToPlugin):
        * WebCoreSupport/FrameLoaderClientQt.h:

2008-04-30  Julien Chaffraix  <jchaffraix@webkit.org>

        Qt 4.3 build fix.

        Fixes a brace error that made Qt 4.4 build but not Qt 4.3.
 
        * Api/qwebview.cpp:
        (QWebView::event):

2008-04-30  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        In focusIn and focusOut event always update the active state of the
        focus controller. Fixes ~400 failing layout tests due to missing
        editing callbacks that relied on the correct focus.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::focusInEvent):
        (QWebPagePrivate::focusOutEvent):

2008-04-29  Lincoln Ramsay  <lincoln.ramsay@trolltech.com>

        Reviewed by Simon.

        Fix compilation with QT_NO_PRINTER
        

        * Api/qwebview.cpp:
        (QWebView::print):

2008-04-29  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Ensure that relative URL is converted to absolute URL.
        
        This is necessary because loading a relative URL is not really supported
        (the web page may load, but the subsequent URLs for images and links will
        not be resolved properly).
        This also fixes https://bugs.webkit.org/show_bug.cgi?id=18484
        

        * Api/qwebframe.cpp:
        (ensureAbsoluteUrl):
        (QWebFrame::setUrl):
        (QWebFrame::load):

2008-04-29  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Simplification of Qt Launcher (no animation and use standard progress bar widget)
        
        Status bar shows the hovered link without any animation. Progress bar just uses the standard QProgressBar (no custom widget). The launcher is leaner and faster to use under the debugger and/or valgrind.
        

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):

2008-04-29  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Update the cursor when the frame/page loading is finished.
        
        This fixes https://bugs.webkit.org/show_bug.cgi?id=18712
        

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::postProgressFinishedNotification):
        (WebCore::FrameLoaderClientQt::setMainFrameDocumentReady):

2008-04-29  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Holger.

        Fixes: QWebPage::acceptNavigationRequest not being called / linkClicked() not being emitted when clicking on <a href="..." target="_blank"> kind of links.
        
        Call QWebPage::acceptNavigationRequest when the creation of a new window with
        URL is requested. The frame pointer is set to null in this case.
        

        * Api/qwebpage.cpp:
        (QWebPage::setViewportSize):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::startDownload):
        (WebCore::FrameLoaderClientQt::createFrame):

2008-04-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Use the WebCore facility to do the scrolling. Move some code around.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::keyPressEvent):
        (QWebPagePrivate::shortcutOverrideEvent):
        (QWebPagePrivate::handleScrolling):
        * Api/qwebpage_p.h:

2008-04-29  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        fix potential crash when loading image(s)

        Crash may occur. If compiled with 4.3, the variable is not initialized.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):

2008-04-29  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Calling QWebView::setCursor will override the WebCore Cursor.
        Calling QWebView::setCursor will override the WebCore Cursor using
        QWidget::unsetCursor will revert to the WebCore Cursor.

        For detecting the unset we have to compare the shape of the
        cursor to the default arrow. Qt::WA_SetCursor can not be used
        as it is set unconditionally but conditionally removed.

        Calling QWidget::setCursor will immediately send the CursorChange
        event. We listen to this event to decide if we currently use a
        WebCore cursor, got a cursor from outside, or revert to the default.

        This should be race free and work reliable, the manual test for this
        is WebCore/manual-tests/cursor.html

        * Api/qwebpage.cpp:
        (SetCursorEvent::SetCursorEvent):
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        (QWebViewPrivate::QWebViewPrivate):
        (QWebViewPrivate::setCursor):
        (QWebView::QWebView):
        (QWebView::event):

2008-04-29  Kavindra Devi Palaraja  <kdpalara@trolltech.com>

        Reviewed by Simon.

        Documentation fixes:

        - Fixed a qdoc warning
        - Mention that fav icons can be of arbitrary size
        - Fix signature of QWebPage::acceptNavigationRequest show in the documentation

        * Api/qwebframe.cpp:
        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * Api/qwebsettings.cpp:
        * Api/qwebview.cpp:

2008-04-28  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fix QWebView::loadFinished isn't always emitted

        Replaced loadDone() with loadFinished(bool) and moved the signals for progress
        tracking (start, progres, and finish) to the page instead of the frame. This
        ensures that we emit loadFinished even when a subframe started the actual load.

        This causes a few regressions in the layout tests that we for now accept for
        the sake of the correct API. Layout tests we can fix any time though, including
        patch release, the API however we can't change anymore in patch releases.

        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        (QWebPage::totalBytes):
        * Api/qwebpage.h:
        * Api/qwebview.cpp:
        (QWebView::setPage):
        * Api/qwebview.h:
        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (drtDescriptionSuitableForTestResult):
        (WebCore::FrameLoaderClientQt::FrameLoaderClientQt):
        (WebCore::FrameLoaderClientQt::setFrame):
        (WebCore::FrameLoaderClientQt::transitionToCommittedFromCachedPage):
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):
        (WebCore::FrameLoaderClientQt::willChangeTitle):
        (WebCore::FrameLoaderClientQt::createDocumentLoader):
        (WebCore::FrameLoaderClientQt::download):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):
        * WebCoreSupport/FrameLoaderClientQt.h:

2008-04-28  Kavindra Devi Palaraja  <kdpalara@trolltech.com>

        Reviewed by Simon.

        Added more documentation for QWebSettings, QWebPluginFactory and QWebFrame

        * Api/qwebframe.cpp:
        * Api/qwebpluginfactory.cpp:
        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):
        (QWebSettings::setUserStyleSheetUrl):
        (QWebSettings::iconForUrl):
        (QWebSettings::webGraphic):
        (QWebSettings::maximumPagesInCache):
        (QWebSettings::setFontFamily):
        (QWebSettings::resetFontFamily):
        (QWebSettings::testAttribute):
        (QWebSettings::resetAttribute):

2008-04-28  Ariya Hidayat  <ahidayat@trolltech.com>

        Reviewed by Simon.

        Fix document/frame title not reset when loading a new URI
        
        We should assume first the frame has no title. If it has, then the dispatchDidReceiveTitle()
        will be called very soon with the correct title.
        This properly resets the title when we navigate to a URI without a title.
        

        * WebCoreSupport/FrameLoaderClientQt.cpp:

2008-04-28  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon.

        Minor documentation changes.

        * Api/qwebview.cpp:

2008-04-28  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Prevent middle-click from triggering open URL from clipboard when the event has already been accepted.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::mouseMoveEvent):
        (QWebPagePrivate::mousePressEvent):
        (QWebPagePrivate::mouseDoubleClickEvent):
        (QWebPagePrivate::mouseTripleClickEvent):
        (QWebPagePrivate::mouseReleaseEvent):

2008-04-28  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fix scrollbar behavior in QtWebKit to match QScrollBar.
        
        Right click context menu is now supported, along with
        middle click to center slider thumb over mouse cursor.
        

        * Api/qwebpage.cpp:
        (QWebPage::linkDelegationPolicy):

2008-04-28  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Implemented channel-based logging for QtWebKit.

        Comma-separated log channels are read from the QT_WEBKIT_LOG environment variable.
        Warnings for notImplemented() is still output by default, but can be disabled
        by setting DISABLE_NI_WARNINGS=1.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):

2008-04-28  Simon Hausmann  <shausman@trolltech.com>

        Rubber-stamped by Lars

        Removed setHtml(const QByteArray &) overload as it breaks the common use of the setHtml() API.

        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * Api/qwebview.cpp:
        * Api/qwebview.h:

2008-04-28  Kavindra Devi Palaraja  <kdpalara@trolltech.com>

        Reviewed by Simon.

        Doc - adding more documentation to QWebFrame, QWebPage and QWebView
        

        * Api/qwebframe.cpp:
        * Api/qwebpage.cpp:
        * Api/qwebview.cpp:
        (QWebView::stop):
        (QWebView::back):
        (QWebView::changeEvent):

2008-04-28  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Holger.

        Fixes: Popups/Context menu in WebKit appearing at the wrong location when embedded in the graphics view or using multiple screens
        
        Give the popups the right parent widget and the right coordinates relative within the parent.
        

        * Api/qwebpage.cpp:

2008-04-28  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Doc: Add see also's (and a few minor whitespace/typo corrections)
        

        * Api/qwebframe.cpp:
        (QWebFrame::~QWebFrame):
        (QWebFrame::setHtml):
        (QWebFrame::setContent):
        (QWebFrame::parentFrame):
        (QWebFrame::childFrames):
        (QWebFrame::setScrollBarValue):
        (QWebFrame::scrollBarValue):
        (QWebFrame::scrollBarMaximum):
        (QWebFrame::scrollBarMinimum):
        (QWebFrame::render):
        (QWebFrame::pos):
        (QWebFrame::geometry):
        (QWebFrame::print):
        (QWebFrame::evaluateJavaScript):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::mousePressEvent):
        (QWebPagePrivate::mouseDoubleClickEvent):
        (QWebPage::~QWebPage):
        (QWebPage::javaScriptPrompt):
        (openNewWindow):
        (QWebPage::setViewportSize):
        (QWebPage::acceptNavigationRequest):
        (QWebPage::action):
        (QWebPage::userAgentForUrl):
        (QWebPagePrivate::_q_onLoadProgressChanged):
        * Api/qwebview.cpp:
        (QWebView::event):

2008-04-28  Kavindra Devi Palaraja  <kdpalara@trolltech.com>

        Reviewed by Simon.

        Submitting more documentation for QWebPage
        

        * Api/qwebpage.cpp:

2008-04-28  Lincoln Ramsay  <lincoln.ramsay@trolltech.com>

        Reviewed by Simon.

        Compile when QT_NO_CLIPBOARD is defined.
        

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):

2008-04-28  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon.

        Minor documentation fix.
        

        * Api/qwebhistory.cpp:

2008-04-28  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Implement QWebPage::createPlugin
        
        The code is coming from the demo browser and needed here
        for some manual tests.
        

        * QtLauncher/QtLauncher.pro:
        * QtLauncher/main.cpp:
        (WebPage::createPlugin):

2008-04-28  Simon Hausmann  <hausmann@webkit.org>

        Qt/Win build fix. Include config.h to get the implicit MathExtras.h
        inclusion correct with regards to rand_s.

        * Api/qwebhistory.cpp:

2008-04-28  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        https://bugs.webkit.org/show_bug.cgi?id=18713

        Fix scrollbar painting issues in QtWebKit.

        Hovering and click-draging outside of the scrollbar would
        produce unexpected and inconcistent results. We also didn't
        pass on leave-events to the underlying WebKit code, which
        was nessecary to implement the paint fix.

        Note: The event handling of the Leave event should be moved
        out of QWebView::event() and into a proper override for 4.5.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::leaveEvent):
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        (QWebView::event):

2008-04-25  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon, Holger.

        Fixed focus handling when a node is focused while the corresponding QWebPage does not have the focus.

        * Correctly de- and reactivate the focused frame in focusOut/focusInEvent
        without telling the focus controller. We don't want to change the focused frame
        - the controller has to remember it in fact - but instead just deactivate the
        frame for correct painting as RenderTheme::isFocused() uses the activation
        state of the frame.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::focusInEvent):
        (QWebPagePrivate::focusOutEvent):

2008-04-25  Kavindra Devi Palaraja  <kdpalara@trolltech.com>

        Reviewed by Simon.

        completed documentation for the Detailed Description section for QWebView
        

        * Api/qwebview.cpp:

2008-04-25  Denis Dzyubenko  <denis.dzyubenko@trolltech.com>

        Reviewed by Simon.

        Fixed the way QWebHistory works - when you call back(), forward() or goToItem() functions it changes the current item in history *and* loads the corresponding page.
        

        * Api/qwebhistory.cpp:
        (QWebHistory::back):
        (QWebHistory::forward):
        (QWebHistory::goToItem):

2008-04-25  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fix resubmit of HTML forms when initially denied by QWebPage::acceptNavigationRequest().
        

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):

2008-04-25  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        When pressing backspace in a line edit in a webpage we should not go back to the previous page.
        
        The shortcut for back on Windows is backspace. Implemented shortcut override
        handling in QWebView/QWebPage to prevent this.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::wheelEvent):
        (editorActionForKeyEvent):
        (QWebPagePrivate::keyPressEvent):
        (QWebPagePrivate::inputMethodEvent):
        (QWebPagePrivate::shortcutOverrideEvent):
        (QWebPage::event):
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        (QWebView::event):

2008-04-25  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        Fix triple-clicking does not work in a web page
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateEditorActions):
        (QWebPagePrivate::timerEvent):
        (QWebPagePrivate::mousePressEvent):
        (QWebPagePrivate::mouseDoubleClickEvent):
        (QWebPage::undoStack):
        * Api/qwebpage_p.h:

2008-04-25  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        When pressing Ctrl-Up the keyboard modifiers could include other modifiers
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::keyPressEvent):

2008-04-25  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Fix handling of Javascript's confirm() function in QtWebKit.
        

        * Api/qwebpage.cpp:

2008-04-25  Kavindra Devi Palaraja  <kdpalara@trolltech.com>

        Reviewed by Simon.

        Doc - added a screenshot, flowchart, and a snippet to the QWebView documentation to improve clarity
        

        * Api/qwebview.cpp:

2008-04-25  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        QWebPage: missing signal when window.print() is requested from javascript
        

        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * WebCoreSupport/ChromeClientQt.cpp:

2008-04-25  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Fixes: "Save Image" action wasn't doing anything.
        

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):

2008-04-25  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Apply key event changes to the current frame, not the main frame.
        
        Example: hitting space bar should scroll current frame, not the main frame
        which doesn't even have a scrollbar.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::keyPressEvent):

2008-04-25  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Fixes: QWebFrame crash when fetching the icon

        Just call QWebSettings::iconForUrl to not duplicate code and obey the mutex lock.

        * Api/qwebframe.cpp:

2008-04-25  Warwick Allison  <warwick@trolltech.com>

        Reviewed by Simon.

        Fixes: Scrollbars did not report correct maximum.

        * Api/qwebframe.cpp:

2008-04-25  David Boddie <dboddie@trolltech.com>

        Reviewed by Simon.

        Documentation updates for some of the QWeb classes

        * Api/qwebframe.cpp:
        * Api/qwebhistory.cpp:
        * Api/qwebsettings.cpp:
        * Api/qwebview.cpp:

2008-04-25  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Implement dumping of resource load callbacks to pass http/tests/xmlhttprequest/abort-should-cancel-load.html
        
        Similar to Editing and Frameloading we do the dumping within WebCore
        

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (qt_dump_frame_loader):
        (qt_dump_resource_load_callbacks):
        (drtDescriptionSuitableForTestResult):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoading):
        (WebCore::FrameLoaderClientQt::dispatchDidLoadResourceFromMemoryCache):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForMIMEType):

2008-04-24  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam.

        Change some String arguments to be const references instead.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::shouldInsertText):
        * WebCoreSupport/EditorClientQt.h:

2008-04-24  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Cosmetic changes to make the code more readable.
        -Early exit if we don't have a webview
        -handle the empty tooltip and non-empty tooltip case separately
        

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::setToolTip):
        (WebCore::ChromeClientQt::print):

2008-04-24  Paul Olav Tvete  <paul@trolltech.com>

        Reviewed by Simon.

        Automatically wrap tooltip text and hide a shown tooltip when it is empty.

        QWidget::setTooltip("") will still show the old tooltip for up to 10 seconds.
        Workaround as discussed with Matthias.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::setToolTip):

2008-04-24  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        Allow to disable caching completeley by calling setObjectCacheCapacities(0, 0, 0)

        * Api/qwebsettings.cpp:
        (QWebSettings::setObjectCacheCapacities):

2008-04-24  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Improve keyboard scrolling
        
        Match Down/Up keys scroll distance with Safari (i.e. faster) and add Home and End shortcuts to scroll to the top/botom.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::keyPressEvent):

2008-04-24  Olivier Goffart  <ogoffart@trolltech.com>

        Reviewed by Simon.

        Fix various compiler warnings in the Qt port.

        * Api/qwebframe.cpp:
        (QWebFrame::print):
        * Api/qwebsettings.cpp:
        (graphics):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2008-04-24  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Cleaned up copyright headers (removed misplaced class descriptions and
        fixed inconsistent whitespace and indentation).

        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * Api/qwebhistory.cpp:
        * Api/qwebhistory.h:
        * Api/qwebhistory_p.h:
        * Api/qwebhistoryinterface.cpp:
        * Api/qwebhistoryinterface.h:
        * Api/qwebkitglobal.h:
        * Api/qwebnetworkinterface.cpp:
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebpluginfactory.cpp:
        * Api/qwebpluginfactory.h:
        * Api/qwebsettings.cpp:
        * Api/qwebsettings.h:
        * Api/qwebview.h:
        * QtLauncher/main.cpp:

2008-04-24  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Added basic URL guessing to QtLauncher (same as in the demo browser).
        

        * QtLauncher/main.cpp:
        (MainWindow::changeLocation):
        (MainWindow::guessUrlFromString):

2008-04-24  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon Hausmann <hausmann@webkit.org>.

        Prevent double deletions of the default web interface.
        

        * Api/qwebhistoryinterface.cpp:
        (gCleanupInterface):
        (QWebHistoryInterface::QWebHistoryInterface):

2008-04-23  Simon Hausmann  <hausmann@webkit.org>

        Fix compilation against Qt 4.3

        * Api/qwebpage.cpp:
        (QWebPage::userAgentForUrl):
        * QtLauncher/main.cpp:
        (main):

2008-04-23  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Simon.

        * Make sure the "Inspect Element" item gets added to the ContextMenu, a call
        to ContextMenu::populate() is not adding it, the ContextMenuController does
        add it after the call to populate(). Do that as well.
        

        * Api/qwebpage.cpp:
        (QWebPage::updatePositionDependentActions):

2008-04-23  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix crashes on window.close().

        We should not delete the QWebPage object in the ChromeClient but leave it up to
        the application when and whether to delete a browser window. For this we now
        emit the windowCloseRequested() signal.

        Done with Tor Arne.

        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        * WebCoreSupport/ChromeClientQt.cpp:

2008-04-23  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix parsing of external scripts/stylesheets when using setHtml(const QString &html).

        We used to pass the html string to the frameloader in utf-16, which also meant that the default
        encoding of external scripts/stylesheets became utf-16. That doesn't make sense, so assume utf-8
        by default. This is now also documented.

        * Api/qwebframe.cpp:
        (QWebFrame::setHtml):
        * Api/qwebview.cpp:

2008-04-23  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Fixes background color propagation when using a custom QWebPage
        
        Set the palette in setPage(), not during the creation on-demand.
        

        * Api/qwebview.cpp:
        (QWebView::page):
        (QWebView::setPage):

2008-04-23  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Fix the user agent on the mac to be BSD4
        
        Put Q_OS_DARWIN before Q_OS_BSD4 sense they are both defined on the mac
        

        * Api/qwebpage.cpp:
        (QWebPage::userAgentForUrl):

2008-04-23  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Holger.

        Added missing copyright notice.
        Small fixes to the documentation.

        * Api/qwebpluginfactory.cpp:

2008-04-23  Zack Rusin  <zack@tungstengraphics.com>

        Reviewed by Simon.

        Added a contentsSize() property.

        * Api/qwebframe.cpp:
        (QWebFrame::contentsSize):
        (QWebFrame::hitTestContent):
        * Api/qwebframe.h:

2008-04-22  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Fixes: QWebPage's QNetworkManager's can be shared among webpages.

        Don't force the deletion of the object, but let QObject take care of it.

        * Api/qwebpage.cpp:

2008-04-22  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Documentation for QWebPluginFactory and documentation updates for QWebPage.

        * Api/qwebpage.cpp:
        (QWebPage::setLinkDelegationPolicy):
        (QWebPage::linkDelegationPolicy):
        (QWebPage::swallowContextMenuEvent):
        (QWebPage::updatePositionDependentActions):
        (QWebPage::extension):
        (QWebPage::networkAccessManager):
        * Api/qwebpluginfactory.cpp:
        (QWebPluginFactory::QWebPluginFactory):
        (QWebPluginFactory::~QWebPluginFactory):
        (QWebPluginFactory::refreshPlugins):

2008-04-22  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Added QWebPage::swallowContextMenuEvent and QWebPage::updatePositionDependentActions.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::mouseReleaseEvent):
        (QWebPage::setLinkDelegationPolicy):
        (QWebPage::linkDelegationPolicy):
        (QWebPage::swallowContextMenuEvent):
        (QWebPage::updatePositionDependentActions):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        (QWebView::event):

2008-04-22  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Added Extension APIs for QWebPage.

        * Api/qwebpage.cpp:
        (QWebPage::setLinkDelegationPolicy):
        (QWebPage::linkDelegationPolicy):
        (QWebPage::extension):
        * Api/qwebpage.h:
        * Api/qwebpluginfactory.cpp:
        (QWebPluginFactory::extension):

2008-04-22  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Emit loadProgress() signal on loadStarted().
        

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::postProgressEstimateChangedNotification):

2008-04-22  Zack Rusin  <zack@kde.org>

        Reviewed by Simon.

        Fix background propagation from the QWebView's palette.

        The background brush of the palette needs to be propagated to the WebCore::FrameView.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::updateBackground):
        * Api/qwebframe_p.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::dropEvent):
        (QWebPage::setPalette):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        (QWebView::page):
        (QWebView::changeEvent):
        * Api/qwebview.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:

2008-04-22  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Fix maps.google.com

        We have to include a version in the Safari tag in the user-agent.

        * Api/qwebpage.cpp:
        (QWebPage::userAgentForUrl):

2008-04-22  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Add visual focusing hint for clear button and
        change focus to web page after user enters new URL.

        * QtLauncher/main.cpp:
        (ClearButton::paintEvent):
        (MainWindow::changeLocation):

2008-04-22  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Added QWebFrame::hitTestContent() and QWebHitTestResult.

        * Api/qwebframe.cpp:
        (QWebFrame::hitTestContent):
        (QWebFrame::event):
        (QWebHitTestResult::QWebHitTestResult):
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
        (QWebHitTestResult::operator=):
        (QWebHitTestResult::~QWebHitTestResult):
        (QWebHitTestResult::isNull):
        (QWebHitTestResult::pos):
        (QWebHitTestResult::title):
        (QWebHitTestResult::linkText):
        (QWebHitTestResult::linkUrl):
        (QWebHitTestResult::linkTitle):
        (QWebHitTestResult::linkTargetFrame):
        (QWebHitTestResult::alternateText):
        (QWebHitTestResult::imageUrl):
        (QWebHitTestResult::pixmap):
        (QWebHitTestResult::isContentEditable):
        (QWebHitTestResult::isContentSelected):
        (QWebHitTestResult::frame):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::contextMenuEvent):
        (QWebPage::triggerAction):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2008-04-22  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Don't crash if an input method query is done without a page.
        

        * Api/qwebview.cpp:
        (QWebView::inputMethodQuery):

2008-04-22  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Added re-implementations of QObject::event for future safety.
        
        This makes it easier to fix bugs with the event handling even in patch releases
        and is a general style we follow in Qt.
        

        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * Api/qwebview.cpp:
        (QWebView::event):
        * Api/qwebview.h:

2008-04-22  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Fix construction of the user agent.
        
        The user-agent is now composed of
        * the platform and subplatform
        * the Qt version or application name and version (if set)
        * the locale
        * the SSL settings
        

        * Api/qwebpage.cpp:
        (QWebPage::networkAccessManager):
        (QWebPage::setPluginFactory):
        (QWebPage::pluginFactory):
        (QWebPage::userAgentForUrl):
        * QtLauncher/main.cpp:

2008-04-22  Thiago Macieira  <tjmaciei@trolltech.com>

        Reviewed by Simon.

        Fixes: Pedantic compilation fix

        Don't put semi-colons after braces closing namespaces.

        * Api/qwebsettings.h:

2008-04-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Changed the return type of QWebFrame::evaluateJavaScript from a QString to a QVariant.

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):
        * Api/qwebframe.h:

2008-04-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fixes redundant "Fonts" submenu in default lineedits that has only disabled items.

        Don't show sub-menus that have only actions that are disabled.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createContextMenu):

2008-04-21  Kavindra Devi Palaraja <kdpalara@trolltech.com>.

        Reviewed by Simon.

        Lots of documentation fixes, fixed all qdoc warnings.

        * Api/qwebframe.cpp:
        (QWebFrame::setTextSizeMultiplier):
        * Api/qwebhistoryinterface.cpp:
        (gCleanupInterface):
        (QWebHistoryInterface::QWebHistoryInterface):
        (QWebHistoryInterface::~QWebHistoryInterface):
        * Api/qwebpage.cpp:
        (QWebPage::inputMethodQuery):
        (QWebPage::view):
        (QWebPage::javaScriptConsoleMessage):
        (QWebPage::javaScriptAlert):
        (QWebPage::javaScriptConfirm):
        (QWebPage::javaScriptPrompt):
        (QWebPage::viewportSize):
        (QWebPage::acceptNavigationRequest):
        (QWebPage::action):
        (QWebPage::event):
        (QWebPage::focusNextPrevChild):
        (QWebPage::setForwardUnsupportedContent):
        (QWebPage::setLinkDelegationPolicy):
        (QWebPage::findText):
        (QWebPage::settings):
        (QWebPage::networkProxy):
        (QWebPage::setNetworkAccessManager):
        * Api/qwebpage.h:
        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):
        (QWebSettings::setIconDatabasePath):
        (QWebSettings::iconForUrl):
        (QWebSettings::fontFamily):
        * Api/qwebview.cpp:
        (QWebView::load):
        * Api/qwebview.h:

2008-04-21  Marius Bugge Monsen  <mmonsen@trolltech.com>

        Reviewed by Simon.

        Fix compile failure on solaris-cc

        * Api/qwebpage.h: Removed trailing semicolons and moved the private
        d-pointer to not confuse the compiler

2008-04-21  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        Build fix for Qt 4.3

        * When building WebCore/internal make sure the QT_[BEGIN,END]_NAMESPACE is
        always defined. Do this by adding defines to the compiler line
        * For users of our API this is not feasible. Every public header file should
        include qwebkitglobal.h. Define the QT_BEGIN_NAMESPACE and QT_END_NAMESPACE
        when we are building everything < 4.4.0 and don't have them defined.

        * Api/qwebkitglobal.h:

2008-04-21  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Initialize the WebGraphics with the one found in WebCore
        

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):

2008-04-21  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Allow TextAreas to be resized.
        * No QWebSettings for this is introduced.
        

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):

2008-04-21  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Holger.

        Fixes: QWebView::url property behaviour strange in designer

        Added QWebView/QWebFrame::setUrl, which unlike load() clears the view immediately, schedules a load of the url but also makes sure url() returns the set url. This setter is now also used for the url property.

        * Api/qwebframe.cpp:
        (QWebFrame::setUrl):
        * Api/qwebframe.h:
        * Api/qwebview.cpp:
        (QWebView::setUrl):
        * Api/qwebview.h:

2008-04-21  Andre Poenitz  <andre.poenitz@trolltech.com>

        Reviewed by Simon Hausmann <hausmann@webkit.org>.

        Fix compilation with Qt namespaces

        * Api/qwebframe.cpp:
        (QWebFrame::print):
        * Api/qwebview.h:

2008-04-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        When printing on high resolution printers we need to scale the painter accordingly (for now).

        * Api/qwebframe.cpp:
        (QWebFrame::print):

2008-04-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Provide a print preview in the QtLauncher

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        (MainWindow::showLinkHover):
        (MainWindow::print):

2008-04-20  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Alp Toker.

        Share the printing code between the Gtk and the Qt port
        and added printing to the Qt WebKit API.

        * Api/qwebframe.cpp:
        (QWebFrame::print):
        * Api/qwebframe.h:
        * Api/qwebview.cpp:
        (QWebView::print):
        * Api/qwebview.h:

2008-04-19  Julien Chaffraix  <jchaffraix@webkit.org>

        Qt build fix (renderer() -> contentRenderer()).

        * Api/qwebframe.cpp:
        (QWebFrame::renderTreeDump):
        (QWebFrame::render):

2008-04-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Many API changes and additions after a full review with Jasmin Blanchette <jasmin@trolltech.com>

        The diff is too big to mention the changes individually, but most of the changes were of cosmetic
        nature where methods or enums have been renamed or prefixed/suffixed according to the consistency
        rules of the Qt API.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJavaScriptWindowObject):
        (QWebFrame::toHtml):
        (QWebFrame::toPlainText):
        (QWebFrame::icon):
        (QWebFrame::setContent):
        (QWebFrame::setScrollBarPolicy):
        (QWebFrame::render):
        (QWebFrame::setTextSizeMultiplier):
        (QWebFrame::textSizeMultiplier):
        (QWebFrame::pos):
        * Api/qwebframe.h:
        * Api/qwebhistory.cpp:
        * Api/qwebhistory.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::~QWebPagePrivate):
        (QWebPagePrivate::acceptNavigationRequest):
        (webActionForContextMenuAction):
        (QWebPagePrivate::updateAction):
        (QWebPagePrivate::keyPressEvent):
        (QWebPage::view):
        (QWebPage::javaScriptPrompt):
        (QWebPage::createWindow):
        (QWebPage::triggerAction):
        (QWebPage::setViewportSize):
        (QWebPage::acceptNavigationRequest):
        (QWebPage::action):
        (QWebPage::focusNextPrevChild):
        (QWebPage::setForwardUnsupportedContent):
        (QWebPage::forwardUnsupportedContent):
        (QWebPage::setLinkDelegationPolicy):
        (QWebPage::findText):
        (QWebPage::networkAccessManager):
        (QWebPageContext::imageUrl):
        (QWebPageContext::image):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        (QWebSettings::setIconDatabasePath):
        (QWebSettings::iconDatabasePath):
        (QWebSettings::clearIconDatabase):
        (QWebSettings::iconForUrl):
        (QWebSettings::setWebGraphic):
        (QWebSettings::fontFamily):
        (QWebSettings::setAttribute):
        (QWebSettings::testAttribute):
        (QWebSettings::resetAttribute):
        * Api/qwebsettings.h:
        * Api/qwebview.cpp:
        (QWebView::setPage):
        (QWebView::icon):
        (QWebView::setTextSizeMultiplier):
        (QWebView::textSizeMultiplier):
        (QWebView::findText):
        (QWebView::reload):
        (QWebView::mouseMoveEvent):
        * Api/qwebview.h:
        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        (main):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::ChromeClientQt):
        (WebCore::ChromeClientQt::setWindowRect):
        (WebCore::ChromeClientQt::toolbarsVisible):
        (WebCore::ChromeClientQt::setStatusbarVisible):
        (WebCore::ChromeClientQt::statusbarVisible):
        (WebCore::ChromeClientQt::setScrollbarsVisible):
        (WebCore::ChromeClientQt::setResizable):
        (WebCore::ChromeClientQt::scrollBackingStore):
        (WebCore::ChromeClientQt::mouseDidMoveOverElement):
        (WebCore::ChromeClientQt::setToolTip):
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setFrame):
        (WebCore::FrameLoaderClientQt::didPerformFirstNavigation):
        (WebCore::FrameLoaderClientQt::setMainDocumentError):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoading):
        (WebCore::FrameLoaderClientQt::createFrame):
        (WebCore::FrameLoaderClientQt::objectContentType):
        * WebCoreSupport/FrameLoaderClientQt.h:
        * WebCoreSupport/InspectorClientQt.cpp:

2008-04-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Added QWebView::find/QWebFrame::find.

        * Api/qwebpage.cpp:
        (QWebPage::focusNextPrevChild):
        (QWebPage::find):
        * Api/qwebpage.h:
        * Api/qwebview.cpp:
        (QWebView::find):
        * Api/qwebview.h:

2008-04-15  Ariya Hidayat  <ariya.hidayat@trolltech.com>

        Reviewed by Simon.

        fix potential crash when loading image(s)

        Crash may occur. If compiled with 4.3, the variable is not initialized.
        This fix solves https://bugs.webkit.org/show_bug.cgi?id=17174

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):

2008-04-15  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Update the micro focus for input methods as soon as the composition mode changes
        or the caret/selection changes.
        

        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * Api/qwebview.cpp:
        (QWebView::setPage):
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::respondToChangedSelection):
        (WebCore::EditorClientQt::setInputMethodState):

2008-04-15  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Don't use QDir, QString or any locale sensitive function before constructing Q(Core)Application,
        it yields undefined behaviour or wrong default codec initialization.
        

        * QtLauncher/main.cpp:
        (WebPage::createWindow):

2008-04-15  Olivier Goffart  <ogoffart@trolltech.com>

        Reviewed by Simon.

        Fixes: copy to clipboard when selecting, and paste when clicking with the middle button

        * Api/qwebpage.cpp:
        (QWebPagePrivate::mouseReleaseEvent): If the clipboard supports
        selections then we support copy & paste into the selection.

2008-04-15  Michael Brasser  <michael.brasser@trolltech.com>

        Reviewed by Simon.

        Add basic input method support.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::dropEvent):
        (QWebPagePrivate::inputMethodEvent):
        (QWebPage::inputMethodQuery):
        (QWebPage::event):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        (QWebView::QWebView):
        (QWebView::inputMethodQuery):
        (QWebView::inputMethodEvent):
        * Api/qwebview.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::setInputMethodState):

2008-04-15  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Added (QWebFrame|QWebView)::textZoomFactor.
        

        * Api/qwebframe.cpp:
        (QWebFrame::setTextZoomFactor):
        (QWebFrame::textZoomFactor):
        * Api/qwebframe.h:
        * Api/qwebview.cpp:
        (QWebView::setTextZoomFactor):
        (QWebView::textZoomFactor):
        * Api/qwebview.h:

2008-04-15  Michael Brasser  <michael.brasser@trolltech.com>

        Reviewed by Simon.

        Added simple scrolling API to QWebFrame.
        
        The intent is that it works similar to QAbstractScrollArea.
        

        * Api/qwebframe.cpp:
        (QWebFrame::setScrollBarValue):
        (QWebFrame::scrollBarValue):
        (QWebFrame::scrollBarMaximum):
        (QWebFrame::scrollBarMinimum):
        * Api/qwebframe.h:

2008-04-15  Olivier Goffart  <ogoffart@trolltech.com>

        Reviewed by Holger.

        Fixes: implement the OpenFrameInNewWindow action.
        

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):

2008-04-15  Andre Poenitz  <andre.poenitz@trolltech.com>

        Reviewed by Simon.

        Fix compilation with Qt namespaces

        Qt can be configured to have all of its classes inside a specified namespaces.
        This is for example used in plugin/component environments like Eclipse.

        This change makes it possible to let the Qt port compile against a namespaced
        Qt by the use of macros Qt provides to properly forward declare Qt classes in
        the namespace.

        * Api/qwebframe.h:
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebpluginfactory.h:
        * Api/qwebsettings.h:
        * Api/qwebview.h:

2008-04-05  Olivier Goffart  <ogoffart@trolltech.com>

        Reviewed by Holger.

        Fixes: Right clicking an image and choosing "copy image" doesnt put anything in the clipboard.
        

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):

2008-04-05  Olivier Goffart  <ogoffart@trolltech.com>

        Reviewed by Simon.

        Fixes: Right click, and "Open image" open the link instead of the image.
        

        * Api/qwebpage.cpp:

2008-04-05  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Added doc stub for QWebSettings so class docs are generated
        

        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):

2008-04-05  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Propose the addition of updateRequest and scrollRequest to the QWebPage.
        
        * The question is if these signals belong to QWebPage or  QWebFrame.
        -It is more easy to have them in QWebPage because ScrollView is invoking
        the ChromeClient with the right coordinates
        -On the other hand someone wants to render frames separately. But this is partly
        doomed as you can have overlapping frames and what you paint would not relate to
        what you normally see on webpages.
        

        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::scrollBackingStore):
        (WebCore::ChromeClientQt::mouseDidMoveOverElement):

2008-04-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Mark Rowe.

        Roll out r31599 and r31605 again after discussion with Mark Rowe.

        * Api/qwebframe.cpp:
        (QWebFrame::icon):
        * Api/qwebsettings.cpp:
        (QWebSettings::iconForUrl):

2008-04-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Change IconDatabase::iconForPageURL to return more information. E.g. if
        an image has been found, or if the loading of an image has been scheduled.
        * Update FrameLoader to use another method to trigger reading from disk
        * Update the QWebFrame and QWebSettings

        * Api/qwebframe.cpp:
        (QWebFrame::icon):
        * Api/qwebsettings.cpp:
        (QWebSettings::iconForUrl):

2008-04-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Safari is using the IconDatabase the following way (assumption). Before they
        call iconDatabase()->open they "retain" all URLs they are interested in, these
        could come from the history.
        * When opening the iconDatabase() a thread will be started that is going to import
        the URLs, all none manually retained URLs are scheduled for removal. The removal
        is going to happen when the next icon gets stored in the database.
        * We do not have any IconDatabase code, we can not retain the URLs before opening the
        database. To disable the automatic pruning of the icons we will ask the IconDatabase
        to delay this operation. This means our IconDatabase, when used, will grow, so we should
        try to have a IconDatabase class in 4.4.
        * The only way to counter the growth is a call to QWebSettings::clearIconDatabase
        

        * Api/qwebsettings.cpp:
        (QWebSettings::clearIconDatabase):
        * Api/qwebsettings.h:

2008-04-03  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Add a way to get the site icon for a url
        static QPixmap iconForUrl(const QUrl &url);
        

        * Api/qwebsettings.cpp:
        (QWebSettings::iconForUrl):
        * Api/qwebsettings.h:

2008-04-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Update the Copyright info in QWebSettings
        

        * Api/qwebsettings.cpp:
        * Api/qwebsettings.h:

2008-04-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * The isEmpty check is not needed anymore with the earlier backport
        

        * Api/qwebframe.cpp:
        (QWebFrame::icon):

2008-04-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * For the http tests we need the output of the FrameLoaderClient. The QtWebKit API
        is not exporting enough to create the output in DRT itself. Settle with the approach
        Lars has taken for the Editing support and add branches to our FrameLoaderClient code.
        * run-webkit-tests http/tests(/loading) can now be executed.
        * For tests in loading/ directories we are going to throw away the dirty
        QWebPage to start with something clean.
        

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (qt_dump_frame_loader):
        (drtDescriptionSuitableForTestResult):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidCancelClientRedirect):
        (WebCore::FrameLoaderClientQt::dispatchWillPerformClientRedirect):
        (WebCore::FrameLoaderClientQt::dispatchDidChangeLocationWithinPage):
        (WebCore::FrameLoaderClientQt::dispatchWillClose):
        (WebCore::FrameLoaderClientQt::dispatchDidStartProvisionalLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveTitle):
        (WebCore::FrameLoaderClientQt::dispatchDidCommitLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishDocumentLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoad):
        (WebCore::FrameLoaderClientQt::registerForIconNotification):
        (WebCore::FrameLoaderClientQt::setMainDocumentError):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):

2008-04-02  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Export the PageCache and Cache capacity call one to one. This is only there
        to allow the QtLauncher to play with caching.
        * TODO: make API decisions and consider following the windows Api to set a WebCacheModel
        and determine certain values automatically.
        

        * Api/qwebsettings.cpp:
        (QWebSettings::setPageCacheCapacity):
        (QWebSettings::setObjectCacheCapacities):
        * Api/qwebsettings.h:
        * QtLauncher/main.cpp:

2008-04-02  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        Prepapre everything for enabling the PageCache for the Qt Platform:
        * Claim that we can cache pages
        * Create the FrameView FrameLoaderClientQt::transitionToCommittedForNewPage using
        the initial size of the viewport and stop creating it in the QWebFramePrivate::init
        
        Differences to the Windows port:
        * attachToWindow/detachFromWindow is not called and is not (yet) part
        of Widget/ScrollView of the Qt platform. We might need that for plugin
        support in the future.
        * We store the margin's and scrolling flag inside QWebFrame and use it when
        creating the FrameView.
        
        What is missing:
        * API to call pageCache()->setCapacity(XYZ);
        

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::createMainFrame):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):
        (WebCore::FrameLoaderClientQt::blockedError):

2008-04-02  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * For the PageCache support we do not want to create a FrameView in the constructor
        of QWebFrame. In QWegPage::viewportSize() we currently call mainFrame() and that will
        create a QWebFrame if no mainFrame is present and this gets called when we try to
        create a FrameView...
        * Keep a copy of the initial viewportSize around and use it if we do not have a Frame
        or FrameView.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPage::triggerAction):
        * Api/qwebpage_p.h:

2008-04-02  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Always return true in FrameLoaderClientQt::shouldGoToHistoryItem, like the windows port

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::):

2008-04-02  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Attempt to make the m_webFrame null pointer checking consistent. Always check for
        m_webFrame. It should get set by the QWebFrame with the FramerLoaderClientQt::setFrame
        call and should stay valid until the destruction of the QWebFrame.
        * Currently the same checking is not needed for m_frame as it will only set to 0 in
        FrameLoaderClientQt::frameLoaderDestroyed and should be not 0 because of the setFrame
        initialisation.
        

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveTitle):
        (WebCore::FrameLoaderClientQt::setMainDocumentError):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveContentLength):
        (WebCore::FrameLoaderClientQt::objectContentType):
        (WebCore::FrameLoaderClientQt::createPlugin):

2008-04-01  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Get the RefCounting of WebCore::Frame right and make sure that both QWebFrame
        and WebCore::Frame get destroyed if we leave site with subframes and on the
        end of the application.
        * Use adoptRef in FrameLoaderClientQt::createFrame to get the refs right for subframes. We
        do not want to add an extra reference. Without this we are leaking subframes.
        * Assume that the lifetime of a Frame and FrameLoader are the same, when the Frame is gone
        we want to destroy the QWebFrame (e.g. on a page with subframes). Add delete m_webFrame
        in the frameLoaderDestroyed method to do that.
        * If we happen to delete the QWebFrame before the FrameLoaderClientQt we set m_webFrame to
        zero in the FrameLoaderClientQt to avoid bad things.
        

        * Api/qwebframe.cpp:
        (QWebFrame::~QWebFrame):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::shouldGoToHistoryItem):
        (WebCore::FrameLoaderClientQt::objectContentType):
        * WebCoreSupport/FrameLoaderClientQt.h:

2008-04-01  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Do not save a RefPtr to the frame. The FrameLoaderClient, Frame and
        QWebFrame should have the same lifetime everything else is a leak
        or issue.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        * Api/qwebframe_p.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:

2008-04-01  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Do not store the QWebFrame associated with a ScrollView/FrameView
        in the WebCore::Widget.
        * Instead of asking the Widget for the QWebFrame use the QWebFramePrivate::core
        and QWebFramePrivate::kit function to convert from and to QWebFrame.
        

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::createMainFrame):

2008-04-01  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Do not store the FrameView in the QWebFrame and cope with the situation when
        a WebCore::Frame has no WebCore::FrameView.
        

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        (QWebFramePrivate::horizontalScrollBar):
        (QWebFramePrivate::verticalScrollBar):
        (QWebFrame::innerText):
        (QWebFrame::renderTreeDump):
        (QWebFrame::setVerticalScrollBarPolicy):
        (QWebFrame::setHorizontalScrollBarPolicy):
        (QWebFrame::render):
        (QWebFrame::layout):
        (QWebFrame::pos):
        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateEditorActions):
        (QWebPagePrivate::mouseMoveEvent):
        (QWebPagePrivate::mousePressEvent):
        (QWebPagePrivate::mouseDoubleClickEvent):
        (QWebPagePrivate::contextMenuEvent):
        (QWebPagePrivate::wheelEvent):
        (QWebPage::triggerAction):
        * WebCoreSupport/FrameLoaderClientQt.cpp:

2008-04-01  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Change the order of the methods to match with the FrameLoaderClient.h to ease
        removing methods in the future.

        * WebCoreSupport/FrameLoaderClientQt.h:

2008-04-01  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Remove virtuals in the FrameLoaderClientQt that don't exist in the base class.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::detachedFromParent4):
        * WebCoreSupport/FrameLoaderClientQt.h:

2008-03-25  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin

        Remove newly obsolete FrameLoaderClient methods

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        * WebCoreSupport/FrameLoaderClientQt.h:

2008-03-22  Mark Rowe  <mrowe@apple.com>

        Qt build fix.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::):

2008-03-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix the Qt build. Don't return void in non-void functions.

        * Api/qwebpluginfactory.cpp:
        (QWebPluginFactory::extension):

2008-03-16  Thiago Macieira  <thiago.macieira@trolltech.com>

        Reviewed by Simon.

        Don't use RefPtr in classes you haven't seen the implementation of.
        
        Forward-declaration and declaration of RefPtr<Foo> is ok. But you
        cannot *use* said objects until Foo is defined. This is true even for
        initialisation with a 0.
        
        Seems the HP aCC compiler is more strict here than gcc.

        * Api/qwebframe_p.h:

2008-03-14  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build.

        * Api/qwebframe.cpp:
        (QWebFrame::setHtml):
        (QWebFrame::setContent):

2008-03-13  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJSWindowObject):

2008-03-12  Simon Hausmann  <hausmann@webkit.org>

        Fix compilation against Qt 4.3

        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2008-03-11  Rodney Dawes  <dobey@wayofthemonkey.com>

        Fix the Qt build.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (FrameLoaderClientQt::CreatePlugin):

2008-03-11  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build (silly typo).

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):

2008-03-11  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Moved obscuring progress bar to the lower right corner.

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        (MainWindow::resizeEvent):

2008-03-11  Tor Arne Vestbø  <tavestbo@trolltech.com>

        Reviewed by Simon.

        Added reload action and grouped stop and reload actions together.

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):

2008-03-11  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Set a Icon on the QAction if we have one.

        * Api/qwebpage.cpp:
        (QWebPage::action):

2008-03-11  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJSWindowObject):

2008-03-07  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Darin Adler.

        Done with Lars.

        Replaced the QWebObjectPlugin interfaces with QWebPluginFactory.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):
        (QWebNetworkManager::cancel):
        (QWebNetworkManager::started):
        (QWebNetworkManager::data):
        (QWebNetworkManager::finished):
        * Api/qwebnetworkinterface_p.h:
        (QWebNetworkJobPrivate::QWebNetworkJobPrivate):
        * Api/qwebobjectplugin.cpp: Removed.
        * Api/qwebobjectplugin.h: Removed.
        * Api/qwebobjectplugin_p.h: Removed.
        * Api/qwebobjectpluginconnector.cpp: Removed.
        * Api/qwebobjectpluginconnector.h: Removed.
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPage::setPluginFactory):
        (QWebPage::pluginFactory):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebpluginfactory.cpp: Added.
        (QWebPluginFactory::QWebPluginFactory):
        (QWebPluginFactory::~QWebPluginFactory):
        (QWebPluginFactory::refreshPlugins):
        (QWebPluginFactory::extension):
        * Api/qwebpluginfactory.h: Added.
        (MimeType::):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::objectContentType):
        (WebCore::FrameLoaderClientQt::createPlugin):

2008-03-07  Simon Hausmann  <hausmann@webkit.org>

        Fix the Qt build.

        * Api/qwebframe.cpp:

2008-03-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        - Remove all unnecessary includes of JSDOMWindowBase.h, we prefer including
          JSDOMWindow.h

        * Api/qwebframe.cpp:
        (QWebFrame::addToJSWindowObject):

2008-03-04  Mark Rowe  <mrowe@apple.com>

        Another go at fixing the Qt build.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJSWindowObject):

2008-02-24  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        - remove separate client calls for "standard" and "reload' history

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::updateGlobalHistory):
        * WebCoreSupport/FrameLoaderClientQt.h:

2008-02-24  Darin Adler  <darin@apple.com>

        - another try at fixing the build

        * Api/qwebframe.cpp:
        (QWebFrame::load): Replace new FormData with FormData::create.

2008-02-22  Sam Weinig  <sam@webkit.org>

        Fix Qt build.

        * Api/qwebhistoryinterface.cpp:

2008-02-22  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Adam Roben.

        Rid the project of the Devil known as DeprecatedString!

        * Api/qwebhistory.cpp:
        * Api/qwebhistoryinterface.cpp:

2008-02-18  Darin Adler  <darin@apple.com>

        Reviewed by Sam.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequestPrivate::init): Removed use of DeprecatedString.

2008-01-24  David Boddie  <dboddie@trolltech.com>

        Reviewed by Simon.

        Documentation tidying.
        

        * Api/qwebframe.cpp:
        * Api/qwebhistoryinterface.cpp:
        * Api/qwebview.cpp:

2008-01-24  Jarek Kobus  <jkobus@trolltech.com>

        Reviewed by Simon.

        Text for translations were used wrongly as comments
        

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::):
        (WebCore::FrameLoaderClientQt::cannotShowURLError):
        (WebCore::FrameLoaderClientQt::interruptForPolicyChangeError):
        (WebCore::FrameLoaderClientQt::cannotShowMIMETypeError):
        (WebCore::FrameLoaderClientQt::fileDoesNotExistError):
        (WebCore::FrameLoaderClientQt::shouldFallBack):

2008-01-24  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * We have a KURL->QUrl conversion on KURL itself, make use of it.
        * This conversion is supposed to be loss-free
        

        * Api/qwebframe.cpp:

2008-01-23  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        * Rubber stamped by Simon

        * Fix leaking of sub frames (WebCore::Frame). We keep one reference too many.
        This was found while working on the page-cache, other ports are not affected.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):

2008-01-23  Rohan McGovern  <rohan.mcgovern@trolltech.com>

        Reviewed by Simon Hausmann <hausmann@webkit.org>.

        Fix Qtopia compilation with QT_NO_TOOLTIP
        

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::print):

2008-01-23  Geir Vattekar  <gvatteka@trolltech.com>

        Reviewed by Simon.

        Doc: Replaced \code with snippets in the docs
        

        * Api/qwebview.cpp:

2008-01-23  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Tweak key presses even to match commonly expected behavior
        - space key == page down
        - page down moved down not a page, but slightly less then a page so you don't loose your spot when reading.
        - Use font height rather then a hard coded "10" for left, right, up, down
        - Ctrl-Up moves to the top of the page
        - Ctrl-Down move to the bottom of the page
        - Backspace == GoBack
        - Shift-Backspace == GoForward
        

        * Api/qwebpage.cpp:
        (dropActionToDragOp):
        (dragOpToDropAction):
        (QWebPagePrivate::keyPressEvent):

2008-01-23  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Implemented FrameLoaderClient::startDownload() and FrameLoaderClient::download().
        
        Added two signals to QWebPage to handle downloading of links and handling of
        unsupported content.
        

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::download):
        (WebCore::FrameLoaderClientQt::assignIdentifierToInitialRequest):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForMIMEType):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction):
        (WebCore::FrameLoaderClientQt::willUseArchive):

2008-01-22  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        setup a family for cursive and fantasy fonts as well.
        

        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):

2008-01-22  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Implement ChromeClientQt::setToolTip
        Implement ChromeClientQt::mouseDidMoveOverElement
        

        * Api/qwebpage.cpp:
        * Api/qwebpage_p.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::ChromeClientQt):
        (WebCore::ChromeClientQt::focus):
        (WebCore::ChromeClientQt::mouseDidMoveOverElement):
        (WebCore::ChromeClientQt::setToolTip):
        (WebCore::ChromeClientQt::print):
        * WebCoreSupport/ChromeClientQt.h:

2008-01-21  Darin Adler  <darin@apple.com>

        Reviewed by John Sullivan.

        - updated for changes to ChromeClient database functions

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::exceededDatabaseQuota):
        * WebCoreSupport/ChromeClientQt.h:

2008-01-21  Benjamin Meyer  <bmeyer@trolltech.com>

        Reviewed by Simon.

        Change QWebHistoryInterface::addHistoryEntry() from const to non-const
        

        * Api/qwebhistoryinterface.h:

2008-01-21  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Simon.

        * Don't leak the d-pointer in QWebSettings.
        

        * Api/qwebsettings.cpp:
        (QWebSettings::~QWebSettings):

2008-01-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Update the WebKit version number from WebKit/win/WebKit.vcproj/VERSION.
        
        This has the fortunate side-effect that gmail sends us sensible HTML/JS again :)
        

        * Api/qwebpage.cpp:

2008-01-21  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix focus chain handling and cycling through focusable objects (links) using tab/backtab.
        
        * Fix GraphicsContext::drawFocusRing to also draw single focus rects.
        * Implemented QWebPage::focusNextPrevChild by sending fake tab/shift-tab events
        and make the return value depend on whether we successfully determined a focusable
        node or not.
        * Changed QWebView::focusNextPrevChild() to call the base QWidget implementation correctly
        if we could not handle the focus chain ourselves.
        * Changed the focus policy of QWebView to correctly use WheelFocus instead of ClickFocus.
        * Made ChromeClientQt::canTakeFocus() and takeFocus() dummy method since they are only
        used to control the situation of stepping out of the focus chain inside the page.
        * Made inclusion of links in the focus chain configurable through QWebSettings::LinksIncludedInFocusChain.
        The layout tests expect this to be disabled but for the user it seems sensible to have it
        on by default, hence the default in qwebsettings.cpp
        

        * Api/qwebpage.cpp:
        (QWebPage::focusNextPrevChild):
        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):
        * Api/qwebsettings.h:
        * Api/qwebview.cpp:
        (QWebView::QWebView):
        (QWebView::focusNextPrevChild):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::canTakeFocus):
        (WebCore::ChromeClientQt::takeFocus):

2008-01-18  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Coding style fixes and added a comment about the include order.

        * WebKit_pch.h:

2008-01-18  Marius Storm-Olsen  <marius@trolltech.com>

        Reviewed by Simon Hausmann <hausmann@webkit.org>.

        Add use of precompiled header, when building inside Qt.
        
        Compiling WebKit was taking forever; 17 minutes on my machine for _one_ build! Adding the PCH at least brings it down to 12 minutes for one build, for me.
        

        * WebKit_pch.h: Added.

2008-01-18  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Ask the WebCore::IconDatabase only if our URL is not empty. Otherwise
        we will see a crash in a HashSet.
        * It is crashing there because the StringImpl of an empty String is 0.
        * We avoid this crash by checking for isEmpty() in WebKit as there is no
        use to ask the iconDatabase for an empty string. We will fallback to the
        defaultIcon.
        

        * Api/qwebframe.cpp:
        (QWebFrame::icon):

2008-01-17  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Minor documentation fixes
        

        * Api/qwebframe.cpp:
        * Api/qwebview.cpp:

2008-01-17  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Lars.

        Fix form elements not focusing correctly after the qt widget lost its focus.
        
        When receiving a focus out event notify the focus controller. Otherwise its
        m_focusedFrame variable remains unchanged and setFocusedFrame on a focusIn
        event shortcuts and doesn't call setActive(true).
        

        * Api/qwebpage.cpp:

2008-01-17  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Holger.

        Lots of updates to the documentation.
        

        * Api/qwebframe.cpp:
        * Api/qwebhistory.cpp:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::dropEvent):
        (QWebPage::history):
        (openNewWindow):
        (QWebPage::triggerAction):
        (QWebPage::viewportSize):
        (QWebPage::navigationRequested):
        (QWebPage::action):
        (QWebPage::event):
        (QWebPageContext::targetFrame):
        * Api/qwebpage.h:
        * Api/qwebview.cpp:

2008-01-17  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Lars.

        Added a urlChanged signals to QWebFrame and QWebView.
        

        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * Api/qwebview.cpp:
        (QWebView::setPage):
        * Api/qwebview.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:

2008-01-17  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Lars.

        Fixed docs and sanity checks in QWebSettings::setIconDatabaseEnabled
        

        * Api/qwebsettings.cpp:
        (QWebSettings::setIconDatabaseEnabled):

2008-01-17  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Lars.

        Added QWebView::createWindow() which is forwarded from QWebPage::createWindow() for convenience.
        

        * Api/qwebpage.cpp:
        (QWebPage::createWindow):
        * Api/qwebview.cpp:
        (QWebView::createWindow):
        * Api/qwebview.h:

2008-01-17  Lars Knoll  <lars@trolltech.com>

        Reviewed by Lars.

        add a 0 pointer check.

        Fixes a crash in the demo web browser.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForMIMEType):

2008-01-17  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix QWebFrame::title().
        
        For the titleChanged() signal we use the documentloader's title. For the property we have to use the same
        instead of Document::title() as the latter is not trimmed and not suited for a window caption.
        

        * Api/qwebframe.cpp:
        (QWebFrame::title):

2008-01-17  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Maciej, Lars, Holger.

        http://bugs.webkit.org/show_bug.cgi?id=16589

        Add a document parameter to WebCore::cookies, setCookies and cookiesEnabled.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequestPrivate::init):
        (QWebNetworkManager::started):

2008-01-17  Warwick Allison  <warwick@trolltech.com>

        Reviewed by Simon Hausmann <hausmann@webkit.org>.

        Follow QWidget::keyPressEvent advice and call parents.
        
        Without this, Back does not work in Qtopia, for example.
        

        * Api/qwebview.cpp:
        (QWebView::keyPressEvent):
        (QWebView::keyReleaseEvent):

2008-01-17  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Fix compilation against Qt 4.3 after the recent KURL <> QUrl conversion fixes.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::started):

2008-01-17  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Holger.

        Fix compilation against Qt 4.4 without files that are specific for the Qt 4.3 build.
        

        * Api/qwebframe.cpp:
        * Api/qwebpage.cpp:
        * WebCoreSupport/FrameLoaderClientQt.cpp:

2008-01-17  Lincoln Ramsay  <lincoln.ramsay@trolltech.com>

        Reviewed by Simon Hausmann <hausmann@webkit.org>.

        Fixes compilation with QT_NO_DRAGANDDROP
        

        * Api/qwebpage.cpp:
        (QWebPage::event):
        * Api/qwebview.cpp:
        (QWebView::dragEnterEvent):
        (QWebView::dragLeaveEvent):
        (QWebView::dragMoveEvent):
        (QWebView::dropEvent):

2008-01-17  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Fix compilation, removed obsolete privateBrowsingEnabled() method.

        * WebCoreSupport/FrameLoaderClientQt.cpp:

2008-01-16  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon Hausmann <simon.hausmann@trolltech.com>.

        Removed a whole bunch of notImplemented() warnings.
        
        I don't want to hide the real warnings in lots of things that
        I am by now pretty certain we won't need.
        

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchWillSubmitForm):
        (WebCore::FrameLoaderClientQt::canShowMIMEType):

2008-01-16  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Fix crash when bringing up the context menu on maps.google.com.
        
        If the website provides its own context menu then we don't have a ContextMenu pointer.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::contextMenuEvent):

2008-01-16  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Holger.

        Don't crash when receiving all sorts of events on a default constructed QWebView without a page.

        * Api/qwebview.cpp:
        (QWebView::mouseMoveEvent):
        (QWebView::mousePressEvent):
        (QWebView::mouseDoubleClickEvent):
        (QWebView::mouseReleaseEvent):
        (QWebView::contextMenuEvent):
        (QWebView::wheelEvent):
        (QWebView::keyPressEvent):
        (QWebView::keyReleaseEvent):
        (QWebView::focusInEvent):
        (QWebView::focusOutEvent):
        (QWebView::dragEnterEvent):
        (QWebView::dragLeaveEvent):
        (QWebView::dragMoveEvent):
        (QWebView::dropEvent):
        (QWebView::focusNextPrevChild):

2008-01-16  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Made the url property read-write.

        * Api/qwebview.h:

2008-01-16  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Don't crash when showing a default initialized QWebView that has no page/frame yet.

        * Api/qwebview.cpp:
        (QWebView::paintEvent):

2008-01-16  Holger Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        Change hoveringOverLink implementation to have less issues.
        
        * Currently we only compare a pointer. In the worst case we
        could delete the Element we have pointed to and a new one
        gets the same address. But even if that doesn't happen the
        WebCore::Element is mutable and JavaScript could change the
        URL, Title or Content. So we have to compare all these three
        attributes.
        * This does not seem to be a performance impact.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::mouseMoveEvent):
        * Api/qwebpage_p.h:

2008-01-16  Holger Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Move the hoverElement from QWebFrame to QWebPage. As it is
        only used there.
        

        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::mouseMoveEvent):
        * Api/qwebpage_p.h:

2008-01-16  Holger Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        EventHandler changes/fixes in QWebPage:
        -mouse{Press,Move,Release}Event:
        Send the event always to the mainFrame of the QWebPage.
        
        -contextMenuEvent, key{Press,Release}Event:
        Send the event to the focused frame.
        
        This is following the Windows port and fixes a issue with the
        Web Inspector where we were sending the events to a wrong frame.
        
        It is guaranteed that the mainFrame will always have an eventHandler
        and frameView set. There is no need to check for this in QWebPage.
        

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateEditorActions):
        (QWebPagePrivate::mouseMoveEvent):
        (QWebPagePrivate::mousePressEvent):
        (QWebPagePrivate::mouseDoubleClickEvent):
        (QWebPagePrivate::mouseReleaseEvent):
        (QWebPagePrivate::contextMenuEvent):
        (QWebPagePrivate::wheelEvent):
        (QWebPagePrivate::keyPressEvent):
        (QWebPagePrivate::keyReleaseEvent):
        (QWebPagePrivate::focusInEvent):
        * Api/qwebpage_p.h:

2008-01-16  Holger Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Add core and kit functions to QWebFramePrivate to convert from
        QWebFrame to WebCore::Frame and vice versa.
        

        * Api/qwebframe.cpp:
        (QWebFramePrivate::core):
        (QWebFramePrivate::kit):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:

2008-01-16  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        add conversion methods from and to QUrl to KURL.
        
        Use them in the places I found at the moment. Fixes a bug
        where form data was encoded twice.
        Also fix QWebSettings to take a QUrl for the user style sheet
        location.
        

        * Api/qwebframe.cpp:
        (QWebFrame::load):
        * Api/qwebpage.cpp:
        (QWebPage::createPlugin):
        (frameLoadRequest):
        (QWebPage::triggerAction):
        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        * Api/qwebsettings.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createWindow):
        (WebCore::ChromeClientQt::show):

2008-01-16  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Lars.

        * Make the InspectorClientView inherit from QWebView instead of QWidget. This
        way paintEvent, mouse{Press,Release}Event and other events get forwarded to
        the QWebPage/WebInspector automatically.
        

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientWebPage::createWindow):
        (WebCore::InspectorClientView::InspectorClientView):

2008-01-10  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam.

        - remove SecurityOriginData and fold its functionality into SecurityOrigin

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::requestQuotaIncreaseForNewDatabase):
        (WebCore::ChromeClientQt::requestQuotaIncreaseForDatabaseOperation):
        * WebCoreSupport/ChromeClientQt.h:

2008-01-10  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        document QWebHistory
        

        * Api/qwebhistory.cpp:
        (QWebHistoryItem::QWebHistoryItem):
        (QWebHistoryItem::operator=):
        (QWebHistoryItem::~QWebHistoryItem):
        (QWebHistoryItem::originalUrl):
        (QWebHistoryItem::currentUrl):
        (QWebHistoryItem::title):
        (QWebHistoryItem::icon):
        (QWebHistory::canGoBack):
        (QWebHistory::canGoForward):
        (QWebHistory::goBack):
        (QWebHistory::goForward):
        (QWebHistory::goToItem):
        * Api/qwebhistory.h:

2008-01-10  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Make the reset() functions not do anything on the default QWebSettings object.
        

        * Api/qwebsettings.cpp:
        (QWebSettings::resetFontSize):
        (QWebSettings::resetFontFamily):
        (QWebSettings::clearAttribute):

2008-01-10  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        rename QWebPageHistory to QWebHistory.
        

        * Api/qwebhistory.cpp: Added.
        (QWebHistoryItem::QWebHistoryItem):
        (QWebHistoryItem::operator=):
        (QWebHistoryItem::~QWebHistoryItem):
        (QWebHistoryItem::originalUrl):
        (QWebHistoryItem::currentUrl):
        (QWebHistoryItem::title):
        (QWebHistoryItem::lastVisited):
        (QWebHistoryItem::icon):
        (QWebHistory::QWebHistory):
        (QWebHistory::~QWebHistory):
        (QWebHistory::clear):
        (QWebHistory::items):
        (QWebHistory::backItems):
        (QWebHistory::forwardItems):
        (QWebHistory::canGoBack):
        (QWebHistory::canGoForward):
        (QWebHistory::goBack):
        (QWebHistory::goForward):
        (QWebHistory::goToItem):
        (QWebHistory::backItem):
        (QWebHistory::currentItem):
        (QWebHistory::forwardItem):
        (QWebHistory::itemAtIndex):
        * Api/qwebhistory.h: Added.
        * Api/qwebhistory_p.h: Added.
        (QWebHistoryItemPrivate::QWebHistoryItemPrivate):
        (QWebHistoryItemPrivate::~QWebHistoryItemPrivate):
        (QWebHistoryPrivate::QWebHistoryPrivate):
        (QWebHistoryPrivate::~QWebHistoryPrivate):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebpagehistory.cpp: Removed.
        * Api/qwebpagehistory.h: Removed.
        * Api/qwebpagehistory_p.h: Removed.
        * Api/qwebview.cpp:
        * Api/qwebview.h:

2008-01-10  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Documentation for QWebSettings
        

        * Api/qwebsettings.cpp:
        (QWebSettings::~QWebSettings):
        (QWebSettings::setFontSize):
        (QWebSettings::resetFontSize):
        (QWebSettings::setUserStyleSheetLocation):
        (QWebSettings::userStyleSheetLocation):
        (QWebSettings::iconDatabaseEnabled):
        (QWebSettings::webGraphic):
        (QWebSettings::setFontFamily):
        (QWebSettings::resetFontFamily):
        (QWebSettings::setAttribute):

2008-01-10  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Document QWebHistoryInterface.
        

        * Api/qwebhistoryinterface.cpp:
        (QWebHistoryInterface::defaultInterface):
        (QWebHistoryInterface::~QWebHistoryInterface):

2008-01-10  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Documentation for QWebFrame.
        

        * Api/qwebframe.cpp:
        (QWebFrame::url):
        (QWebFrame::name):
        (QWebFrame::page):
        (QWebFrame::setHtml):
        (QWebFrame::parentFrame):
        (QWebFrame::render):
        (QWebFrame::pos):
        (QWebFrame::geometry):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:

2008-01-10  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        fix the drawing errors that where introduced due to refactoring.
        
        Correctly clip to the rectangle we want to draw in ScrollView::paint().
        

        * Api/qwebframe.cpp:
        (QWebFrame::render):
        * Api/qwebframe.h:
        * Api/qwebview.cpp:
        (QWebView::paintEvent):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::scrollBackingStore):

2008-01-10  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Added a whole bunch of docs for QWebPage and fixed some minor doc glitches in QWebView.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::dropEvent):
        (QWebPage::QWebPage):
        (QWebPage::~QWebPage):
        (QWebPage::mainFrame):
        (QWebPage::currentFrame):
        (QWebPage::history):
        (QWebPage::setView):
        (QWebPage::view):
        (QWebPage::javaScriptConsoleMessage):
        (QWebPage::javaScriptAlert):
        (QWebPage::javaScriptConfirm):
        (QWebPage::javaScriptPrompt):
        (QWebPage::createWindow):
        (QWebPage::createModalDialog):
        (openNewWindow):
        (QWebPage::triggerAction):
        (QWebPage::viewportSize):
        (QWebPage::navigationRequested):
        (QWebPage::selectedText):
        (QWebPage::isModified):
        (QWebPage::focusNextPrevChild):
        (QWebPage::settings):
        (QWebPage::networkProxy):
        (QWebPage::setNetworkAccessManager):
        (QWebPage::networkAccessManager):
        (QWebPagePrivate::_q_onLoadProgressChanged):
        * Api/qwebview.cpp:

2008-01-07  Holger Freyther  <zecke@selfish.org>

        Reviewed by Alp Toker.

        * Qt and Gtk must know if a ContextMenuItem is checkable. Add a new ContextMenuItemType for checkable
        actions.
        * Use this information in the Gtk platform to create a GtkCheckMenuItem when needed.
        * Update the ContextMenuController to accept CheckableActionTypes as well.
        * Change ContextMenu.cpp to use the CheckableActionType. The information if a item is checkable
        was extracted from ContextMenu::checkOrEnableIfNeeded.
        * Update the Qt and Windows port.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createContextMenu):

2008-01-07  Simon Hausmann  <hausmann@webkit.org>

        Build fix for the Windows build. MSVC wants to see the full
        declaration of arguments even when just passing them through.

        * Api/qwebpage.cpp:

2008-01-07  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Added the missing parameters to make it possible to do POST operations from the public API.
        
        This is ugly though as it also requires including qnetworkaccessmanager.h. It would be nicer if the
        two extra arguments were in QNetworkRequest :-/
        

        * Api/qwebframe.cpp:
        (QWebFrame::load):
        * Api/qwebframe.h:
        * Api/qwebview.cpp:
        (QWebView::load):
        * Api/qwebview.h:

2008-01-07  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Ported of the network backend of the Qt platform to Qt 4.4's new networking API.
        

        * Api/qwebframe.cpp:
        (QWebFrame::load):
        * Api/qwebframe.h:
        * Api/qwebnetworkinterface.cpp:
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        * Api/qwebobjectplugin.cpp:
        * Api/qwebobjectplugin.h:
        * Api/qwebobjectplugin_p.h:
        * Api/qwebobjectpluginconnector.cpp:
        * Api/qwebobjectpluginconnector.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::~QWebPagePrivate):
        (QWebPagePrivate::navigationRequested):
        (QWebPage::setNetworkInterface):
        (QWebPage::networkInterface):
        (QWebPage::setNetworkAccessManager):
        (QWebPage::networkAccessManager):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        * Api/qwebview.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):
        (WebCore::FrameLoaderClientQt::objectContentType):
        (WebCore::FrameLoaderClientQt::createPlugin):

2008-01-07  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Move the QWebPagePrivate methods up to the other private ones

        * Api/qwebpage.cpp:
        (dropActionToDragOp):
        (dragOpToDropAction):
        (QWebPagePrivate::mouseMoveEvent):
        (QWebPagePrivate::mousePressEvent):
        (QWebPagePrivate::mouseDoubleClickEvent):
        (QWebPagePrivate::mouseReleaseEvent):
        (QWebPagePrivate::contextMenuEvent):
        (QWebPagePrivate::wheelEvent):
        (QWebPagePrivate::keyPressEvent):
        (QWebPagePrivate::keyReleaseEvent):
        (QWebPagePrivate::focusInEvent):
        (QWebPagePrivate::focusOutEvent):
        (QWebPagePrivate::dragEnterEvent):
        (QWebPagePrivate::dragLeaveEvent):
        (QWebPagePrivate::dragMoveEvent):
        (QWebPagePrivate::dropEvent):
        (QWebPage::focusNextPrevChild):

2008-01-07  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Add reimplemented comments for the methods reimplemented in QWebView and QWebPage.
        

        * Api/qwebpage.cpp:
        (dragOpToDropAction):
        * Api/qwebview.cpp:
        (QWebView::mouseMoveEvent):
        (QWebView::mousePressEvent):
        (QWebView::mouseDoubleClickEvent):
        (QWebView::mouseReleaseEvent):
        (QWebView::contextMenuEvent):
        (QWebView::keyPressEvent):
        (QWebView::keyReleaseEvent):
        (QWebView::focusInEvent):
        (QWebView::focusOutEvent):
        (QWebView::dragEnterEvent):
        (QWebView::dragLeaveEvent):
        (QWebView::dragMoveEvent):
        (QWebView::dropEvent):

2008-01-07  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Lars.

        * This layout is not needed anymore as Widget::invalidateRect will not
        draw anymore.
        

        * Api/qwebview.cpp:
        (QWebView::paintEvent):

2008-01-04  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Remove most dependencies of Widget/ScrollView onto native QWidgets.
        
        This also brings the code closer in line with the Windows code. Seems
        to work nicely on first try :)
        

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::updateBackingStore):
        (WebCore::ChromeClientQt::mouseDidMoveOverElement):
        (WebCore::ChromeClientQt::setToolTip):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2008-01-04  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Remove the todo from QWebPage and move the code to QWebView.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::wheelEvent):
        (QWebPagePrivate::focusInEvent):
        * Api/qwebview.cpp:
        (QWebView::wheelEvent):
        (QWebView::focusInEvent):

2008-01-04  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Move the various event methods to QWebPagePrivate. This is similar to
        QTextControl as well.
        

        * Api/qwebpage.cpp:
        (QWebPage::event):
        (QWebPagePrivate::mouseMoveEvent):
        (QWebPagePrivate::mousePressEvent):
        (QWebPagePrivate::mouseDoubleClickEvent):
        (QWebPagePrivate::mouseReleaseEvent):
        (QWebPagePrivate::contextMenuEvent):
        (QWebPagePrivate::wheelEvent):
        (QWebPagePrivate::keyPressEvent):
        (QWebPagePrivate::keyReleaseEvent):
        (QWebPagePrivate::focusInEvent):
        (QWebPagePrivate::focusOutEvent):
        (QWebPage::focusNextPrevChild):
        (QWebPagePrivate::dragEnterEvent):
        (QWebPagePrivate::dragLeaveEvent):
        (QWebPagePrivate::dragMoveEvent):
        (QWebPagePrivate::dropEvent):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2008-01-04  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Forward the event from QWebView to QWebPage through QObject::event. This
        is similar to the way QTextControl is working.
        

        * Api/qwebpage.cpp:
        (dragOpToDropAction):
        (QWebPage::event):
        * Api/qwebpage.h:
        * Api/qwebview.cpp:
        (QWebView::mouseMoveEvent):
        (QWebView::mousePressEvent):
        (QWebView::mouseDoubleClickEvent):
        (QWebView::mouseReleaseEvent):
        (QWebView::contextMenuEvent):
        (QWebView::wheelEvent):
        (QWebView::keyPressEvent):
        (QWebView::keyReleaseEvent):
        (QWebView::focusInEvent):
        (QWebView::focusOutEvent):
        (QWebView::dragEnterEvent):
        (QWebView::dragLeaveEvent):
        (QWebView::dragMoveEvent):
        (QWebView::dropEvent):
        * Api/qwebview.h:

2008-01-04  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        make QWebPage a QObject and get things to compile.
        
        Nothing works currently though.
        

        * Api/qwebobjectpluginconnector.cpp:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::createMainFrame):
        (QWebPage::QWebPage):
        (QWebPage::setView):
        (QWebPage::view):
        (QWebPage::javaScriptAlert):
        (QWebPage::javaScriptPrompt):
        (dragOpToDropAction):
        (QWebPage::mousePressEvent):
        (QWebPage::mouseDoubleClickEvent):
        (QWebPage::mouseReleaseEvent):
        (QWebPage::wheelEvent):
        (QWebPage::keyPressEvent):
        (QWebPage::focusInEvent):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebview.cpp:
        (QWebView::QWebView):
        (QWebView::setPage):
        (QWebView::resizeEvent):
        (QWebView::paintEvent):
        * Api/qwebview.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::windowRect):
        (WebCore::ChromeClientQt::pageRect):
        (WebCore::ChromeClientQt::focus):
        (WebCore::ChromeClientQt::unfocus):
        (WebCore::ChromeClientQt::canTakeFocus):
        (WebCore::ChromeClientQt::takeFocus):
        (WebCore::ChromeClientQt::canRunModal):
        (WebCore::ChromeClientQt::mouseDidMoveOverElement):
        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::DragClientQt::startDrag):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):
        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientWebPage::createWindow):
        (WebCore::InspectorClientView::InspectorClientView):
        (WebCore::InspectorClientView::page):
        (WebCore::InspectorClientView::hideEvent):
        (WebCore::InspectorClientView::closeEvent):
        (WebCore::InspectorClientQt::createPage):
        (WebCore::InspectorClientQt::closeWindow):

2008-01-04  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Added some preliminary class documentation for QWebView, fixed a missing const() and some missing Q_PROPERTYs
        

        * Api/qwebview.cpp:
        (QWebView::setHtml):
        (QWebView::setContent):
        (QWebView::history):
        (QWebView::settings):
        (QWebView::action):
        (QWebView::triggerAction):
        (QWebView::stop):
        (QWebView::backward):
        (QWebView::forward):
        (QWebView::reload):
        * Api/qwebview.h:

2008-01-04  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        add a viewportSize to QWebPage.
        
        This is required to eventually make it a QObject only.
        

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction):
        (QWebPage::viewportSize):
        (QWebPage::setViewportSize):
        * Api/qwebpage.h:

2008-01-04  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        take a QString as identifier in QWebFrame::addToJSWindowObject.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJSWindowObject):
        * Api/qwebframe.h:

2008-01-04  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Call the frame arguments for the javascript callbacks "originatingFrame"
        

        * Api/qwebpage.h:

2008-01-04  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Moved the QWebPage::addToHistory signal into QWebHistoryInterface
        

        * Api/qwebhistoryinterface.h:
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::updateGlobalHistoryForStandardLoad):

2008-01-04  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        moved title(), url(), icon() and initialLayoutComplete() from QWebPage to QWebFrame

        * Api/qwebframe.cpp:
        (QWebFrame::url):
        (QWebFrame::icon):
        (QWebFrame::setVerticalScrollBarPolicy):
        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        (QWebPage::javaScriptAlert):
        (QWebPage::javaScriptPrompt):
        (QWebPage::networkInterface):
        * Api/qwebpage.h:
        * Api/qwebview.cpp:
        (QWebView::title):
        (QWebView::url):
        (QWebView::icon):
        * WebCoreSupport/FrameLoaderClientQt.cpp:

2008-01-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Moved QWebPage::open to QWebFrame::load and added setHtml.
        

        * Api/qwebframe.cpp:
        (QWebFrame::load):
        (QWebFrame::setHtml):
        (QWebFrame::setContent):
        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * Api/qwebview.cpp:
        (QWebView::load):
        (QWebView::setHtml):
        * Api/qwebview.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createWindow):
        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::createPage):

2008-01-03  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Lars.

        Added the first revision of QWebView and started moving functionality from QWebPave over to QWebView and QWebFrame.
        

        * Api/headers.pri:
        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::createMainFrame):
        * Api/qwebpage.h:
        * Api/qwebpagehistory.h:
        * Api/qwebview.cpp: Added.
        (QWebView::QWebView):
        (QWebView::~QWebView):
        (QWebView::page):
        (QWebView::setPage):
        (QWebView::load):
        (QWebView::setHtml):
        (QWebView::history):
        (QWebView::settings):
        (QWebView::title):
        (QWebView::url):
        (QWebView::icon):
        (QWebView::selectedText):
        (QWebView::action):
        (QWebView::triggerAction):
        (QWebView::isModified):
        (QWebView::textInteractionFlags):
        (QWebView::setTextInteractionFlags):
        (QWebView::sizeHint):
        (QWebView::stop):
        (QWebView::backward):
        (QWebView::forward):
        (QWebView::reload):
        * Api/qwebview.h: Added.
        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        (MainWindow::webPage):
        (MainWindow::changeLocation):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setFrame):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-12-14  Darin Adler  <darin@apple.com>

        Reviewed by Alexey.

        * Api/qwebpage.cpp:
        (QWebPage::triggerAction): Removed some use of Editor member functions we plan
        to eventually eliminate. Switch from Editor::execCommand to Editor::command.
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent): Ditto. Also updated name from
        MoveUpByPageAndModifyCaret to MovePageUp and from MoveDownByPageAndModifyCaret
        to MovePageDown.

2007-12-12  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig

        As part of doing some CachedPage and client cleanup, keep Qt building

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::savePlatformDataToCachedPage):
        (WebCore::FrameLoaderClientQt::transitionToCommittedFromCachedPage):
        (WebCore::FrameLoaderClientQt::transitionToCommittedForNewPage):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-12-12  Sam Weinig  <sam@webkit.org>

        Build fix.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::userAgent):

2007-12-12  Sam Weinig  <sam@webkit.org>

        Build fix.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequestPrivate::init):
        * Api/qwebpage.cpp:
        (QWebPage::url):
        (QWebPageContext::QWebPageContext):
        * Api/qwebpagehistory.cpp:
        (QWebHistoryItem::originalUrl):
        (QWebHistoryItem::currentUrl):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::cannotShowURLError):
        (WebCore::FrameLoaderClientQt::interruptForPolicyChangeError):
        (WebCore::FrameLoaderClientQt::cannotShowMIMETypeError):
        (WebCore::FrameLoaderClientQt::fileDoesNotExistError):
        (WebCore::FrameLoaderClientQt::dispatchWillSendRequest):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveResponse):
        (WebCore::FrameLoaderClientQt::createPlugin):

2007-12-07  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        <rdar://problem/5535636>
        Have to press 4 times instead of 2 times to get the expected result of ^^ with german keyboard.

        http://bugs.webkit.org/show_bug.cgi?id=13916
        JavaScript detects Tab as a character input on a textfield validation

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyboardEvent):
        (WebCore::EditorClientQt::handleInputMethodKeydown):
        * WebCoreSupport/EditorClientQt.h:
        Updated for cross-platform changes as much as it was possible without a Qt build environment.

2007-12-07  Darin Adler  <darin@apple.com>

        - try to fix build

        * Api/qwebhistoryinterface.cpp:
        (WebCore::historyContains): There's a WebCore function here in WebKit! Needs to
        be updated, since WebCore changed, but this should not be here.

2007-12-04  Darin Adler  <darin@apple.com>

        Reviewed by Kevin Decker.

        * WebCoreSupport/FrameLoaderClientQt.cpp: Removed obsolete privateBrowsingEnabled.
        * WebCoreSupport/FrameLoaderClientQt.h: Ditto.

2007-12-04  Holger Hans Peter Freyther <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Implement the InspectorClient for the Qt port
        * It does not support highlighting of nodes yet
        * Use QRC to open the internal page. The important thing is the
        '/' in the URL to make WebCore::Document::completeURL behave the
        way we want.
        * To make the InspectorClient work we will have to mark qrc as secure.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * Api/qwebpage.h:
        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientWebPage::hideEvent):
        (WebCore::InspectorClientQt::InspectorClientQt):
        (WebCore::InspectorClientQt::inspectorDestroyed):
        (WebCore::InspectorClientQt::createPage):
        (WebCore::InspectorClientQt::localizedStringsURL):
        (WebCore::InspectorClientQt::showWindow):
        (WebCore::InspectorClientQt::closeWindow):
        (WebCore::InspectorClientQt::attachWindow):
        (WebCore::InspectorClientQt::detachWindow):
        * WebCoreSupport/InspectorClientQt.h:

2007-12-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Rubber stamped by Mark.

        Always include config.h at the beginning of the file.

        * Api/qwebsettings.cpp:

2007-12-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Avoid crashes by making sure everything is layouted before
        we start painting. This avoids a crash in Widget::invalidateRect
        because QPainter::begin would fail
        * The QWebFrame::layout() methods and calls are left untouched because
        this would be an API decision.
        

        * Api/qwebframe.cpp:
        (QWebFrame::layout):
        * Api/qwebpage.cpp:
        (QWebPage::paintEvent):

2007-12-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * SubClass QWebPage to handle hide and close events.
        * Forward these events to the InspectorController
        * The other options would have been using an eventFilter
        on the webpage and making InspectorClient a QObject or
        creating a QObject Observer.
        * Provide a simple QWebPage* createWindow implementation. This is needed
        to make FrameLoaderClientQt::dispatchCreatePage stop crashing in the case
        of the inspector client.
        

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientWebPage::InspectorClientWebPage):
        (WebCore::InspectorClientWebPage::createWindow):
        (WebCore::InspectorClientWebPage::hideEvent):
        (WebCore::InspectorClientWebPage::closeEvent):
        (WebCore::InspectorClientQt::createPage):

2007-12-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Allow adding the Inspect ContextMenuItem to our Menu
        * Open the Inspector when Inspect was activated. This requires
        that we keep the innerNonSharedNode from the HitTest around. This
        forces us to include <wtf/RefPtr.h> in the private header. It is
        the first non Qt header but should be okay.
        

        * Api/qwebpage.cpp:
        (webActionForContextMenuAction):
        (QWebPage::triggerAction):
        (QWebPage::action):
        (QWebPageContext::QWebPageContext):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2007-12-03  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Add the Developer Extras to the WebAttribute and propagate it
        to WebCore::Settings. This will enable the Inspect Element menu item
        * CodingStyle fixes in QWebSettings
        * Enable the Developer Extras in the QtLauncher
        

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        * Api/qwebsettings.h:
        * QtLauncher/main.cpp:
        (main):

2007-12-03  Geoffrey Garen  <ggaren@apple.com>

        Removed unnecessary and possibly incorrect #include from my last 
        check-in.

        * Api/qwebframe.cpp:

2007-12-03  Geoffrey Garen  <ggaren@apple.com>

        Qt build fix: Get globalExec() from the right place.

2007-11-30  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Simon.

        * Self destruct the clients like the ohter ports do
        

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::runBeforeUnloadConfirmPanel):
        * WebCoreSupport/ContextMenuClientQt.cpp:
        * WebCoreSupport/DragClientQt.cpp:
        * WebCoreSupport/EditorClientQt.cpp:
        * WebCoreSupport/InspectorClientQt.cpp:

2007-11-29  Brady Eidson  <beidson@apple.com>

        Keep it building with new client method

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::requestQuotaIncreaseForNewDatabase):
        (WebCore::ChromeClientQt::requestQuotaIncreaseForDatabaseOperation):
        * WebCoreSupport/ChromeClientQt.h:

2007-11-22  Simon Hausmann  <hausmann@webkit.org>

        Reviewed by Adam Treat.

        Fix compilation (don't define notImplemented twice)

        * Api/qwebnetworkinterface.cpp:

2007-11-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by George.

        Use Q_SIGNALS/Q_SLOTS in the public API

        * Api/qwebframe.h:
        * Api/qwebpage.h:

2007-11-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by George.

        Fixed the signature of the QWebPage constructor to follow Qt guidelines.

        * Api/qwebpage.h:

2007-11-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by George.

        Use <QtModule/headerfile.h> instead of <Classname> in public HEADER files, to not require the include paths for the other modules to be present

        * Api/qcookiejar.h:
        * Api/qwebframe.h:
        * Api/qwebhistoryinterface.h:
        * Api/qwebnetworkinterface.h:
        * Api/qwebobjectplugin.h:
        * Api/qwebobjectplugin_p.h:
        * Api/qwebobjectpluginconnector.h:
        * Api/qwebpage.h:
        * Api/qwebpagehistory.h:
        * Api/qwebsettings.h:

2007-11-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by George.

        Removed inline copy of QExplicitlySharedDataPointer. This is not needed anymore since we require Qt >= 4.3.0.

        * Api/qwebpagehistory.h:

2007-11-22  George Staikos  <staikos@kde.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        Fix license headers
        

        * Api/qwebobjectplugin.cpp:
        * Api/qwebobjectplugin.h:
        * Api/qwebobjectpluginconnector.cpp:
        * Api/qwebobjectpluginconnector.h:

2007-11-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by George Staikos <staikos@kde.org>.

        Fix shadowing of "page" variable that is passed as argument as well as a member variable.
        
        This also fixes compilation with gcc 4.3.
        

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):

2007-11-21  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Simon.

        * Connect up the signal for all subframes too.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::createMainFrame):

2007-11-20  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Adam Treat <adam.treat@torchmobile.com>.

        Remove static linkage of QtWebKit against the ICO image format plugin.
        
        Instead build the support for the ICO image format as a proper standalone qt image format plugin and install it.
        

        * Plugins/Plugins.pro:

2007-11-20  Simon Hausmann  <hausmann@kde.org>

        Reviewed by George Staikos <staikos@kde.org>.

        Added a default argument to textContent for the hoveringOverLink signal to keep existing two-argument connections working
        

        * Api/qwebpage.h:

2007-11-20  George Staikos  <staikos@kde.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        Add an argument to pass the link text in the hovering signal
        

        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::createMainFrame):
        (QWebPage::mouseMoveEvent):
        * Api/qwebpage.h:

2007-11-20  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Simon and George.

        * Be quiet and allow suppression of NotImplemented calls at runtime.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::representationExistsForURLScheme):

2007-11-19  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Simon.

        * Don't segfault when event pos is outside of the widget.

        * Api/qwebpage.cpp:
        (QWebPage::mouseMoveEvent):
        (QWebPage::mousePressEvent):
        (QWebPage::mouseDoubleClickEvent):
        (QWebPage::mouseReleaseEvent):
        (QWebPage::contextMenuEvent):

2007-11-17  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Mark Rowe.

        Bug 13470: i18n: The Web Inspector is not localizable
        http://bugs.webkit.org/show_bug.cgi?id=13470

        * WebCoreSupport/InspectorClientQt.cpp:
        (WebCore::InspectorClientQt::localizedStringsURL): Empty stub.
        * WebCoreSupport/InspectorClientQt.h: Added localizedStringsURL.

2007-11-13  Geoffrey Garen  <ggaren@apple.com>

        Build fix: changed Shared to RefCounted.

        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/ContextMenuClientQt.cpp:
        * WebCoreSupport/ContextMenuClientQt.h:
        * WebCoreSupport/EditorClientQt.h:
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-11-10  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Nikolas.

        When populating the context menu with sub-menus don't add sub-menus if they're empty.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createContextMenu):

2007-11-10  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Nikolas.

        Added support for the Bold/Italic/Underline toggle actions.
        

        * Api/qwebpage.cpp:
        (webActionForContextMenuAction):
        (QWebPage::triggerAction):
        (QWebPage::action):
        * Api/qwebpage.h:

2007-11-10  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Nikolas.

        Before adding an action to the context menu call checkOrEnableIfNeeded for each action
        to update the enable/checked state correctly.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createContextMenu):
        (QWebPage::contextMenuEvent):
        * Api/qwebpage_p.h:

2007-11-10  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Nikolas.

        Mark the text direction actions as checkable actions.
        

        * Api/qwebpage.cpp:
        (QWebPage::action):

2007-11-09  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Holger.

        Implemented the webcore actions for changing the text direction.
        

        * Api/qwebpage.cpp:
        (webActionForContextMenuAction):
        (QWebPage::triggerAction):
        (QWebPage::action):
        * Api/qwebpage.h:

2007-11-09  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Holger.

        Fix ContextMenu allocation in the Qt port.
        
        Store all items and submenus value based in ContextMenu and ContextMenuItem.
        That fixes the crashes when the context menu was populated with sub-menus because
        of the use of temporary ContextMenu objects like this:
        
        ContextMenu subMenu(...);
        subMenu.appendItem(...);
        subMenu.appendItem(...);
        
        subMenuItem.setSubMenu(&subMenu); // temporary pointer, need to _copy_ contents
        

        * Api/qwebpage.cpp:
        (QWebPage::contextMenuEvent):
        * Api/qwebpage_p.h:

2007-11-09  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Holger.

        Renamed QWebPage::NumWebActions to QWebPage::WebActionCount (for consistency) and fixed its value.
        

        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2007-11-08  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Sam.

        - windowObjectCleared() is no longer const.  It needs to setup the
        script debugger and cannot be const to do so.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::windowObjectCleared):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-11-08  Simon Hausmann  <hausmann@kde.org>

        Reviewed by nobody (well, Holger knows about it), build fix for Qt 4.3.

        The buildbots use Qt 4.4 which has the function in question, but Qt
        4.3 doesn't have it. Use removeAll() as replacement instead, it
        shouldn't make a difference in performance.

        * Api/qwebsettings.cpp:
        (QWebSettings::~QWebSettings):

2007-11-08  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Cleanup checking for the request method.
        
        * Check the request method only in QWebNetworkManager::add.
        * Currently HEAD, GET, POST are allowed and for everything else
        QWebNetworkManager::add returns false.
        * Returning false is compatible with ResourceHandle::start and it
        can be used in ResourceHandle::loadResourceSynchronously to generate
        a ResourceError
        

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):

2007-11-08  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Fix bug in the implementation of synchronous network jobs.
        
        * George (pmax) reviewed the networking patches and found the following bug (thanks for reviewing)
        -    if (jobMode == AsynchronousJob) {
        +    if (jobMode == SynchronousJob) {
        add job to synchronous list/hash
        
        * Just applying the above change will lead to crashes because we can finish
        jobs before we started them.
        
        * Avoid these issues by saving all work (starting a job, sending data and
        finishing it) inside one list. JobWork will contain any
        of the above three work types and doWork will just work on this list
        (m_pendingWork). As foreach takes a copy of the list calling started, data
        and finished will not add new work and we gurantee that if we have JobStarted
        it will be in the list before JobData and JobFinished.
        
        * Observation: We might just kill the code to handle sync jobs.
        

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):
        (QWebNetworkManager::queueStart):
        (QWebNetworkManager::queueData):
        (QWebNetworkManager::queueFinished):
        (QWebNetworkManager::doWork):
        * Api/qwebnetworkinterface_p.h:
        (QWebNetworkManager::JobWork::):
        (QWebNetworkManager::JobWork::JobWork):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Fix the Qt build by setting up WindowFeatures before calling
        createWindow on the Chrome. This is similar to openNewWindow in
        page/ContextMenuController.cpp

        * Api/qwebpage.cpp:
        (openNewWindow):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Make the setting of letting Javascript access the clipboard configurable through QWebSettings, turn it off by default and turn it on in DumpRenderTree.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::apply):
        * Api/qwebsettings.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Changed QWebPageHistory::goToItem to take a value instead of a pointer.

        * Api/qwebpagehistory.cpp:
        * Api/qwebpagehistory.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Removed unimplemented QWebHistoryItem::children() function

        * Api/qwebpagehistory.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Changed the getter functions in QWebSettings to transparently resolve against the default settings.

        * Api/qwebsettings.cpp:
        (QWebSettings::fontSize):
        (QWebSettings::fontFamily):
        (QWebSettings::testAttribute):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added explicit functions for resetting the font sizes and font families.

        * Api/qwebsettings.cpp:
        (QWebSettings::resetFontSize):
        (QWebSettings::resetFontFamily):
        * Api/qwebsettings.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Combined the font sizes accessors/setters under one setter/getter with an enum.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::QWebSettingsPrivate):
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        (QWebSettings::setFontSize):
        * Api/qwebsettings.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Renamed QWebPage::userAgentStringForUrl(url) to QWebPage::userAgentFor(url);

        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::userAgent):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Renamed QWebPage::webActionTriggered to QWebPage::triggerAction

        * Api/qwebpage.cpp:
        (QWebPagePrivate::_q_webActionTriggered):
        (QWebPage::keyPressEvent):
        * Api/qwebpage.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Changed the virtual QWebPage::setWindowGeometry to be a geometryChangeRequest signal instead.

        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::setWindowRect):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Renamed QWebPage::webAction() to QWebPage::action()

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createContextMenu):
        * Api/qwebpage.h:
        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Removed a bunch of slots/functions that are now available through the new actions API.

        * Api/qwebpage.cpp:
        * Api/qwebpage.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added some more comments to the API after another round of API review with Lars.

        * Api/qwebpage.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Moved QWebFrame::selectedText() to QWebPage::selectedText().
        
        The currently selected text is a property of the page as a whole.

        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        (QWebPage::selectedText):
        * Api/qwebpage.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Implemented support for settings propagation.
        
        If an individual setting is not set in a page's QWebSettings then it is inherited from the default settings.

        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::QWebSettingsPrivate):
        (QWebSettingsPrivate::apply):
        (QWebSettings::QWebSettings):
        (QWebSettings::~QWebSettings):
        (QWebSettings::setFontFamily):
        * Api/qwebsettings.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Reworked the QWebSettings API.
        QWebPage now returns a pointer to its mutable QWebSettings object and the settings of newly created QWebPageObjects are initialized from QWebSettings::defaultSettings().

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::~QWebPagePrivate):
        (QWebPage::QWebPage):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::QWebSettingsPrivate):
        (QWebSettingsPrivate::apply):
        (QWebSettings::defaultSettings):
        (QWebSettings::QWebSettings):
        (QWebSettings::setMinimumFontSize):
        (QWebSettings::setMinimumLogicalFontSize):
        (QWebSettings::setDefaultFontSize):
        (QWebSettings::setDefaultFixedFontSize):
        (QWebSettings::setUserStyleSheetLocation):
        (QWebSettings::setFontFamily):
        (QWebSettings::fontFamily):
        (QWebSettings::setAttribute):
        * Api/qwebsettings.h:
        * QtLauncher/main.cpp:
        (main):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Made the QWebSettings::webGraphic functions static. The implementation was using QWebSettings::global() anyway.

        * Api/qwebsettings.cpp:
        (QWebSettings::setWebGraphic):
        * Api/qwebsettings.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Moved the WebCore::Image specific function loadResourcePixmap from qwebsettings.cpp to ImageQt.cpp and made it static.

        * Api/qwebsettings.cpp:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Changed the icondatabase accessor to be a static function because it doesn't change the QWebSettings object.

        * Api/qwebsettings.cpp:
        * Api/qwebsettings.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Changed the webAction() accessor to not be a slot but just a public function.

        * Api/qwebpage.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Implemented createWindow() in QtLauncher.

        * QtLauncher/main.cpp:
        (WebPage::WebPage):
        (MainWindow::MainWindow):
        (WebPage::createWindow):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Implemented opening links in new windows

        * Api/qwebpage.cpp:
        (frameLoadRequest):
        (openNewWindow):
        (QWebPage::webActionTriggered):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added and implemented the "OpenLink" action.

        * Api/qwebpage.cpp:
        (webActionForContextMenuAction):
        (QWebPage::webActionTriggered):
        (QWebPage::webAction):
        * Api/qwebpage.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Adjust the state of the reload action correctly.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateAction):
        (QWebPagePrivate::updateNavigationActions):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Initialize the undo/redo actions from QUndoStack. That automatically takes care of enabling/disabling them as well as the activation/trigger.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateAction):
        (QWebPage::webAction):
        (QWebPage::undoStack):
        * Api/qwebpage.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added undo/redo toolbar buttons, moved the location line edit into a separate toolbar.

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Update the editor actions when the selection changes.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateAction):
        (QWebPagePrivate::updateEditorActions):
        * Api/qwebpage_p.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::respondToChangedSelection):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added cut/copy/paste actions to the toolbar of QtLauncher

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Started working on keeping the state of the navigation actions up-to-date.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateAction):
        (QWebPagePrivate::updateNavigationActions):
        (QWebPage::webAction):
        * Api/qwebpage_p.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidCommitLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishDocumentLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoad):
        (WebCore::FrameLoaderClientQt::postProgressStartedNotification):
        (WebCore::FrameLoaderClientQt::didPerformFirstNavigation):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Use the navigational web actions in the toolbar

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Store a bunch of QActions in QWebPagePrivate, corresponding to QWebPage::WebAction.
        Added QWebPageContext to hold context sensitive information (for example used by the context menu).

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (webActionForContextMenuAction):
        (QWebPagePrivate::createContextMenu):
        (QWebPagePrivate::_q_webActionTriggered):
        (QWebPage::webActionTriggered):
        (QWebPage::webAction):
        (QWebPage::contextMenuEvent):
        (QWebPageContext::QWebPageContext):
        (QWebPageContext::operator=):
        (QWebPageContext::~QWebPageContext):
        (QWebPageContext::pos):
        (QWebPageContext::text):
        (QWebPageContext::linkUrl):
        (QWebPageContext::imageUrl):
        (QWebPageContext::image):
        (QWebPageContext::targetFrame):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Moved the editing actions implemented in keyPressEvent into webActionTriggered.

        * Api/qwebpage.cpp:
        (QWebPage::webActionTriggered):
        (QWebPage::keyPressEvent):
        * Api/qwebpage.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Introduced a central virtual void webActionTriggered(WebAction action) method that is called from various
        convenience methods such as cut()/copy()/paste().

        * Api/qwebpage.cpp:
        (QWebPage::goBack):
        (QWebPage::webActionTriggered):
        (QWebPage::cut):
        (QWebPage::copy):
        * Api/qwebpage.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Restructure the context menu classes for the Qt port. ContextMenu and ContextMenuItem don't store
        QActions/QMenus anymore but just store the action type, tag, title and optionally submenu as created
        in ContextMenu::populate().
        For the actual Qt context menu we traverse this structure after sendContextMenuEvent and create a QMenu
        out of it. That menu is currently not functional anymore though.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createContextMenu):
        (QWebPage::contextMenuEvent):
        * Api/qwebpage_p.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Changed ContextMenu::setPlatformDescription for the Qt port to not show the qmenu right away
        but instead just behave as a normal setter that takes ownership of the platform menu description (the qmenu).
        Instead now QWebPage::contextMenuEvent() retrieves the QMenu after calling sendContextMenuEvent and calls exec()
        on it.

        * Api/qwebpage.cpp:
        (QWebPage::contextMenuEvent):
        * WebCoreSupport/ContextMenuClientQt.cpp:
        (WebCore::ContextMenuClientQt::getCustomMenuFromDefaultItems):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Changed to PlatformMouseEvent constructor to allow construction from a QContextMenuEvent.
        Call sendContextMenuEvent on the event handler from a QWidget::contextMenuEvent re-implementation instead of in mousePressEvent.

        * Api/qwebpage.cpp:
        (QWebPage::mousePressEvent):
        (QWebPage::contextMenuEvent):
        * Api/qwebpage.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Turned onLoadProgressChanged into a real private slot.

        * Api/qwebpage.cpp:
        (QWebPage::QWebPage):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Make QWebHistory an explicitly shared object, returned as a pointer by QWebPage::history().

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebpagehistory.cpp:
        (QWebPageHistory::QWebPageHistory):
        * Api/qwebpagehistory.h:

2007-11-07  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        comments on API changes that we'd like to do.

        * Api/qwebpage.h:

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Add a QWebPage::frameCreated() signal and fix DRT
        
        The removal of createFrame in QWebPage broke the re-implementation
        in DumpRenderTree. Instead emit a frameCreated() signal and
        connect to it in DumpRenderTree.
        

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createMainFrame):
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):

2007-11-07  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Remove QWebPage::createFrame()
        
        now that QWebFrame doesn't have virtual methods anymore, there
        is no need for a createFrame() factory method in QWebpage.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createMainFrame):
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):

2007-11-07  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Moved all the event handlers from QWebFrame into QWebPage.
        
        This cleans up the public API and allows us to remove the
        HackWebFrame hack in DumpRenderTree.
        

        * Api/qwebframe.cpp:
        (QWebFrame::pos):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::frameAt):
        (QWebPage::mouseMoveEvent):
        (QWebPage::mousePressEvent):
        (QWebPage::mouseDoubleClickEvent):
        (QWebPage::mouseReleaseEvent):
        (QWebPage::wheelEvent):
        * Api/qwebpage_p.h:

2007-11-07  Holger Freyther  <holger.freyther@trolltech.com>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        Use correct UserAgent string.
        
        * Only have one User Agent String and this place is QWebPage
        * QWebPage::open -> QWebNetworkRequest -> QWebPage::open ->
        ResourceRequest -> FrameLoader::load -> QWebNetworkRequest
        * ResourceRequest is != 0 when getting called from WebCore, we
        will only do requests when coming from WebCore and then we can
        use the User-Agent set with the help of the FrameLoaderClient
        * We might want to change QWebNetworkRequest a bit
        

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequestPrivate::init):

2007-11-07  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        remove two notImplemented() warnings, as I believe we don't
        have to implement these methods. Add some (commented out)
        debug code in one place.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::respondToChangedSelection):
        (WebCore::EditorClientQt::didWriteSelectionToPasteboard):

2007-11-05  Tristan O'Tierney  <tristan@apple.com>

        Reviewed by Darin Adler.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createWindow):
        * WebCoreSupport/ChromeClientQt.h:
        Revised to use new WebCore ChromeClient createWindow API.

2007-10-31  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        fix most of the issues I found with Clipboard and DnD.

        * Api/qwebpage.cpp:
        (QWebPage::dragLeaveEvent):

2007-10-31  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        QDrag objects need to be created on the heap.

        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::DragClientQt::startDrag):

2007-10-31  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        a dragLeave event is not the same as cancelling a drag.

        * Api/qwebpage.cpp:

2007-10-26  Mark Rowe  <mrowe@apple.com>

        Build fix.  Add missing #include of Platform.h.

        * Api/qwebhistoryinterface.cpp:

2007-10-25  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        * We need to set a != 0 status code for the fast/loader/xmlhttprequest-missing-file-exception.html
        * libxml2 has the semantic that when writing an empty string and finishing it will report an error. For QXmlStreamReader this is valid.
        * This is causing some regressions...
        

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::started):
        (QWebNetworkInterface::addJob):

2007-10-25  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        * Make fast/loader/xmlhttprequest-bad-mimetype.html pass. We use QHttp to download local files but we may not set the HTTP result code on the ResourceResponse.
        * We can use the cross-platform result now. QWebNetworkInterface/Manager behaves the same as mac for local files.
        

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::started):

2007-10-25  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        * fast/dom/onerror-img.html regressed due checking the JobStates because in case of error (e.g. not being able to connect) the job will no be started.
        * Use the error message from Qt. It might or might not be translated.
        

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkJob::errorString):
        (QWebNetworkJob::setErrorString):
        (QWebNetworkManager::finished):
        (QWebNetworkManager::doWork):
        (WebCoreHttp::onRequestFinished):
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:

2007-10-25  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        * Use the JobStatus to make sure to not deliver finished/data before the job has started. This is the case with the fast/dom/onerror-img.html test case.
        * We have no idea if any data will come so we can still finish and then get pending data. This luckily can't happen for the local file case.
        

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::doWork):

2007-10-25  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        * No need to initialize values in the QWebNetworkJob c'tor
        * Add a JobStatus to QWebNetworkJob and verify that the jobs are handled in the way we expect them to be handled. This means no data after the job has finished, not finishing a job before it has been started.
        

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkJob::status):
        (QWebNetworkJob::setStatus):
        (QWebNetworkManager::started):
        (QWebNetworkManager::data):
        (QWebNetworkManager::finished):
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        (QWebNetworkJobPrivate::QWebNetworkJobPrivate):

2007-10-25  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        * Consistency: Always name the jobs job.
        

        * Api/qwebnetworkinterface.cpp:
        (WebCoreHttp::onReadyRead):
        (WebCoreHttp::onRequestFinished):
        (WebCoreHttp::onSslErrors):
        (WebCoreHttp::onAuthenticationRequired):
        (WebCoreHttp::onProxyAuthenticationRequired):

2007-10-25  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        * Implement our own queuing of network jobs to allow special handling of synchronous jobs. This makes us pass the fast/dom/xmlhttprequest-html-response-encoding.html test without a crash. Sync jobs will get a special treatment over the normals ones and in theory more than one sync job is supported.
        * This should be thread-safe besides QWebNetworkJob::{ref,deref}
        

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkJob::~QWebNetworkJob):
        (QWebNetworkManager::QWebNetworkManager):
        (QWebNetworkManager::self):
        (QWebNetworkManager::add):
        (QWebNetworkManager::started):
        (QWebNetworkManager::finished):
        (QWebNetworkInterfacePrivate::sendFileData):
        (QWebNetworkInterfacePrivate::parseDataUrl):
        (QWebNetworkManager::queueStart):
        (QWebNetworkManager::queueData):
        (QWebNetworkManager::queueFinished):
        (QWebNetworkManager::doScheduleWork):
        (QWebNetworkManager::doWork):
        (gCleanupInterface):
        (QWebNetworkInterface::setDefaultInterface):
        (QWebNetworkInterface::defaultInterface):
        (QWebNetworkInterface::QWebNetworkInterface):
        (QWebNetworkInterface::started):
        (QWebNetworkInterface::data):
        (QWebNetworkInterface::finished):
        (WebCoreHttp::scheduleNextRequest):
        (WebCoreHttp::onResponseHeaderReceived):
        (WebCoreHttp::onReadyRead):
        (WebCoreHttp::onRequestFinished):
        (WebCoreHttp::cancel):
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        (QWebNetworkManager::):
        (QWebNetworkManager::JobData::JobData):
        (QWebNetworkManager::JobFinished::JobFinished):

2007-10-25  Holger Freyther  <zecke@selfish.org>

        Reviewed by Simon Hausmann <hausmann@kde.org>.

        * Do the percent replacement only when we are not base64. With base64 we should not have any % in it anyway.
        * Have a custom decodePercentEncoding method that works without doing any charset conversion. With converting back to latin1() we lost some information.
        * We pass the char-decoding.html test now
        

        * Api/qwebnetworkinterface.cpp:
        (decodePercentEncoding):
        (QWebNetworkInterfacePrivate::parseDataUrl):

2007-10-24  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Lars Knoll <lars@trolltech.com>.

        * Stop crashing on fast/events/frame-tab-focus.html the keyEvent can be 0.
        

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeypress):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        remove some notImplemented() warnings.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::isContinuousSpellCheckingEnabled):
        (WebCore::EditorClientQt::isGrammarCheckingEnabled):
        (WebCore::EditorClientQt::respondToChangedSelection):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        allow paste from DOM so we pass more test cases.

        * Api/qwebpage.cpp:
        (QWebPage::setSettings):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Simplify the PlatformKeyEvent constructor. No need to have an extra boolean for isKeyUp in there, as the QKeyEvent has the information.

        * Api/qwebpage.cpp:
        (QWebPage::keyPressEvent):
        (QWebPage::keyReleaseEvent):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        some smaller fixes to the editing support in DRT. Makes another few tests pass.

        * WebCoreSupport/EditorClientQt.cpp:
        (qt_dump_editing_callbacks):
        (qt_drt_run):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        implemented support for most editing shortcuts to make contentEditable usable.

        * Api/qwebpage.cpp:
        (QWebPage::keyPressEvent):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        no need to call setIsActive ourselves on the frame, as the focus controller does it for us.

        * Api/qwebpage.cpp:
        (QWebPage::focusInEvent):

2007-10-24  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Implement support for testing editing.

        * WebCoreSupport/EditorClientQt.cpp:
        (qt_dump_editing_callbacks):
        (qt_dump_set_accepts_editing):
        (dumpPath):
        (dumpRange):
        (WebCore::EditorClientQt::shouldDeleteRange):
        (WebCore::EditorClientQt::shouldShowDeleteInterface):
        (WebCore::EditorClientQt::shouldBeginEditing):
        (WebCore::EditorClientQt::shouldEndEditing):
        (WebCore::EditorClientQt::shouldInsertText):
        (WebCore::EditorClientQt::shouldChangeSelectedRange):
        (WebCore::EditorClientQt::shouldApplyStyle):
        (WebCore::EditorClientQt::didBeginEditing):
        (WebCore::EditorClientQt::respondToChangedContents):
        (WebCore::EditorClientQt::respondToChangedSelection):
        (WebCore::EditorClientQt::didEndEditing):
        (WebCore::EditorClientQt::shouldInsertNode):

2007-10-19  Alp Toker  <alp@atoker.com>

        Reviewed by Oliver.

        GTK+ build fix enabling the new local database storage feature.
        There is also a prospective Qt build fix.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::runDatabaseSizeLimitPrompt):
        * WebCoreSupport/ChromeClientQt.h:

2007-10-19  Simon Hausmann  <hausmann@kde.org>

        Fix the Qt/Windows build: Include the moc file from the .cpp file so
        that config.h is included before wtf/MathExtras. The former defines
        the MSVC defines for rand_s.

        * WebCoreSupport/FrameLoaderClientQt.cpp:

2007-10-19  Simon Hausmann  <shausman@trolltech.com>

        Reviewed by Lars.

        Fix the windows/qt build by including config.h first to fix wtf/MathExtras.h inclusion.

        * Api/qwebframe.cpp:
        * Api/qwebpage.cpp:

2007-10-10  Alice Liu  <alice.liu@apple.com>

        Reviewed by Geoff Garen.

        changes to keep the build from breaking

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-10-09  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        set a default encoding for documents. Makes fast/dom/Document/document-charset.html pass.

        * Api/qwebpage.cpp:
        (QWebPage::setSettings):

2007-10-09  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Don't return a 404 status code for empty data: urls. Fixes fast/dom/HTMLHeadElement/head-check.html

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):
        (QWebNetworkManager::cancel):
        (QWebNetworkManager::started):
        (QWebNetworkManager::data):
        (QWebNetworkInterfacePrivate::parseDataUrl):

2007-10-09  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Don't set up connections inside QWebPage::createFrame, as users might be reimplementing that method. Make sure we get only one titleChanged() signal per title change, and implement the support for testing this in DRT.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::createMainFrame):
        (QWebPage::createFrame):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveTitle):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-10-09  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        add a clear() method to QWebPageHistory.

        * Api/qwebpagehistory.cpp:
        (QWebPageHistory::clear):
        (QWebPageHistory::itemAtIndex):
        * Api/qwebpagehistory.h:

2007-10-05  Lars Knoll  <lars@trolltech.com>

        add proper error messages to the FrameLoaderClient.
        Implement ChromeClientQt::closeWindowSoon and
        FrameLoaderClientQt::dispatchCreatePage (which should go away IMO).
        Some fixes in DRT to make it work correctly with multiple windows.

        Reviewed by Maciej.

        * Api/qwebframe.h:
        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::cancel):
        (QWebNetworkInterface::addJob):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::closeWindowSoon):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::cancelledError):
        (WebCore::):
        (WebCore::FrameLoaderClientQt::blockedError):
        (WebCore::FrameLoaderClientQt::cannotShowURLError):
        (WebCore::FrameLoaderClientQt::interruptForPolicyChangeError):
        (WebCore::FrameLoaderClientQt::cannotShowMIMETypeError):
        (WebCore::FrameLoaderClientQt::dispatchCreatePage):

2007-10-03  Lars Knoll  <lars@trolltech.com>

        Signed off by Olliej.

        move WebKitQt to WebKit/qt for consistency with the other ports.

        * Api/headers.pri: Renamed from WebKitQt/Api/headers.pri.
        * Api/qcookiejar.cpp: Renamed from WebKitQt/Api/qcookiejar.cpp.
        (QCookieJarPrivate::QCookieJarPrivate):
        (qHash):
        (QCookieJar::QCookieJar):
        (QCookieJar::~QCookieJar):
        (QCookieJar::setCookies):
        (QCookieJar::cookies):
        (QCookieJar::isEnabled):
        (QCookieJar::setEnabled):
        (gCleanupJar):
        (QCookieJar::setCookieJar):
        (QCookieJar::cookieJar):
        * Api/qcookiejar.h: Renamed from WebKitQt/Api/qcookiejar.h.
        * Api/qtwebkit.prf: Renamed from WebKitQt/Api/qtwebkit.prf.
        * Api/qwebframe.cpp: Renamed from WebKitQt/Api/qwebframe.cpp.
        (QWebFramePrivate::init):
        (QWebFramePrivate::parentFrame):
        (QWebFramePrivate::horizontalScrollBar):
        (QWebFramePrivate::verticalScrollBar):
        (QWebFrame::QWebFrame):
        (QWebFrame::~QWebFrame):
        (QWebFrame::addToJSWindowObject):
        (QWebFrame::markup):
        (QWebFrame::innerText):
        (QWebFrame::renderTreeDump):
        (QWebFrame::title):
        (QWebFrame::name):
        (QWebFrame::page):
        (QWebFrame::selectedText):
        (QWebFrame::childFrames):
        (QWebFrame::verticalScrollBarPolicy):
        (QWebFrame::setVerticalScrollBarPolicy):
        (QWebFrame::horizontalScrollBarPolicy):
        (QWebFrame::setHorizontalScrollBarPolicy):
        (QWebFrame::render):
        (QWebFrame::layout):
        (QWebFrame::pos):
        (QWebFrame::geometry):
        (QWebFrame::evaluateJavaScript):
        (QWebFrame::mouseMoveEvent):
        (QWebFrame::mousePressEvent):
        (QWebFrame::mouseDoubleClickEvent):
        (QWebFrame::mouseReleaseEvent):
        (QWebFrame::wheelEvent):
        * Api/qwebframe.h: Renamed from WebKitQt/Api/qwebframe.h.
        * Api/qwebframe_p.h: Renamed from WebKitQt/Api/qwebframe_p.h.
        (QWebFramePrivate::QWebFramePrivate):
        * Api/qwebhistoryinterface.cpp: Renamed from WebKitQt/Api/qwebhistoryinterface.cpp.
        (WebCore::historyContains):
        (gCleanupInterface):
        (QWebHistoryInterface::setDefaultInterface):
        (QWebHistoryInterface::defaultInterface):
        (QWebHistoryInterface::QWebHistoryInterface):
        * Api/qwebhistoryinterface.h: Renamed from WebKitQt/Api/qwebhistoryinterface.h.
        * Api/qwebkitglobal.h: Renamed from WebKitQt/Api/qwebkitglobal.h.
        * Api/qwebnetworkinterface.cpp: Renamed from WebKitQt/Api/qwebnetworkinterface.cpp.
        (qHash):
        (operator==):
        (QWebNetworkRequestPrivate::init):
        (QWebNetworkRequestPrivate::setURL):
        (QWebNetworkRequest::QWebNetworkRequest):
        (QWebNetworkRequest::operator=):
        (QWebNetworkRequest::~QWebNetworkRequest):
        (QWebNetworkRequest::url):
        (QWebNetworkRequest::setUrl):
        (QWebNetworkRequest::httpHeader):
        (QWebNetworkRequest::setHttpHeader):
        (QWebNetworkRequest::httpHeaderField):
        (QWebNetworkRequest::setHttpHeaderField):
        (QWebNetworkRequest::postData):
        (QWebNetworkRequest::setPostData):
        (QWebNetworkJob::QWebNetworkJob):
        (QWebNetworkJob::~QWebNetworkJob):
        (QWebNetworkJob::url):
        (QWebNetworkJob::postData):
        (QWebNetworkJob::httpHeader):
        (QWebNetworkJob::request):
        (QWebNetworkJob::response):
        (QWebNetworkJob::setResponse):
        (QWebNetworkJob::cancelled):
        (QWebNetworkJob::ref):
        (QWebNetworkJob::deref):
        (QWebNetworkJob::networkInterface):
        (QWebNetworkJob::frame):
        (QWebNetworkManager::QWebNetworkManager):
        (QWebNetworkManager::self):
        (QWebNetworkManager::add):
        (QWebNetworkManager::cancel):
        (QWebNetworkManager::started):
        (QWebNetworkManager::data):
        (QWebNetworkManager::finished):
        (QWebNetworkManager::addHttpJob):
        (QWebNetworkManager::cancelHttpJob):
        (QWebNetworkManager::httpConnectionClosed):
        (QWebNetworkInterfacePrivate::sendFileData):
        (QWebNetworkInterfacePrivate::parseDataUrl):
        (gCleanupInterface):
        (QWebNetworkInterface::setDefaultInterface):
        (QWebNetworkInterface::defaultInterface):
        (QWebNetworkInterface::QWebNetworkInterface):
        (QWebNetworkInterface::~QWebNetworkInterface):
        (QWebNetworkInterface::addJob):
        (QWebNetworkInterface::cancelJob):
        (WebCoreHttp::WebCoreHttp):
        (WebCoreHttp::~WebCoreHttp):
        (WebCoreHttp::request):
        (WebCoreHttp::scheduleNextRequest):
        (WebCoreHttp::getConnection):
        (WebCoreHttp::onResponseHeaderReceived):
        (WebCoreHttp::onReadyRead):
        (WebCoreHttp::onRequestFinished):
        (WebCoreHttp::onDone):
        (WebCoreHttp::onStateChanged):
        (WebCoreHttp::cancel):
        (WebCoreHttp::onSslErrors):
        (WebCoreHttp::onAuthenticationRequired):
        (WebCoreHttp::onProxyAuthenticationRequired):
        (HostInfo::HostInfo):
        * Api/qwebnetworkinterface.h: Renamed from WebKitQt/Api/qwebnetworkinterface.h.
        * Api/qwebnetworkinterface_p.h: Renamed from WebKitQt/Api/qwebnetworkinterface_p.h.
        (QWebNetworkJobPrivate::QWebNetworkJobPrivate):
        (WebCore::HostInfo::HostInfo):
        (WebCore::WebCoreHttp::HttpConnection::HttpConnection):
        * Api/qwebobjectplugin.cpp: Renamed from WebKitQt/Api/qwebobjectplugin.cpp.
        (QWebFactoryLoader::QWebFactoryLoader):
        (QWebFactoryLoader::self):
        (QWebFactoryLoader::descriptionForName):
        (QWebFactoryLoader::mimetypesForName):
        (QWebFactoryLoader::mimeTypeForExtension):
        (QWebFactoryLoader::extensions):
        (QWebFactoryLoader::nameForMimetype):
        (QWebFactoryLoader::create):
        (QWebObjectPlugin::QWebObjectPlugin):
        (QWebObjectPlugin::~QWebObjectPlugin):
        (QWebObjectPlugin::descriptionForKey):
        (QWebObjectPlugin::mimetypesForKey):
        (QWebObjectPlugin::extensionsForMimetype):
        * Api/qwebobjectplugin.h: Renamed from WebKitQt/Api/qwebobjectplugin.h.
        * Api/qwebobjectplugin_p.h: Renamed from WebKitQt/Api/qwebobjectplugin_p.h.
        (QWebFactoryLoader::names):
        (QWebFactoryLoader::supportsMimeType):
        * Api/qwebobjectpluginconnector.cpp: Renamed from WebKitQt/Api/qwebobjectpluginconnector.cpp.
        (QWebObjectPluginConnector::QWebObjectPluginConnector):
        (QWebObjectPluginConnector::frame):
        (QWebObjectPluginConnector::pluginParentWidget):
        (QWebObjectPluginConnector::requestUrl):
        * Api/qwebobjectpluginconnector.h: Renamed from WebKitQt/Api/qwebobjectpluginconnector.h.
        * Api/qwebpage.cpp: Renamed from WebKitQt/Api/qwebpage.cpp.
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::~QWebPagePrivate):
        (QWebPagePrivate::navigationRequested):
        (QWebPagePrivate::createMainFrame):
        (QWebPage::QWebPage):
        (QWebPage::~QWebPage):
        (QWebPage::createFrame):
        (QWebPage::open):
        (QWebPage::url):
        (QWebPage::title):
        (QWebPage::mainFrame):
        (QWebPage::sizeHint):
        (QWebPage::stop):
        (QWebPage::history):
        (QWebPage::goBack):
        (QWebPage::goForward):
        (QWebPage::goToHistoryItem):
        (QWebPage::javaScriptConsoleMessage):
        (QWebPage::javaScriptAlert):
        (QWebPage::javaScriptConfirm):
        (QWebPage::javaScriptPrompt):
        (QWebPage::createWindow):
        (QWebPage::createModalDialog):
        (QWebPage::createPlugin):
        (QWebPage::navigationRequested):
        (QWebPage::setWindowGeometry):
        (QWebPage::canCut):
        (QWebPage::canCopy):
        (QWebPage::canPaste):
        (QWebPage::cut):
        (QWebPage::copy):
        (QWebPage::paste):
        (QWebPage::isModified):
        (QWebPage::undoStack):
        (dropActionToDragOp):
        (dragOpToDropAction):
        (QWebPage::resizeEvent):
        (QWebPage::paintEvent):
        (QWebPage::mouseMoveEvent):
        (QWebPage::mousePressEvent):
        (QWebPage::mouseDoubleClickEvent):
        (QWebPage::mouseReleaseEvent):
        (QWebPage::wheelEvent):
        (QWebPage::keyPressEvent):
        (QWebPage::keyReleaseEvent):
        (QWebPage::focusInEvent):
        (QWebPage::focusOutEvent):
        (QWebPage::focusNextPrevChild):
        (QWebPage::dragEnterEvent):
        (QWebPage::dragLeaveEvent):
        (QWebPage::dragMoveEvent):
        (QWebPage::dropEvent):
        (QWebPage::setNetworkInterface):
        (QWebPage::networkInterface):
        (QWebPage::icon):
        (QWebPage::setSettings):
        (QWebPage::settings):
        (QWebPage::chooseFile):
        (QWebPage::setNetworkProxy):
        (QWebPage::networkProxy):
        (QWebPage::userAgentStringForUrl):
        (QWebPage::onLoadProgressChanged):
        (QWebPage::totalBytes):
        * Api/qwebpage.h: Renamed from WebKitQt/Api/qwebpage.h.
        * Api/qwebpage_p.h: Renamed from WebKitQt/Api/qwebpage_p.h.
        * Api/qwebpagehistory.cpp: Renamed from WebKitQt/Api/qwebpagehistory.cpp.
        (QWebHistoryItem::QWebHistoryItem):
        (QWebHistoryItem::operator=):
        (QWebHistoryItem::~QWebHistoryItem):
        (QWebHistoryItem::originalUrl):
        (QWebHistoryItem::currentUrl):
        (QWebHistoryItem::title):
        (QWebHistoryItem::lastVisited):
        (QWebHistoryItem::icon):
        (QWebPageHistory::QWebPageHistory):
        (QWebPageHistory::itemAtIndex):
        (QWebPageHistory::operator=):
        (QWebPageHistory::~QWebPageHistory):
        (QWebPageHistory::items):
        (QWebPageHistory::backItems):
        (QWebPageHistory::forwardItems):
        (QWebPageHistory::canGoBack):
        (QWebPageHistory::canGoForward):
        (QWebPageHistory::goBack):
        (QWebPageHistory::goForward):
        (QWebPageHistory::goToItem):
        (QWebPageHistory::backItem):
        (QWebPageHistory::currentItem):
        (QWebPageHistory::forwardItem):
        * Api/qwebpagehistory.h: Renamed from WebKitQt/Api/qwebpagehistory.h.
        (QExplicitlySharedDataPointer::operator*):
        (QExplicitlySharedDataPointer::operator->):
        (QExplicitlySharedDataPointer::operator T *):
        (QExplicitlySharedDataPointer::operator const T *):
        (QExplicitlySharedDataPointer::data):
        (QExplicitlySharedDataPointer::constData):
        (QExplicitlySharedDataPointer::operator==):
        (QExplicitlySharedDataPointer::operator!=):
        (QExplicitlySharedDataPointer::QExplicitlySharedDataPointer):
        (QExplicitlySharedDataPointer::~QExplicitlySharedDataPointer):
        (QExplicitlySharedDataPointer::operator=):
        (QExplicitlySharedDataPointer::operator!):
        (::QExplicitlySharedDataPointer):
        * Api/qwebpagehistory_p.h: Renamed from WebKitQt/Api/qwebpagehistory_p.h.
        (QWebHistoryItemPrivate::QWebHistoryItemPrivate):
        (QWebHistoryItemPrivate::~QWebHistoryItemPrivate):
        (QWebPageHistoryPrivate::QWebPageHistoryPrivate):
        (QWebPageHistoryPrivate::~QWebPageHistoryPrivate):
        * Api/qwebsettings.cpp: Renamed from WebKitQt/Api/qwebsettings.cpp.
        (QWebSettingsPrivate::QWebSettingsPrivate):
        (QWebSettings::QWebSettings):
        (QWebSettings::~QWebSettings):
        (QWebSettings::setMinimumFontSize):
        (QWebSettings::minimumFontSize):
        (QWebSettings::setMinimumLogicalFontSize):
        (QWebSettings::minimumLogicalFontSize):
        (QWebSettings::setDefaultFontSize):
        (QWebSettings::defaultFontSize):
        (QWebSettings::setDefaultFixedFontSize):
        (QWebSettings::defaultFixedFontSize):
        (QWebSettings::setUserStyleSheetLocation):
        (QWebSettings::userStyleSheetLocation):
        (QWebSettings::setIconDatabaseEnabled):
        (QWebSettings::iconDatabaseEnabled):
        (QWebSettings::setWebGraphic):
        (QWebSettings::webGraphic):
        (QWebSettings::operator=):
        (QWebSettings::setGlobal):
        (QWebSettings::global):
        (QWebSettings::setFontFamily):
        (QWebSettings::fontFamily):
        (QWebSettings::setAttribute):
        (QWebSettings::testAttribute):
        (loadResourcePixmap):
        * Api/qwebsettings.h: Renamed from WebKitQt/Api/qwebsettings.h.
        * ChangeLog: Renamed from WebKitQt/ChangeLog.
        * Plugins/ICOHandler.cpp: Renamed from WebKitQt/Plugins/ICOHandler.cpp.
        (IcoHeader::operator >>):
        (IcoHeader::BMP_INFOHDR::):
        (IcoHeader::operator<<):
        (IcoHeader::LessDifference::LessDifference):
        (IcoHeader::LessDifference::operator ()):
        (IcoHeader::loadFromDIB):
        (ICOHandler::ICOHandler):
        (ICOHandler::canRead):
        (ICOHandler::read):
        (ICOHandler::write):
        (ICOHandler::name):
        (ICOPlugin::keys):
        (ICOPlugin::capabilities):
        (ICOPlugin::create):
        * Plugins/ICOHandler.h: Renamed from WebKitQt/Plugins/ICOHandler.h.
        * Plugins/Plugins.pro: Renamed from WebKitQt/Plugins/Plugins.pro.
        * QtLauncher/QtLauncher.pro: Renamed from WebKitQt/QtLauncher/QtLauncher.pro.
        * QtLauncher/main.cpp: Renamed from WebKitQt/QtLauncher/main.cpp.
        (HoverLabel::HoverLabel):
        (HoverLabel::setHoverLink):
        (HoverLabel::sizeForFont):
        (HoverLabel::sizeHint):
        (HoverLabel::updateSize):
        (HoverLabel::resetAnimation):
        (HoverLabel::paintEvent):
        (HoverLabel::interpolate):
        (ClearButton::ClearButton):
        (ClearButton::paintEvent):
        (SearchEdit::SearchEdit):
        (SearchEdit::~SearchEdit):
        (SearchEdit::paintEvent):
        (SearchEdit::resizeEvent):
        (SearchEdit::moveEvent):
        (MainWindow::MainWindow):
        (MainWindow::changeLocation):
        (MainWindow::loadFinished):
        (MainWindow::showLinkHover):
        (MainWindow::resizeEvent):
        (main):
        * WebCoreSupport/ChromeClientQt.cpp: Renamed from WebKitQt/WebCoreSupport/ChromeClientQt.cpp.
        (WebCore::ChromeClientQt::ChromeClientQt):
        (WebCore::ChromeClientQt::~ChromeClientQt):
        (WebCore::ChromeClientQt::setWindowRect):
        (WebCore::ChromeClientQt::windowRect):
        (WebCore::ChromeClientQt::pageRect):
        (WebCore::ChromeClientQt::scaleFactor):
        (WebCore::ChromeClientQt::focus):
        (WebCore::ChromeClientQt::unfocus):
        (WebCore::ChromeClientQt::canTakeFocus):
        (WebCore::ChromeClientQt::takeFocus):
        (WebCore::ChromeClientQt::createWindow):
        (WebCore::ChromeClientQt::createModalDialog):
        (WebCore::ChromeClientQt::show):
        (WebCore::ChromeClientQt::canRunModal):
        (WebCore::ChromeClientQt::runModal):
        (WebCore::ChromeClientQt::setToolbarsVisible):
        (WebCore::ChromeClientQt::toolbarsVisible):
        (WebCore::ChromeClientQt::setStatusbarVisible):
        (WebCore::ChromeClientQt::statusbarVisible):
        (WebCore::ChromeClientQt::setScrollbarsVisible):
        (WebCore::ChromeClientQt::scrollbarsVisible):
        (WebCore::ChromeClientQt::setMenubarVisible):
        (WebCore::ChromeClientQt::menubarVisible):
        (WebCore::ChromeClientQt::setResizable):
        (WebCore::ChromeClientQt::addMessageToConsole):
        (WebCore::ChromeClientQt::chromeDestroyed):
        (WebCore::ChromeClientQt::canRunBeforeUnloadConfirmPanel):
        (WebCore::ChromeClientQt::runBeforeUnloadConfirmPanel):
        (WebCore::ChromeClientQt::closeWindowSoon):
        (WebCore::ChromeClientQt::runJavaScriptAlert):
        (WebCore::ChromeClientQt::runJavaScriptConfirm):
        (WebCore::ChromeClientQt::runJavaScriptPrompt):
        (WebCore::ChromeClientQt::setStatusbarText):
        (WebCore::ChromeClientQt::shouldInterruptJavaScript):
        (WebCore::ChromeClientQt::tabsToLinks):
        (WebCore::ChromeClientQt::windowResizerRect):
        (WebCore::ChromeClientQt::addToDirtyRegion):
        (WebCore::ChromeClientQt::scrollBackingStore):
        (WebCore::ChromeClientQt::updateBackingStore):
        (WebCore::ChromeClientQt::mouseDidMoveOverElement):
        (WebCore::ChromeClientQt::setToolTip):
        (WebCore::ChromeClientQt::print):
        * WebCoreSupport/ChromeClientQt.h: Renamed from WebKitQt/WebCoreSupport/ChromeClientQt.h.
        * WebCoreSupport/ContextMenuClientQt.cpp: Renamed from WebKitQt/WebCoreSupport/ContextMenuClientQt.cpp.
        (WebCore::ContextMenuClientQt::contextMenuDestroyed):
        (WebCore::ContextMenuClientQt::getCustomMenuFromDefaultItems):
        (WebCore::ContextMenuClientQt::contextMenuItemSelected):
        (WebCore::ContextMenuClientQt::downloadURL):
        (WebCore::ContextMenuClientQt::lookUpInDictionary):
        (WebCore::ContextMenuClientQt::speak):
        (WebCore::ContextMenuClientQt::stopSpeaking):
        (WebCore::ContextMenuClientQt::searchWithGoogle):
        * WebCoreSupport/ContextMenuClientQt.h: Renamed from WebKitQt/WebCoreSupport/ContextMenuClientQt.h.
        * WebCoreSupport/DragClientQt.cpp: Renamed from WebKitQt/WebCoreSupport/DragClientQt.cpp.
        (WebCore::DragClientQt::actionMaskForDrag):
        (WebCore::DragClientQt::willPerformDragDestinationAction):
        (WebCore::DragClientQt::dragControllerDestroyed):
        (WebCore::DragClientQt::dragSourceActionMaskForPoint):
        (WebCore::DragClientQt::willPerformDragSourceAction):
        (WebCore::DragClientQt::startDrag):
        * WebCoreSupport/DragClientQt.h: Renamed from WebKitQt/WebCoreSupport/DragClientQt.h.
        (WebCore::DragClientQt::DragClientQt):
        * WebCoreSupport/EditCommandQt.cpp: Renamed from WebKitQt/WebCoreSupport/EditCommandQt.cpp.
        (EditCommandQt::EditCommandQt):
        (EditCommandQt::~EditCommandQt):
        (EditCommandQt::redo):
        (EditCommandQt::undo):
        * WebCoreSupport/EditCommandQt.h: Renamed from WebKitQt/WebCoreSupport/EditCommandQt.h.
        * WebCoreSupport/EditorClientQt.cpp: Renamed from WebKitQt/WebCoreSupport/EditorClientQt.cpp.
        (WebCore::EditorClientQt::shouldDeleteRange):
        (WebCore::EditorClientQt::shouldShowDeleteInterface):
        (WebCore::EditorClientQt::isContinuousSpellCheckingEnabled):
        (WebCore::EditorClientQt::isGrammarCheckingEnabled):
        (WebCore::EditorClientQt::spellCheckerDocumentTag):
        (WebCore::EditorClientQt::shouldBeginEditing):
        (WebCore::EditorClientQt::shouldEndEditing):
        (WebCore::EditorClientQt::shouldInsertText):
        (WebCore::EditorClientQt::shouldChangeSelectedRange):
        (WebCore::EditorClientQt::shouldApplyStyle):
        (WebCore::EditorClientQt::shouldMoveRangeAfterDelete):
        (WebCore::EditorClientQt::didBeginEditing):
        (WebCore::EditorClientQt::respondToChangedContents):
        (WebCore::EditorClientQt::respondToChangedSelection):
        (WebCore::EditorClientQt::didEndEditing):
        (WebCore::EditorClientQt::didWriteSelectionToPasteboard):
        (WebCore::EditorClientQt::didSetSelectionTypesForPasteboard):
        (WebCore::EditorClientQt::selectWordBeforeMenuEvent):
        (WebCore::EditorClientQt::isEditable):
        (WebCore::EditorClientQt::registerCommandForUndo):
        (WebCore::EditorClientQt::registerCommandForRedo):
        (WebCore::EditorClientQt::clearUndoRedoOperations):
        (WebCore::EditorClientQt::canUndo):
        (WebCore::EditorClientQt::canRedo):
        (WebCore::EditorClientQt::undo):
        (WebCore::EditorClientQt::redo):
        (WebCore::EditorClientQt::shouldInsertNode):
        (WebCore::EditorClientQt::pageDestroyed):
        (WebCore::EditorClientQt::smartInsertDeleteEnabled):
        (WebCore::EditorClientQt::toggleContinuousSpellChecking):
        (WebCore::EditorClientQt::toggleGrammarChecking):
        (WebCore::EditorClientQt::handleKeypress):
        (WebCore::EditorClientQt::handleInputMethodKeypress):
        (WebCore::EditorClientQt::EditorClientQt):
        (WebCore::EditorClientQt::textFieldDidBeginEditing):
        (WebCore::EditorClientQt::textFieldDidEndEditing):
        (WebCore::EditorClientQt::textDidChangeInTextField):
        (WebCore::EditorClientQt::doTextFieldCommandFromEvent):
        (WebCore::EditorClientQt::textWillBeDeletedInTextField):
        (WebCore::EditorClientQt::textDidChangeInTextArea):
        (WebCore::EditorClientQt::ignoreWordInSpellDocument):
        (WebCore::EditorClientQt::learnWord):
        (WebCore::EditorClientQt::checkSpellingOfString):
        (WebCore::EditorClientQt::checkGrammarOfString):
        (WebCore::EditorClientQt::updateSpellingUIWithGrammarString):
        (WebCore::EditorClientQt::updateSpellingUIWithMisspelledWord):
        (WebCore::EditorClientQt::showSpellingUI):
        (WebCore::EditorClientQt::spellingUIIsShowing):
        (WebCore::EditorClientQt::getGuessesForWord):
        (WebCore::EditorClientQt::isEditing):
        (WebCore::EditorClientQt::setInputMethodState):
        * WebCoreSupport/EditorClientQt.h: Renamed from WebKitQt/WebCoreSupport/EditorClientQt.h.
        * WebCoreSupport/FrameLoaderClientQt.cpp: Renamed from WebKitQt/WebCoreSupport/FrameLoaderClientQt.cpp.
        (WebCore::FrameLoaderClientQt::FrameLoaderClientQt):
        (WebCore::FrameLoaderClientQt::~FrameLoaderClientQt):
        (WebCore::FrameLoaderClientQt::setFrame):
        (WebCore::FrameLoaderClientQt::webFrame):
        (WebCore::FrameLoaderClientQt::callPolicyFunction):
        (WebCore::FrameLoaderClientQt::slotCallPolicyFunction):
        (WebCore::FrameLoaderClientQt::hasWebView):
        (WebCore::FrameLoaderClientQt::hasFrameView):
        (WebCore::FrameLoaderClientQt::hasBackForwardList):
        (WebCore::FrameLoaderClientQt::resetBackForwardList):
        (WebCore::FrameLoaderClientQt::provisionalItemIsTarget):
        (WebCore::FrameLoaderClientQt::loadProvisionalItemFromPageCache):
        (WebCore::FrameLoaderClientQt::invalidateCurrentItemPageCache):
        (WebCore::FrameLoaderClientQt::privateBrowsingEnabled):
        (WebCore::FrameLoaderClientQt::makeDocumentView):
        (WebCore::FrameLoaderClientQt::makeRepresentation):
        (WebCore::FrameLoaderClientQt::forceLayout):
        (WebCore::FrameLoaderClientQt::forceLayoutForNonHTML):
        (WebCore::FrameLoaderClientQt::setCopiesOnScroll):
        (WebCore::FrameLoaderClientQt::tokenForLoadErrorReset):
        (WebCore::FrameLoaderClientQt::resetAfterLoadError):
        (WebCore::FrameLoaderClientQt::doNotResetAfterLoadError):
        (WebCore::FrameLoaderClientQt::willCloseDocument):
        (WebCore::FrameLoaderClientQt::detachedFromParent2):
        (WebCore::FrameLoaderClientQt::detachedFromParent3):
        (WebCore::FrameLoaderClientQt::detachedFromParent4):
        (WebCore::FrameLoaderClientQt::loadedFromCachedPage):
        (WebCore::FrameLoaderClientQt::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveServerRedirectForProvisionalLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidCancelClientRedirect):
        (WebCore::FrameLoaderClientQt::dispatchWillPerformClientRedirect):
        (WebCore::FrameLoaderClientQt::dispatchDidChangeLocationWithinPage):
        (WebCore::FrameLoaderClientQt::dispatchWillClose):
        (WebCore::FrameLoaderClientQt::dispatchDidStartProvisionalLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveTitle):
        (WebCore::FrameLoaderClientQt::dispatchDidCommitLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishDocumentLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFirstLayout):
        (WebCore::FrameLoaderClientQt::dispatchShow):
        (WebCore::FrameLoaderClientQt::cancelPolicyCheck):
        (WebCore::FrameLoaderClientQt::dispatchWillSubmitForm):
        (WebCore::FrameLoaderClientQt::dispatchDidLoadMainResource):
        (WebCore::FrameLoaderClientQt::clearLoadingFromPageCache):
        (WebCore::FrameLoaderClientQt::isLoadingFromPageCache):
        (WebCore::FrameLoaderClientQt::revertToProvisionalState):
        (WebCore::FrameLoaderClientQt::clearUnarchivingState):
        (WebCore::FrameLoaderClientQt::postProgressStartedNotification):
        (WebCore::FrameLoaderClientQt::postProgressEstimateChangedNotification):
        (WebCore::FrameLoaderClientQt::postProgressFinishedNotification):
        (WebCore::FrameLoaderClientQt::setMainFrameDocumentReady):
        (WebCore::FrameLoaderClientQt::willChangeTitle):
        (WebCore::FrameLoaderClientQt::didChangeTitle):
        (WebCore::FrameLoaderClientQt::finishedLoading):
        (WebCore::FrameLoaderClientQt::finalSetupForReplace):
        (WebCore::FrameLoaderClientQt::setDefersLoading):
        (WebCore::FrameLoaderClientQt::isArchiveLoadPending):
        (WebCore::FrameLoaderClientQt::cancelPendingArchiveLoad):
        (WebCore::FrameLoaderClientQt::clearArchivedResources):
        (WebCore::FrameLoaderClientQt::canShowMIMEType):
        (WebCore::FrameLoaderClientQt::representationExistsForURLScheme):
        (WebCore::FrameLoaderClientQt::generatedMIMETypeForURLScheme):
        (WebCore::FrameLoaderClientQt::frameLoadCompleted):
        (WebCore::FrameLoaderClientQt::restoreViewState):
        (WebCore::FrameLoaderClientQt::provisionalLoadStarted):
        (WebCore::FrameLoaderClientQt::shouldTreatURLAsSameAsCurrent):
        (WebCore::FrameLoaderClientQt::addHistoryItemForFragmentScroll):
        (WebCore::FrameLoaderClientQt::didFinishLoad):
        (WebCore::FrameLoaderClientQt::prepareForDataSourceReplacement):
        (WebCore::FrameLoaderClientQt::setTitle):
        (WebCore::FrameLoaderClientQt::userAgent):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveIcon):
        (WebCore::FrameLoaderClientQt::frameLoaderDestroyed):
        (WebCore::FrameLoaderClientQt::canHandleRequest):
        (WebCore::FrameLoaderClientQt::windowObjectCleared):
        (WebCore::FrameLoaderClientQt::didPerformFirstNavigation):
        (WebCore::FrameLoaderClientQt::registerForIconNotification):
        (WebCore::FrameLoaderClientQt::setDocumentViewFromCachedPage):
        (WebCore::FrameLoaderClientQt::updateGlobalHistoryForStandardLoad):
        (WebCore::FrameLoaderClientQt::updateGlobalHistoryForReload):
        (WebCore::FrameLoaderClientQt::shouldGoToHistoryItem):
        (WebCore::FrameLoaderClientQt::saveViewStateToItem):
        (WebCore::FrameLoaderClientQt::saveDocumentViewToCachedPage):
        (WebCore::FrameLoaderClientQt::canCachePage):
        (WebCore::FrameLoaderClientQt::setMainDocumentError):
        (WebCore::FrameLoaderClientQt::committedLoad):
        (WebCore::FrameLoaderClientQt::cancelledError):
        (WebCore::FrameLoaderClientQt::blockedError):
        (WebCore::FrameLoaderClientQt::cannotShowURLError):
        (WebCore::FrameLoaderClientQt::interruptForPolicyChangeError):
        (WebCore::FrameLoaderClientQt::cannotShowMIMETypeError):
        (WebCore::FrameLoaderClientQt::fileDoesNotExistError):
        (WebCore::FrameLoaderClientQt::shouldFallBack):
        (WebCore::FrameLoaderClientQt::createDocumentLoader):
        (WebCore::FrameLoaderClientQt::download):
        (WebCore::FrameLoaderClientQt::assignIdentifierToInitialRequest):
        (WebCore::FrameLoaderClientQt::dispatchWillSendRequest):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveAuthenticationChallenge):
        (WebCore::FrameLoaderClientQt::dispatchDidCancelAuthenticationChallenge):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveResponse):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveContentLength):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoading):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoading):
        (WebCore::FrameLoaderClientQt::dispatchDidLoadResourceFromMemoryCache):
        (WebCore::FrameLoaderClientQt::dispatchDidFailProvisionalLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoad):
        (WebCore::FrameLoaderClientQt::dispatchCreatePage):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForMIMEType):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):
        (WebCore::FrameLoaderClientQt::dispatchUnableToImplementPolicy):
        (WebCore::FrameLoaderClientQt::startDownload):
        (WebCore::FrameLoaderClientQt::willUseArchive):
        (WebCore::FrameLoaderClientQt::createFrame):
        (WebCore::FrameLoaderClientQt::objectContentType):
        (WebCore::):
        (WebCore::FrameLoaderClientQt::createPlugin):
        (WebCore::FrameLoaderClientQt::redirectDataToPlugin):
        (WebCore::FrameLoaderClientQt::createJavaAppletWidget):
        (WebCore::FrameLoaderClientQt::overrideMediaType):
        * WebCoreSupport/FrameLoaderClientQt.h: Renamed from WebKitQt/WebCoreSupport/FrameLoaderClientQt.h.
        * WebCoreSupport/InspectorClientQt.cpp: Renamed from WebKitQt/WebCoreSupport/InspectorClientQt.cpp.
        (WebCore::InspectorClientQt::inspectorDestroyed):
        (WebCore::InspectorClientQt::createPage):
        (WebCore::InspectorClientQt::showWindow):
        (WebCore::InspectorClientQt::closeWindow):
        (WebCore::InspectorClientQt::attachWindow):
        (WebCore::InspectorClientQt::detachWindow):
        (WebCore::InspectorClientQt::highlight):
        (WebCore::InspectorClientQt::hideHighlight):
        * WebCoreSupport/InspectorClientQt.h: Renamed from WebKitQt/WebCoreSupport/InspectorClientQt.h.
        * WebKitPart/WebKitFactory.cpp: Renamed from WebKitQt/WebKitPart/WebKitFactory.cpp.
        (WebKitFactory::WebKitFactory):
        (WebKitFactory::~WebKitFactory):
        (WebKitFactory::createPartObject):
        (WebKitFactory::instance):
        (WebKitFactory::ref):
        (WebKitFactory::deref):
        * WebKitPart/WebKitFactory.h: Renamed from WebKitQt/WebKitPart/WebKitFactory.h.
        * WebKitPart/WebKitPart.cpp: Renamed from WebKitQt/WebKitPart/WebKitPart.cpp.
        (WebKitPart::WebKitPart):
        (WebKitPart::~WebKitPart):
        (WebKitPart::openFile):
        (WebKitPart::openUrl):
        (WebKitPart::closeUrl):
        (WebKitPart::parentPart):
        (WebKitPart::frame):
        (WebKitPart::initView):
        * WebKitPart/WebKitPart.desktop: Renamed from WebKitQt/WebKitPart/WebKitPart.desktop.
        * WebKitPart/WebKitPart.h: Renamed from WebKitQt/WebKitPart/WebKitPart.h.
        (WebKitPart::):
        * WebKitPart/WebKitPart.rc: Renamed from WebKitQt/WebKitPart/WebKitPart.rc.
        * WebKitPart/WebKitPartBrowser.rc: Renamed from WebKitQt/WebKitPart/WebKitPartBrowser.rc.
        * WebKitPart/WebKitPartBrowserExtension.cpp: Renamed from WebKitQt/WebKitPart/WebKitPartBrowserExtension.cpp.
        (WebKitPartBrowserExtension::WebKitPartBrowserExtension):
        * WebKitPart/WebKitPartBrowserExtension.h: Renamed from WebKitQt/WebKitPart/WebKitPartBrowserExtension.h.
        * WebKitPart/WebKitPartClient.cpp: Renamed from WebKitQt/WebKitPart/WebKitPartClient.cpp.
        (WebKitPartClient::WebKitPartClient):
        (WebKitPartClient::~WebKitPartClient):
        * WebKitPart/WebKitPartClient.h: Renamed from WebKitQt/WebKitPart/WebKitPartClient.h.
        * WebKitPart/WebKitPartInterface.cpp: Renamed from WebKitQt/WebKitPart/WebKitPartInterface.cpp.
        (WebKitPartInterface::WebKitPartInterface):
        (WebKitPartInterface::~WebKitPartInterface):
        (WebKitPartInterface::url):
        * WebKitPart/WebKitPartInterface.h: Renamed from WebKitQt/WebKitPart/WebKitPartInterface.h.
        * WebKitPart/org.kde.WebKitPart.xml: Renamed from WebKitQt/WebKitPart/org.kde.WebKitPart.xml.

2007-10-02  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Eric Seidel.

        Open the requested url on the newly created window.
        Implement createModalDialog and provide new API for this.
        Patch by M. Mehdi Salem Naraghi (momesana) with additions by me.

        * Api/qwebpage.cpp:
        (QWebPage::createModalDialog):
        * Api/qwebpage.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createWindow):
        (WebCore::ChromeClientQt::createModalDialog):

2007-10-02  Lars Knoll  <lars@trolltech.com>

        Reviewed by bdash.

        Add API to retrieve the frame name from QWebFrame.
        Implement support for DRT::dumpChildrenAsText.

        * Api/qwebframe.cpp:
        (QWebFrame::name):
        * Api/qwebframe.h:

2007-10-02  Lars Knoll  <lars@trolltech.com>

        Reviewed by bdash.

        Fix the handling of the response header for data urls. Make sure we always pass absolute URLs to WebKit from both DRT and QtLauncher.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::started):
        (QWebNetworkManager::data):
        (QWebNetworkManager::finished):
        (QWebNetworkInterfacePrivate::sendFileData):
        (QWebNetworkInterfacePrivate::parseDataUrl):
        (WebCoreHttp::scheduleNextRequest):
        (WebCoreHttp::onSslErrors):
        * QtLauncher/main.cpp:
        (main):

2007-10-01  Lars Knoll  <lars@trolltech.com>

        Reviewed by Eric.

        Fix a wrong extension mapping in the MIMETypeRegistry and identify about: url's as frames in the FrameLoaderClient.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::makeDocumentView):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFailProvisionalLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoad):
        (WebCore::FrameLoaderClientQt::objectContentType):
        (WebCore::FrameLoaderClientQt::createPlugin):

2007-09-30  George Staikos  <staikos@kde.org>

        Qt build fix (OS X specific).

        * QtLauncher/QtLauncher.pro:

2007-09-26  Mark Rowe  <mrowe@apple.com>

        Qt build fix.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::objectContentType): Check for empty URL instead of invalid URL.

2007-09-25  David Kilzer  <ddkilzer@webkit.org>

        Reviewed by Adam.

        - Fix http://bugs.webkit.org/show_bug.cgi?id=14885
          LGPL'ed files contain incorrect FSF address

        * Api/qcookiejar.cpp:
        * Api/qcookiejar.h:
        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * Api/qwebhistoryinterface.cpp:
        * Api/qwebhistoryinterface.h:
        * Api/qwebkitglobal.h:
        * Api/qwebnetworkinterface.cpp:
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        * Api/qwebobjectplugin.cpp:
        * Api/qwebobjectplugin.h:
        * Api/qwebobjectpluginconnector.cpp:
        * Api/qwebobjectpluginconnector.h:
        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebpagehistory.cpp:
        * Api/qwebpagehistory.h:
        * Api/qwebsettings.cpp:
        * Api/qwebsettings.h:
        * WebCoreSupport/EditCommandQt.cpp:
        * WebCoreSupport/EditCommandQt.h:

2007-09-25  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Simon and Lars.

        Modifies the addToJSWindowObject to bind js objects using the built-in
        kjs_window class.  Make sure to protect the created runtime object from
        garbage collection.

        Adds a signal to QWebFrame to notify clients of the beginning of a
        provisional load.  DRT needs this.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJSWindowObject):
        * Api/qwebframe.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidStartProvisionalLoad):

2007-09-10  Qing Zhao  <qing@staikos.net>

        Reviewed by George Staikos.

        Don't re-encode urls, resulting in double encoding.  Fixes login to
        GMail.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequestPrivate::init):
        (QWebNetworkManager::started):

2007-09-08  Mark Rowe  <mrowe@apple.com>

        Qt build fix.  Move stub method implementations to the right class.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::didPerformFirstNavigation):

2007-09-08  Brady Eidson  <beidson@apple.com>

        YABF (Yet Another Build Fix)

        * Api/qwebsettings.cpp:
        (QWebSettings::iconDatabaseEnabled):

2007-09-08  Brady Eidson  <beidson@apple.com>

        Better build fix

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClient::registerForIconNotification):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-09-08  Brady Eidson  <beidson@apple.com>

        Build fix

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClient::registerForIconNotification):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-09-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler, Maciej Stachowiak, Mark Rowe, Tim Hatcher.
        
        Fixed <rdar://problem/5326009> Make non-browser WebKit clients have no 
        memory cache, or a very tiny one
        
        Keep the Qt build working with an empty stub.
        
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClient::didPerformFirstNavigation):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-09-07  George Staikos  <staikos@kde.org>

        Fix typo.

        * Api/qwebpage.cpp:
        (QWebPage::onLoadProgressChanged):

2007-09-07  Qing Zhao  <qing@staikos.net>

        Reviewed by Anders and George.

        Export page size and load progress in bytes.

        * Api/qwebpage.cpp:
        (QWebPage::QWebPage):
        (QWebPage::onLoadProgressChanged):
        (QWebPage::totalBytes):
        (QWebPage::bytesReceived):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2007-09-06  George Staikos  <staikos@kde.org>

        Reviewed by Anders.

        Make popup windows work again.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction):

2007-09-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam.

        <rdar://problem/5344848> IME is incorrectly used for key events when on non-editable regions
 
        EditorClient::setInputMethodState stub

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::setInputMethodState):
        * WebCoreSupport/EditorClientQt.h:

2007-08-30  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Use QKeySequence::StandardKey for the page wise scrolling shortcuts.

        * Api/qwebpage.cpp:
        (QWebPage::keyPressEvent):

2007-08-30  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        When scrolling with the keyboard don't call update() on the entire widget.
        The scrollbar/scrollview implementation is already smart enough to scroll with bitblt
        on a value change.

        * Api/qwebpage.cpp:
        (QWebPage::keyPressEvent):

2007-08-30  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Fix scrolling with the keyboard if only one of the two scrollbars is visible.

        * Api/qwebpage.cpp:
        (QWebPage::keyPressEvent):

2007-08-29  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Fix compilation.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::objectContentType):

2007-08-19  Mike Hommey  <mh+webkit@glandium.org>

        Reviewed by George Staikos.

        Don't export ICO symbols.

        * Plugins/Plugins.pro:

2007-08-19  George Staikos  <staikos@kde.org>

        Fix compilation.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-08-10  Lars Knoll  <lars@trolltech.com>

        Reviewed and landed by Simon.

        Limit the set of properties from the computed style to apply to Qt
        plugin widgets, as only a few of them make sense.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::):

2007-08-10  Lars Knoll  <lars@trolltech.com>

        Reviewed by Simon.

        Use <object>'s classid attribute for creation of plugins through QWebPage::createPlugin.

        * Api/qwebpage.cpp:
        (QWebPage::createPlugin):
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::objectContentType):
        (WebCore::FrameLoaderClientQt::createPlugin):

2007-08-10  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added support for network jobs from Qt resources using the qrc protocol.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkInterface::addJob):

2007-08-10  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added support for "application/x-qt-styled-widget" that is treated like "application/x-qt-plugin" but also
        gets a Qt widget stylesheet set from the CSS computed style and the element style attribute.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::objectContentType):
        (WebCore::):
        (WebCore::FrameLoaderClientQt::createPlugin):

2007-08-10  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added virtual QWebPage::createPlugin that is called for embedded objects with the mime type "application/x-qt-plugin"
        and fixed widget embedding by setting the right QWidget parent.

        * Api/qwebpage.cpp:
        (QWebPage::createPlugin):
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::objectContentType):
        (WebCore::FrameLoaderClientQt::createPlugin):

2007-08-02  George Staikos  <staikos@kde.org>

        Reviewed by Simon.

        Add an interface for the useragent string.

        * Api/qwebpage.cpp:
        (QWebPage::userAgentStringForUrl):
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::userAgent):

2007-08-01  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Add an interface to manage global history for clients

        * Api/headers.pri:
        * Api/qwebhistoryinterface.cpp: Added.
        (WebCore::historyContains):
        (gCleanupInterface):
        (QWebHistoryInterface::setDefaultInterface):
        (QWebHistoryInterface::defaultInterface):
        (QWebHistoryInterface::QWebHistoryInterface):
        * Api/qwebhistoryinterface.h: Added.

2007-07-30  Adam Treat  <adam.treat@torchmobile.com>

        Fix build.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::shouldMoveRangeAfterDelete):
        * WebCoreSupport/EditorClientQt.h:

2007-07-30  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Link QtLauncher into $$OUTPUT_DIR/bin

        * QtLauncher/QtLauncher.pro:

2007-07-29  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George Staikos.

        Change QWebPage::paintEvent to draw using the individual rects provided
        via the QRegion and set the widget to use opaque paint events.

        These changes greatly reduce the cpu load as we are no longer painting the
        entire page for each 1px scroll :P

        * Api/qwebframe.cpp:
        (QWebFrame::render):
        * Api/qwebpage.cpp:
        (QWebPage::QWebPage):
        (QWebPage::paintEvent):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::addToDirtyRegion):

2007-07-29  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Alexey Proskuryakov.

        Respect the margins when creating frames.
        Set the scroll mode to always off like we did before the rendered
        frames patch and the other ports do now.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):

2007-07-27  Holger Hans Peter Freyther  <zecke@selfish.org>

        Reviewed by Mark.

        Don't create an app bundle on OSX to keep WebKitTools/Scripts/run-launcher working.

        * QtLauncher/QtLauncher.pro:

2007-07-27  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Fix compilation with MSVC.

        * Api/qwebpagehistory.cpp:
        (QWebPageHistory::operator=):
        * Api/qwebpagehistory.h:
        * Api/qwebsettings.cpp:
        (QWebSettings::operator=):
        * Api/qwebsettings.h:

2007-07-26  Qing Zhao  <qing@staikos.net>

        Reviewed by George Staikos.

        Add a signal for history notification.

        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:

2007-07-24  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by Niko and Lars.

        These are no longer necessary or used.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-07-20  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Add a signal for first layout and add the action type for the policy
        function.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::navigationRequested):
        (QWebPage::navigationRequested):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidFirstLayout):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):

2007-07-19  Adam Treat  <adam.treat@torchmobile.com>

        Reviewed by George.

        Do a recursive layout on the frame's children.  This fixes a
        segfault found when rendering some framesets.

        * Api/qwebframe.cpp:
        (QWebFrame::render):
        (QWebFrame::layout):
        * Api/qwebframe.h:

2007-07-18  Timothy Hatcher  <timothy@apple.com>

        Reviewed by Adam.

        Make the Page with the now required InspectorClient.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * WebKitPart/WebKitPart.cpp:
        (WebKitPart::initView):

2007-07-18  Sam Weinig  <sam@webkit.org>

        Build fix.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::started):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::canShowMIMEType):
        (WebCore::FrameLoaderClientQt::objectContentType):

2007-07-18  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack & Simon

        Reallow setting of scrollbar policies on QWebFrame.

        * Api/qwebframe.cpp:
        (QWebFrame::verticalScrollBarPolicy):
        (QWebFrame::setVerticalScrollBarPolicy):
        (QWebFrame::horizontalScrollBarPolicy):
        * Api/qwebframe.h:

2007-07-17  Adam Treat <adam.treat@torchmobile.com>

        Build fix.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):

2007-07-17  Holger Hans Peter Freyther  <zecke@selfish.org>

        Blind build fix for Qt after r24366 by adding the additional
        WebCore::ResourceRequest& parameter to the download method.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::download):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-07-17  Adam Roben  <aroben@apple.com>

        Remove ContextMenuClientQt::shouldIncludeInspectElementItem

        Reviewed by Tim.

        * WebCoreSupport/ContextMenuClientQt.cpp:
        * WebCoreSupport/ContextMenuClientQt.h:

2007-07-16  Adam Roben  <aroben@apple.com>

        Updated ChromeClientQt for ChromeClient changes.

        Reviewed by Darin Adler.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::print): Added a Frame* parameter.
        * WebCoreSupport/ChromeClientQt.h: Ditto.

2007-07-13  Mark Rowe  <mrowe@apple.com>

        Reviewed by Mitz.

        Build fix.  Stub out ChromeClientQt::print.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::print):
        * WebCoreSupport/ChromeClientQt.h:

2007-07-12  George Staikos  <staikos@kde.org>

        Qt build fix for assertions.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):

2007-07-12  George Staikos  <staikos@kde.org>

        Qt build fix.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):

2007-07-10  Mark Rowe  <mrowe@apple.com>

        Qt build fix after r24126.

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):

2007-07-10  Eli Fidler  <eli@staikos.net>

        Reviewed by George Staikos.

        Properly url-decode data urls.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkInterfacePrivate::parseDataUrl):

2007-07-09  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Convert QWebFrame from a QFrame to a pure QObject to eliminate all
        traces of widgets.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        (QWebFramePrivate::parentFrame):
        (QWebFrame::QWebFrame):
        (QWebFrame::render):
        (QWebFrame::pos):
        (QWebFrame::geometry):
        (QWebFrame::evaluateJavaScript):
        (QWebFrame::mouseMoveEvent):
        (QWebFrame::mousePressEvent):
        (QWebFrame::mouseDoubleClickEvent):
        (QWebFrame::mouseReleaseEvent):
        (QWebFrame::wheelEvent):
        * Api/qwebframe.h:
        * Api/qwebobjectpluginconnector.cpp:
        (QWebObjectPluginConnector::pluginParentWidget):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::createMainFrame):
        (QWebPage::QWebPage):
        (QWebPage::javaScriptAlert):
        (QWebPage::javaScriptConfirm):
        (QWebPage::javaScriptPrompt):
        (QWebPage::resizeEvent):
        (QWebPage::paintEvent):
        (QWebPage::mouseMoveEvent):
        (QWebPage::mousePressEvent):
        (QWebPage::mouseDoubleClickEvent):
        (QWebPage::mouseReleaseEvent):
        (QWebPage::wheelEvent):
        (QWebPage::keyPressEvent):
        (QWebPage::keyReleaseEvent):
        (QWebPage::focusInEvent):
        (QWebPage::focusOutEvent):
        (QWebPage::focusNextPrevChild):
        (QWebPage::chooseFile):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::addToDirtyRegion):

2007-07-09  George Staikos  <staikos@kde.org>

        Fix a minor memory leak in the loader.

        * Api/qwebnetworkinterface.cpp:
        (gCleanupInterface):
        (QWebNetworkInterface::setDefaultInterface):
        (QWebNetworkInterface::defaultInterface):

2007-07-09  George Staikos  <staikos@kde.org>

        Fix a massive memory leak in the loader.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::httpConnectionClosed):
        (WebCoreHttp::~WebCoreHttp):

2007-07-09  George Staikos  <staikos@kde.org>

        Reviewed by Simon.

        Rework much of the HTTP stuff to make it more stable, and add SSL and
        proxy support.  Major memory leak also discovered but it needs more
        research as the obvious fix causes crashes.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):
        (QWebNetworkManager::started):
        (QWebNetworkManager::data):
        (WebCoreHttp::WebCoreHttp):
        (WebCoreHttp::~WebCoreHttp):
        (WebCoreHttp::request):
        (WebCoreHttp::scheduleNextRequest):
        (WebCoreHttp::getConnection):
        (WebCoreHttp::onResponseHeaderReceived):
        (WebCoreHttp::onReadyRead):
        (WebCoreHttp::onRequestFinished):
        (WebCoreHttp::onDone):
        (WebCoreHttp::onStateChanged):
        (WebCoreHttp::onSslErrors):
        (WebCoreHttp::onAuthenticationRequired):
        (WebCoreHttp::onProxyAuthenticationRequired):
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        (WebCore::WebCoreHttp::HttpConnection::HttpConnection):

2007-07-06  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Convert QWebFrame to a QFrame from a scroll area.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        (QWebFramePrivate::parentFrame):
        (QWebFramePrivate::horizontalScrollBar):
        (QWebFramePrivate::verticalScrollBar):
        (QWebFrame::QWebFrame):
        (QWebFrame::resizeEvent):
        (QWebFrame::suppressScrollbars):
        (QWebFrame::paintEvent):
        (QWebFrame::mouseMoveEvent):
        (QWebFrame::mousePressEvent):
        (QWebFrame::mouseDoubleClickEvent):
        (QWebFrame::mouseReleaseEvent):
        (QWebFrame::wheelEvent):
        (QWebFrame::keyPressEvent):
        (QWebFrame::focusInEvent):
        (QWebFrame::focusOutEvent):
        (QWebFrame::evaluateJavaScript):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * Api/qwebobjectpluginconnector.cpp:
        (QWebObjectPluginConnector::pluginParentWidget):

2007-07-04  Adam Roben  <aroben@apple.com>

        Added a stub for ChromeClientQt::setToolTip

        Reviewed by Sam.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::setToolTip):
        * WebCoreSupport/ChromeClientQt.h:

2007-07-04  Adam Roben  <aroben@apple.com>

        Added a stub for ChromeClientQt::mouseDidMoveOverElement

        Reviewed by Sam.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::mouseDidMoveOverElement):
        * WebCoreSupport/ChromeClientQt.h:

2007-06-28  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Propagate mouse double click events from Qt to WebCore.

        * Api/qwebframe.cpp:
        (QWebFrame::mouseDoubleClickEvent):
        * Api/qwebframe.h:

2007-06-28  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Implemented clipboard functions in QWebPage, in particular can(Cut|Copy|Paste), cut/copy/paste as slot as well as a selectionChanged() signal.

        * Api/qwebpage.cpp:
        (QWebPage::canCut):
        (QWebPage::canCopy):
        (QWebPage::canPaste):
        (QWebPage::cut):
        (QWebPage::copy):
        (QWebPage::paste):
        * Api/qwebpage.h:
        * WebCoreSupport/EditorClientQt.cpp:

2007-06-27  George Staikos  <staikos@kde.org>

        Compile with various Qt configurations.

        * Api/qwebnetworkinterface.cpp:
        (WebCoreHttp::scheduleNextRequest):
        * Api/qwebpage.cpp:
        (QWebPage::javaScriptPrompt):
        (QWebPage::dragEnterEvent):
        (QWebPage::dragLeaveEvent):
        (QWebPage::dragMoveEvent):
        (QWebPage::dropEvent):
        (QWebPage::chooseFile):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::DragClientQt::startDrag):

2007-06-27  Eli Fidler  <eli@staikos.net>

        Reviewed by George Staikos.

        Check for QT_NO_IMAGE_TEXT and compile either way.

        * Plugins/ICOHandler.cpp:
        (ICOHandler::read):

2007-06-27  Eli Fidler  <eli@staikos.net>

        Reviewed by George Staikos.

        Remove QT3_SUPPORT dependency in the ICO plugin.

        * Plugins/ICOHandler.cpp:
        (IcoHeader::loadFromDIB):

2007-06-25  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Start to add proxy and SSL support to WebKit Qt.  Proxy works
        unauthenticated.  Added hooks to be able to add authentication.
        Also fixes some network errors.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequestPrivate::setURL):
        (QWebNetworkJob::frame):
        (WebCoreHttp::WebCoreHttp):
        (WebCoreHttp::scheduleNextRequest):
        (WebCoreHttp::onRequestFinished):
        (WebCoreHttp::onDone):
        (WebCoreHttp::onSslErrors):
        (WebCoreHttp::onAuthenticationRequired):
        (WebCoreHttp::onProxyAuthenticationRequired):
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        * Api/qwebpage.cpp:
        (QWebPage::setNetworkProxy):
        (QWebPage::networkProxy):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2007-06-21  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Implement the default resources on Qt.

        * Api/qwebpage.cpp:
        (QWebPage::icon):
        * Api/qwebsettings.cpp:
        (QWebSettings::setWebGraphic):
        (QWebSettings::webGraphic):
        (loadResourcePixmap):
        * Api/qwebsettings.h:

2007-06-15  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Add ICO support to the Qt build.

        * Api/qwebpage.cpp:
        (QWebPage::icon):
        * Api/qwebpage.h:
        * Api/qwebsettings.cpp:
        (QWebSettings::setIconDatabaseEnabled):
        (QWebSettings::iconDatabaseEnabled):
        * Api/qwebsettings.h:
        * Plugins: Added.
        * Plugins/ICOHandler.cpp: Added.
        (IcoHeader::operator >>):
        (IcoHeader::BMP_INFOHDR::):
        (IcoHeader::operator<<):
        (IcoHeader::LessDifference::LessDifference):
        (IcoHeader::LessDifference::operator ()):
        (IcoHeader::loadFromDIB):
        (ICOHandler::ICOHandler):
        (ICOHandler::canRead):
        (ICOHandler::read):
        (ICOHandler::write):
        (ICOHandler::name):
        (ICOPlugin::keys):
        (ICOPlugin::capabilities):
        (ICOPlugin::create):
        * Plugins/ICOHandler.h: Added.
        * Plugins/Plugins.pro: Added.
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveIcon):

2007-06-15  George Staikos  <staikos@kde.org>

        Fixing the Qt build.

        * WebCoreSupport/ContextMenuClientQt.cpp:
        (WebCore::ContextMenuClientQt::shouldIncludeInspectElementItem):
        * WebCoreSupport/ContextMenuClientQt.h:

2007-06-20  Adam Roben  <aroben@apple.com>

        More speculative Qt build fixes.

        Add a stub implementation of InspectorClientQt.

        * WebCoreSupport/InspectorClientQt.cpp: Added.
        (WebCore::InspectorClientQt::inspectorDestroyed):
        (WebCore::InspectorClientQt::createPage):
        (WebCore::InspectorClientQt::showWindow):
        (WebCore::InspectorClientQt::closeWindow):
        (WebCore::InspectorClientQt::attachWindow):
        (WebCore::InspectorClientQt::detachWindow):
        (WebCore::InspectorClientQt::highlight):
        (WebCore::InspectorClientQt::hideHighlight):
        * WebCoreSupport/InspectorClientQt.h: Added.

2007-06-19  George Staikos  <staikos@kde.org>

        Reviewed by Tim Hatcher.

        Add https support.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkInterface::addJob):
        (QWebNetworkInterface::cancelJob):
        (WebCoreHttp::WebCoreHttp):

2007-06-14  George Staikos  <staikos@kde.org>

        Reviewed by Lars.

        Add evaluateJavaScript() method.

        * Api/qwebframe.cpp:
        (QWebFrame::evaluateJavaScript):
        * Api/qwebframe.h:

2007-06-14  George Staikos  <staikos@kde.org>

        Reviewed by Lars.

        Implement most of the editing commands, better focus handling, fix some
        keyboard and mouse handling, and add keyboard navigation.  May be
        refactored later as the key switches are ugly.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        (QWebFrame::mousePressEvent):
        (QWebFrame::mouseReleaseEvent):
        (QWebFrame::wheelEvent):
        (QWebFrame::keyPressEvent):
        (QWebFrame::keyReleaseEvent):
        (QWebFrame::focusInEvent):
        (QWebFrame::focusOutEvent):
        (QWebFrame::focusNextPrevChild):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeypress):

2007-06-14  George Staikos  <staikos@kde.org>

        Reviewed by Lars.

        Implement all of the Javascript dialogs and file chooser.
        Also makes the statusbar virtual into a signal and shuffles some
        virtuals around a bit.  The helper in FrameLoaderClientQt may go away
        shortly.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPage::javaScriptAlert):
        (QWebPage::javaScriptConfirm):
        (QWebPage::javaScriptPrompt):
        (QWebPage::chooseFile):
        * Api/qwebpage.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::canRunBeforeUnloadConfirmPanel):
        (WebCore::ChromeClientQt::runBeforeUnloadConfirmPanel):
        (WebCore::ChromeClientQt::runJavaScriptAlert):
        (WebCore::ChromeClientQt::runJavaScriptConfirm):
        (WebCore::ChromeClientQt::runJavaScriptPrompt):
        (WebCore::ChromeClientQt::setStatusbarText):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::chooseFile):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-06-14  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Removed QWebHistoryItem::parent() as it is not implemented and WebCore's

        HistoryItem itself doesn't seem to have a parent pointer either.

        * Api/qwebpagehistory.h:

2007-06-14  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Make it possible to copy QWebHistoryItem objects.

        * Api/qwebpagehistory.cpp:
        * Api/qwebpagehistory.h:

2007-06-14  Lars Knoll <lars@trolltech.com>

        Reviewed by George

        Fix a crash when a request from the plugin resulted
        in a HTTP redirect.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::started):

2007-06-14  Lars Knoll <lars@trolltech.com>

        Reviewed by George.

        Work around a bug in Qt's QHttp implementation and
        get web pages to load again.

        * Api/qwebpage.cpp:
        (QWebPage::open):

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added a make install target that installs the Qt port and renamed
        WebKitQt to QtWebKit

        * Api/headers.pri: Added.
        * Api/qtwebkit.prf: Added.

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added httpHeaderField setter/getter to QWebNetworkRequest for convenience.

        * Api/qwebnetworkinterface.cpp:
        * Api/qwebnetworkinterface.h:

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Changed QWebObjectPluginConnector::requestUrl to take a QWebNetworkRequest as argument.

        * Api/qwebnetworkinterface.h:
        * Api/qwebobjectpluginconnector.cpp:
        (QWebObjectPluginConnector::requestUrl):
        * Api/qwebobjectpluginconnector.h:

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added a QWebNetworkRequest convenience constructor.

        * Api/qwebnetworkinterface.cpp:
        * Api/qwebnetworkinterface.h:
        * Api/qwebpage.cpp:
        (QWebPage::open):

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Changed the QWebPage::open(const QUrl &url, const QHttpRequestHeader &httpHeader, const QByteArray &postData)
        overload to take a QWebNetworkRequest instead.

        * Api/qwebpage.cpp:
        (QWebPage::open):
        * Api/qwebpage.h:

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        In QWebPage::open(const QUrl &, const QHttpRequestHeader &, ...) don't make the population
        of the WebCore::ResourceRequest depend on the validity of the QHttpRequestHeader but just
        pick the individual fields if we can use them.

        * Api/qwebpage.cpp:
        (QWebPage::open):

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Minor QWebNetworkRequet API fixlet

        * Api/qwebnetworkinterface.cpp:
        * Api/qwebnetworkinterface.h:

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Use QWebNetworkRequest for QWebPage::navigationRequested.

        * Api/qwebnetworkinterface.cpp:
        * Api/qwebnetworkinterface.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::navigationRequested):
        (QWebPage::navigationRequested):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Some docs for QWebNetworkRequest

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequest::QWebNetworkRequest):
        (QWebNetworkRequest::~QWebNetworkRequest):

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Moved QWebNetworkJob::Method enum into QWebNetworkRequest.

        * Api/qwebnetworkinterface.h:
        * Api/qwebobjectpluginconnector.cpp:
        (QWebObjectPluginConnector::requestUrl):
        * Api/qwebobjectpluginconnector.h:

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Rename QWebNetworkJob::request() into QWebNetworkJob::httpHeader() and added

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkJob::postData):
        (WebCoreHttp::WebCoreHttp):
        (WebCoreHttp::scheduleNextRequest):
        * Api/qwebnetworkinterface.h:

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Introduce QWebNetworkRequest in the public API.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequestPrivate::init):
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Changed QWebNetworkJobPrivate to aggregate a QWebNetworkRequest instead of inheriting from it.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):
        (QWebNetworkManager::started):
        (QWebNetworkManager::data):
        (QWebNetworkManager::finished):
        * Api/qwebnetworkinterface_p.h:
        * Api/qwebobjectpluginconnector.cpp:
        (QWebObjectPluginConnector::requestUrl):

2007-06-13  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Rename QWebNetworkRequest::request into QWebNetworkRequest::httpHeader.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequest::init):
        (QWebNetworkRequest::setURL):
        (QWebNetworkManager::add):
        (QWebNetworkManager::started):
        * Api/qwebnetworkinterface_p.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):

2007-06-12  Lars Knoll <lars@trolltech.com>

        Reviewed by George Staikos.

        Remove duplicate symbols.

        * Api/qwebobjectplugin_p.h:

2007-06-13  Lars Knoll <lars@trolltech.com>

        Reviewed by Niko.

        Fix compilation, and remove dependency on Qt
        private header.

        * Api/qwebobjectplugin_p.h:
        (QWebFactoryLoader::supportsMimeType):

2007-06-13  Lars Knoll <lars@trolltech.com>

        Reviewed by Niko.

        Parts of the patch done by Zack.
        Fix up some parts in the implementation of QWebNetworkInterface
        so it can be used by plugins.
        Change the plugin API so we can actually get all the information
        required by the JS bridge from them as well.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkJob::cancelled):
        (QWebNetworkManager::cancel):
        (QWebNetworkManager::started):
        (QWebNetworkManager::finished):
        * Api/qwebobjectplugin.cpp:
        (QWebFactoryLoader::QWebFactoryLoader):
        (QWebFactoryLoader::descriptionForName):
        (QWebFactoryLoader::mimetypesForName):
        (QWebFactoryLoader::mimeTypeForExtension):
        (QWebFactoryLoader::extensions):
        (QWebFactoryLoader::nameForMimetype):
        (QWebFactoryLoader::create):
        (QWebObjectPlugin::descriptionForKey):
        (QWebObjectPlugin::mimetypesForKey):
        * Api/qwebobjectplugin.h:
        * Api/qwebobjectplugin_p.h:
        (QWebFactoryLoader::names):
        * Api/qwebobjectpluginconnector.cpp:
        (QWebObjectPluginConnector::requestUrl):
        * Api/qwebpage.cpp:
        (QWebPage::networkInterface):

2007-06-11  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added a QWebPage::open overload to allow specifying the http header and post data.
        (it's an overload instead of a merged openUrl to avoid including qhttp.h in qwebpage.h,
        which would imply that one has to have QT += network in the .pro file for using WebKitQt)

        * Api/qwebpage.cpp:
        * Api/qwebpage.h:

2007-06-11  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added the possibility to intercept url requests through QWebPage::navigationRequested.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPage::createFrame):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:

2007-06-11  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Added a QWebNetworkRequest::init overload that takes a WebCore::ResourceRequest,
        to be called from FrameLoaderClientQt in the near future.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):
        * Api/qwebnetworkinterface_p.h:

2007-06-11  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Moved the postData setup into QWebNetworkRequest::init.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequest::init):
        (QWebNetworkManager::add):

2007-06-11  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Moved HTTP header field propagation to QWebNetworkRequest::init.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequest::init):
        (QWebNetworkManager::add):

2007-06-11  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        Started moving the code to separate a WebCore::ResourceRequest into a QUrl, postData
        and QHttpRequestHeader into a separate little QWebNetworkRequest struct.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkRequest::init):
        (QWebNetworkManager::add):
        * Api/qwebnetworkinterface_p.h:
        * Api/qwebobjectpluginconnector.cpp:
        (QWebObjectPluginConnector::requestUrl):

2007-06-11  Zack Rusin <zrusin@trolltech.com>

        Reviewed by Lars

        Forgot to export the plugin connector.

        * Api/qwebobjectpluginconnector.h

2007-06-08  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack.

        Add a QWebObjectPluginConnector class. The class will
        facility communication between the plugin and WebKit.
        Currently it's used to make the plugin network capable.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkJobPrivate::setDefaults):
        (QWebNetworkManager::add):
        (QWebNetworkManager::started):
        (QWebNetworkManager::data):
        (QWebNetworkManager::finished):
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        (QWebNetworkJobPrivate::QWebNetworkJobPrivate):
        * Api/qwebobjectplugin.cpp:
        (QWebFactoryLoader::create):
        * Api/qwebobjectplugin.h:
        * Api/qwebobjectplugin_p.h:
        * Api/qwebobjectpluginconnector.cpp: Added.
        (QWebObjectPluginConnector::QWebObjectPluginConnector):
        (QWebObjectPluginConnector::frame):
        (QWebObjectPluginConnector::pluginParentWidget):
        (QWebObjectPluginConnector::requestUrl):
        * Api/qwebobjectpluginconnector.h: Added.
        (QWebObjectPluginConnector::):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createPlugin):

2007-06-06  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Add an API to create and load plugins.
        Don't include moc files by hand anymore, rather let
        qmake handle them.

        * Api/qcookiejar.cpp:
        (QCookieJar::cookieJar):
        * Api/qwebframe.cpp:
        (QWebFrame::scrollContentsBy):
        * Api/qwebnetworkinterface.cpp:
        * Api/qwebobjectplugin.cpp: Added.
        (QWebFactoryLoader::QWebFactoryLoader):
        (QWebFactoryLoader::self):
        (QWebFactoryLoader::mimeTypeForExtension):
        (QWebFactoryLoader::create):
        (QWebObjectPlugin::QWebObjectPlugin):
        (QWebObjectPlugin::~QWebObjectPlugin):
        (QWebObjectPlugin::extensionsForMimetype):
        * Api/qwebobjectplugin.h: Added.
        * Api/qwebobjectplugin_p.h: Added.
        (QWebFactoryLoader::mimeTypes):
        (QWebFactoryLoader::extensions):
        (QWebFactoryLoader::supportsMimeType):
        * Api/qwebpage.cpp:
        (QWebPage::settings):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientQt::postProgressEstimateChangedNotification):
        (WebCore::FrameLoaderClientQt::objectContentType):
        (WebCore::FrameLoaderClientQt::createPlugin):

2007-05-28  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by andersca and simon

        Adding public settings Api to the Qt port.
        QWebSetting's is a value based settings
        object settable on the QWebPage.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPage::QWebPage):
        (QWebPage::setSettings):
        (QWebPage::settings):
        * Api/qwebpage.h:
        * Api/qwebsettings.cpp: Added.
        (QWebSettingsPrivate::QWebSettingsPrivate):
        (QWebSettings::QWebSettings):
        (QWebSettings::~QWebSettings):
        (QWebSettings::setMinimumFontSize):
        (QWebSettings::minimumFontSize):
        (QWebSettings::setMinimumLogicalFontSize):
        (QWebSettings::minimumLogicalFontSize):
        (QWebSettings::setDefaultFontSize):
        (QWebSettings::defaultFontSize):
        (QWebSettings::setDefaultFixedFontSize):
        (QWebSettings::defaultFixedFontSize):
        (QWebSettings::setUserStyleSheetLocation):
        (QWebSettings::userStyleSheetLocation):
        (QWebSettings::setGlobal):
        (QWebSettings::global):
        (QWebSettings::setFontFamily):
        (QWebSettings::fontFamily):
        (QWebSettings::setAttribute):
        (QWebSettings::testAttribute):
        * Api/qwebsettings.h: Added.
        * QtLauncher/main.cpp:
        (main):
2007-05-27  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Sam Weinig.
        
        Consolidate all notImplemented() macro definitions into
        one header file for all platforms.

        * WebCoreSupport/ChromeClientQt.cpp:
        * WebCoreSupport/ContextMenuClientQt.cpp:
        * WebCoreSupport/EditorClientQt.cpp:
        * WebCoreSupport/FrameLoaderClientQt.cpp:

2007-05-25  George Staikos  <staikos@kde.org>

        Reviewed by Simon.

        The http loader should only ask for .... http cookies!

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):

2007-05-24  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Fix multipart/form-data HTTP POSTs. The content-type wasn't set
        correctly. Fortunately WebCore does it already, so there's no need
        for us to do it since we already transfer all HTTP header fields :)

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):

2007-05-23  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack, idea from Lars.

        Share WebCoreHttp and therefore HTTP connections among multiple
        QWebNetworkInterface instances by moving the code into
        QWebNetworkManager.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::addHttpJob):
        (QWebNetworkManager::cancelHttpJob):
        (QWebNetworkManager::httpConnectionClosed):
        (QWebNetworkInterface::addJob):
        (QWebNetworkInterface::cancelJob):
        (WebCoreHttp::scheduleNextRequest):
        (WebCoreHttp::onResponseHeaderReceived):
        (WebCoreHttp::onReadyRead):
        (WebCoreHttp::onRequestFinished):
        (WebCoreHttp::cancel):
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:

2007-05-23  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack, discussed also with Lars.

        Make it possible to specify a per-QWebPage network interface (needed
        for the KDE KIO integration).

        Merged the file and the network loader into
        QWebNetworkInterface(Private), which simplifies the loading code.

        When receiving a redirection don't emit the data of the redirected job
        to the document. (otherwise the kind of "This page has moved" text
        appears right on top of the real page content)

        * Api/qwebnetworkinterface.cpp:
        (qHash):
        (operator==):
        (QWebNetworkJob::QWebNetworkJob):
        (QWebNetworkJob::networkInterface):
        (QWebNetworkManager::add):
        (QWebNetworkManager::cancel):
        (QWebNetworkManager::data):
        (QWebNetworkManager::finished):
        (QWebNetworkInterfacePrivate::sendFileData):
        (QWebNetworkInterfacePrivate::parseDataUrl):
        (QWebNetworkInterfacePrivate::addHttpJob):
        (QWebNetworkInterfacePrivate::httpConnectionClosed):
        (QWebNetworkInterface::setDefaultInterface):
        (QWebNetworkInterface::QWebNetworkInterface):
        (QWebNetworkInterface::addJob):
        (QWebNetworkInterface::cancelJob):
        (WebCoreHttp::scheduleNextRequest):
        (WebCoreHttp::onResponseHeaderReceived):
        (WebCoreHttp::onReadyRead):
        (WebCoreHttp::onRequestFinished):
        (WebCoreHttp::cancel):
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPage::setNetworkInterface):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:

2007-05-23  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Don't do HTTP downloads in a second thread. Simplifies
        the code significantly and fixes crashes on some
        Web pages.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add):
        (QWebNetworkInterface::QWebNetworkInterface):
        (QWebNetworkInterface::addJob):
        (QWebNetworkInterface::cancelJob):
        (LoaderThread::LoaderThread):
        (LoaderThread::run):
        (WebCoreHttp::cancel):
        (NetworkLoader::NetworkLoader):
        (NetworkLoader::request):
        (NetworkLoader::cancel):
        * Api/qwebnetworkinterface_p.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::committedLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveContentLength):

2007-05-23  Lars Knoll <lars@trolltech.com>

        Reviewed by Simon.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkJobPrivate::setURL):
        (QWebNetworkManager::started):
            Fix Host: line in HTTP headers and resolving of relative URLs
            when redirecting.
        * Api/qwebnetworkinterface_p.h:
            Clean up qHash forward declaration a bit.

2007-05-23  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow): Fix loading progress signal/slot connection.

2007-05-22  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Lars.

        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::add): Fix http headers for POST.

2007-05-21  Lars Knoll <lars@trolltech.com>

        Reviewed by Simon

        Remove the userHandle methods from QWebnetworkJob again.
        They don't really give us anything and just clutter the API.

        * Api/qwebnetworkinterface.cpp:
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:

2007-05-21  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        * Api/qwebnetworkinterface.h: Export the net API.

2007-05-21  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack.

        Add an API layer for network downloads. Basically QWebnetworkInterface
        is an interface class for downloading resources. QWebnetworkJob describes
        the actual object to download.

        QWebNetworkInterface has a default implementation that replaces the
        old ResourceHandleManager class in the Qt port.

        * Api/qwebnetworkinterface.cpp: Added.
        (QWebNetworkJobPrivate::setURL):
        (QWebNetworkJob::QWebNetworkJob):
        (QWebNetworkJob::~QWebNetworkJob):
        (QWebNetworkJob::url):
        (QWebNetworkJob::postData):
        (QWebNetworkJob::request):
        (QWebNetworkJob::response):
        (QWebNetworkJob::setResponse):
        (QWebNetworkJob::cancelled):
        (QWebNetworkJob::ref):
        (QWebNetworkJob::deref):
        (QWebNetworkJob::setUserHandle):
        (QWebNetworkJob::userHandle):
        (QWebNetworkManager::QWebNetworkManager):
        (QWebNetworkManager::self):
        (QWebNetworkManager::add):
        (QWebNetworkManager::cancel):
        (QWebNetworkManager::started):
        (QWebNetworkManager::data):
        (QWebNetworkManager::finished):
        (QWebNetworkInterface::setDefaultInterface):
        (QWebNetworkInterface::defaultInterface):
        (QWebNetworkInterface::QWebNetworkInterface):
        (QWebNetworkInterface::~QWebNetworkInterface):
        (QWebNetworkInterface::addJob):
        (QWebNetworkInterface::cancelJob):
        (LoaderThread::LoaderThread):
        (LoaderThread::run):
        (FileLoader::FileLoader):
        (FileLoader::request):
        (FileLoader::sendData):
        (FileLoader::parseDataUrl):
        (WebCoreHttp::WebCoreHttp):
        (WebCoreHttp::~WebCoreHttp):
        (WebCoreHttp::request):
        (WebCoreHttp::scheduleNextRequest):
        (WebCoreHttp::getConnection):
        (WebCoreHttp::onResponseHeaderReceived):
        (WebCoreHttp::onReadyRead):
        (WebCoreHttp::onRequestFinished):
        (WebCoreHttp::onStateChanged):
        (WebCoreHttp::cancel):
        (HostInfo::HostInfo):
        (qHash):
        (operator==):
        (NetworkLoader::NetworkLoader):
        (NetworkLoader::~NetworkLoader):
        (NetworkLoader::request):
        (NetworkLoader::connectionClosed):
        (NetworkLoader::cancel):
        * Api/qwebnetworkinterface.h: Added.
        (QWebNetworkJob::setHandle):
        (QWebNetworkJob::handle):
        * Api/qwebnetworkinterface_p.h: Added.
        (WebCore::LoaderThread::):
        (WebCore::LoaderThread::waitForSetup):
        (WebCore::HostInfo::HostInfo):

2007-05-18  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Nikolas.

        * Api/qwebpage.h: Changed the loadProgressChanged API to use an
        percent integer instead of a double precision floating pointer number.
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setFrame):
        (WebCore::FrameLoaderClientQt::postProgressEstimateChangedNotification):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-05-18  Marius Bugge Monsen  <mbm@trolltech.com>

        Reviewed by Zack Rusin.

        The default constructed KeyboardEvent has
        no PlatformKeyboardEvent.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeypress):

2007-05-17  Adam Treat <adam@staikos.net>

        Reviewed by George Staikos.

        - Implement frameLoadCompleted
        - Fix build (by George)

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::frameLoadCompleted):
        (WebCore::FrameLoaderClientQt::createFrame):

2007-05-17  Adam Treat  <adam@staikos.net>

        Reviewed by George Staikos.

        Implement canShowMIMEType

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::canShowMIMEType):

2007-05-16  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        pass the mouse events to the event handler, not the frameview.

        * Api/qwebframe.cpp:
        (QWebFrame::mouseMoveEvent):
        (QWebFrame::mouseReleaseEvent):

2007-05-14  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Updates after Maciej's frame change.

        * Api/qwebpage.cpp:
        (QWebPage::stop):
              Call stopForUserCancel() instead of stopAllLoaders()
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoad):
        (WebCore::FrameLoaderClientQt::didFinishLoad):
        (WebCore::FrameLoaderClientQt::setMainDocumentError):
        (WebCore::FrameLoaderClientQt::dispatchWillSendRequest):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveResponse):
        (WebCore::FrameLoaderClientQt::dispatchDidFailProvisionalLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoad):
              Call QWebFrame::loadDone() from the places it's supposed to be
              called from.

2007-05-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Rob Buis.
        
        - call Frame::init as needed - this prevents crashes but pages don't appear.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        * WebKitPart/WebKitPart.cpp:
        (WebKitPart::initView):

2007-05-08  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Ada.
        
        Slight modification to last editor method fix.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::updateSpellingUIWithGrammarString):
        * WebCoreSupport/EditorClientQt.h:

2007-05-03  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Oliver.

        Add missing user description parameter to spelling-related editor client method.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::updateSpellingUIWithGrammarString):
        * WebCoreSupport/EditorClientQt.h:

2007-04-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Zack.

        Tie QT drag events to the DragController logic
        to allow drag and drop events to be handled by
        webkit.

        * Api/qwebframe.cpp:
        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPage::QWebPage):
        (dropActionToDragOp):
        (dragOpToDropAction):
        (QWebPage::dragEnterEvent):
        (QWebPage::dragLeaveEvent):
        (QWebPage::dragMoveEvent):
        (QWebPage::dropEvent):
        * Api/qwebpage.h:
        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::DragClientQt::startDrag):
        * WebCoreSupport/DragClientQt.h:
        (WebCore::DragClientQt::DragClientQt):

2007-04-27  Holger Freyther <freyther@kde.org>

        Reviewed by Maciej.

        Remove unmaintained CMake build system.

        * QtLauncher/CMakeLists.txt: Removed.
        * WebKitPart/CMakeLists.txt: Removed.

2007-04-25  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam.
        
        Fix spelling error in spelling method name.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::updateSpellingUIWithGrammarString):
        * WebCoreSupport/EditorClientQt.h:

2007-04-24  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Oliver.
        
        Spelling and grammar stubs

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::ignoreWordInSpellDocument):
        (WebCore::EditorClientQt::learnWord):
        (WebCore::EditorClientQt::checkSpellingOfString):
        (WebCore::EditorClientQt::checkGrammarOfString):
        (WebCore::EditorClientQt::udpateSpellingUIWithGrammarString):
        (WebCore::EditorClientQt::updateSpellingUIWithMisspelledWord):
        (WebCore::EditorClientQt::showSpellingUI):
        (WebCore::EditorClientQt::spellingUIIsShowing):
        (WebCore::EditorClientQt::getGuessesForWord):
        * WebCoreSupport/EditorClientQt.h:

2007-04-11  MorganL  <morganl.webkit@yahoo.com>

        Reviewed by Maciej.

        Add a Frame pointer to ChromeClient methods:
        http://bugs.webkit.org/show_bug.cgi?id=13127

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createWindow):
        (WebCore::ChromeClientQt::createModalDialog):
        * WebCoreSupport/ChromeClientQt.h:

2007-04-12  Mark Rowe  <mrowe@apple.com>

        Second part of Qt build fix.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::loadedFromCachedPage):
        (WebCore::FrameLoaderClientQt::setDocumentViewFromCachedPage):
        (WebCore::FrameLoaderClientQt::saveDocumentViewToCachedPage):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-03-27  Zack Rusin  <zrusin@trolltech.com>

        Fix the rendering crashes due triggered
        asserts. Improve a bit the layout
        scheduling.

        * Api/qwebframe.cpp:
        (QWebFrame::resizeEvent):
        (QWebFrame::paintEvent):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::forceLayout):

2007-03-16  Lars Knoll <lars@trolltech.com>

        Fix the Qt build once again.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeypress):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::blockedError):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-03-13  Lars Knoll <lars@trolltech.com>

        Reviewed by George.

        Don't try to load <object> tags with an invalid url.
        Fixes LayoutTests/fast/dom/object-plugin-hides-properties.html
        which hit an assertion in the frameloader.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::objectContentType):

2007-03-13  Lars Knoll <lars@trolltech.com>

        Reviewed by Anders.

        Fix some crashes in the Qt build.

        * Api/qwebframe.cpp:
        (QWebFrame::markup):
            Check for null pointer
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):
            Don't use an async callback into the FrameLoader.
        (WebCore::FrameLoaderClientQt::createFrame):

2007-03-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adele.

        Stub for EditorClientQt::respondToChangedSelection

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::respondToChangedSelection):
        * WebCoreSupport/EditorClientQt.h:

2007-03-07  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        WebKitQT part of fix for:
        http://bugs.webkit.org/show_bug.cgi?id=10871
        http://bugs.webkit.org/show_bug.cgi?id=12677
        <rdar://problem/4823129> REGRESSION: IME key events different in nightly
        <rdar://problem/4759563> REGRESSION: Return key is always sent when you confirm a clause in kotoeri

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeypress): Changed handleKeyPress to handleKeypress.
        (WebCore::EditorClientQt::handleInputMethodKeypress): Added.
        * WebCoreSupport/EditorClientQt.h:

2007-03-07  Darin Adler  <darin@apple.com>

        * WebCoreSupport/FrameLoaderClientQt.h: Oops, forgot the header.

2007-03-07  Darin Adler  <darin@apple.com>

        * WebCoreSupport/FrameLoaderClientQt.cpp: (WebCore::FrameLoaderClientQt::userAgent):
        Try to fix the build by correcting the parameter here.

2007-03-02  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders.

        Try to fix the Qt build

        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::DragClientQt::willPerformDragDestinationAction):
        (WebCore::DragClientQt::dragControllerDestroyed):
        (WebCore::DragClientQt::createDragImageForLink):

2007-02-26  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Kevin McCullough.

        - fix Qt build for earlier SVG changes.

        * WebCoreSupport/EditCommandQt.cpp:

2007-02-24  Zack Rusin  <zrusin@trolltech.com>

        Adjust the animation a little bit to make it more natural.

        * QtLauncher/main.cpp:
        (HoverLabel::paintEvent):

2007-02-23  Zack Rusin  <zrusin@trolltech.com>

        Adding a little bit of eye-candy to the last
        commit (animations on hover events)

        * QtLauncher/main.cpp:
        (HoverLabel::HoverLabel):
        (HoverLabel::setHoverLink):
        (HoverLabel::sizeForFont):
        (HoverLabel::sizeHint):
        (HoverLabel::resetAnimation):
        (HoverLabel::paintEvent):
        (HoverLabel::interpolate):
        (SearchEdit::resizeEvent):

2007-02-23  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Adding API and code for notification of when the
        mouse is hovering over a link and adding code to
        the sample app to showcase it.

        * Api/qwebframe.cpp:
        (QWebFrame::mouseMoveEvent):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):
        * Api/qwebpage.cpp:
        (QWebPage::createFrame):
        * Api/qwebpage.h:
        * QtLauncher/main.cpp:
        (HoverLabel::HoverLabel):
        (HoverLabel::setHoverLink):
        (HoverLabel::sizeHint):
        (HoverLabel::updateSize):
        (HoverLabel::paintEvent):
        (ClearButton::ClearButton):
        (ClearButton::paintEvent):
        (SearchEdit::SearchEdit):
        (SearchEdit::resizeEvent):
        (SearchEdit::moveEvent):
        (MainWindow::MainWindow):
        (MainWindow::showLinkHover):
        (MainWindow::resizeEvent):

2007-02-22  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Fixing the default scroll offset, cleaning
        up private methods and making the default
        look not use any frames.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        (QWebFramePrivate::_q_handleKeyEvent):
        (QWebFrame::QWebFrame):
        (QWebFrame::wheelEvent):
        (QWebFrame::keyPressEvent):
        (QWebFrame::keyReleaseEvent):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:

2007-02-22  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Make the qwebframe act as a proper canvas.
        Implement it on top of QAbstractScrollArea.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init):
        (QWebFramePrivate::_q_adjustScrollbars):
        (QWebFrame::init):
        (QWebFrame::QWebFrame):
        (QWebFrame::resizeEvent):
        (QWebFrame::childFrames):
        (QWebFrame::paintEvent):
        (QWebFrame::mouseMoveEvent):
        (QWebFrame::mousePressEvent):
        (QWebFrame::mouseReleaseEvent):
        (QWebFrame::wheelEvent):
        (QWebFrame::keyPressEvent):
        (QWebFrame::keyReleaseEvent):
        (QWebFrame::dragEnterEvent):
        (QWebFrame::dragLeaveEvent):
        (QWebFrame::dragMoveEvent):
        (QWebFrame::handleKeyEvent):
        (QWebFrame::scrollContentsBy):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):

2007-02-21  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Add more editing support, and undo/redo.  Requires some nasty evil
        hacks that have to be sorted out in WebCore/editor.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::~QWebPagePrivate):
        (QWebPage::undoStack):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::didBeginEditing):
        (WebCore::EditorClientQt::didEndEditing):
        (WebCore::EditorClientQt::isEditable):
        (WebCore::EditorClientQt::registerCommandForUndo):
        (WebCore::EditorClientQt::registerCommandForRedo):
        (WebCore::EditorClientQt::clearUndoRedoOperations):
        (WebCore::EditorClientQt::canUndo):
        (WebCore::EditorClientQt::canRedo):
        (WebCore::EditorClientQt::undo):
        (WebCore::EditorClientQt::redo):
        (WebCore::EditorClientQt::handleKeyPress):
        (WebCore::EditorClientQt::EditorClientQt):
        (WebCore::EditorClientQt::textFieldDidBeginEditing):
        (WebCore::EditorClientQt::textFieldDidEndEditing):
        (WebCore::EditorClientQt::isEditing):
        * WebCoreSupport/EditorClientQt.h:

2007-02-21  Zack Rusin  <zrusin@trolltech.com>

        Fix compilation.

        * WebCoreSupport/ContextMenuClientQt.cpp:
        * WebCoreSupport/ContextMenuClientQt.h:

2007-02-21  George Staikos  <staikos@kde.org>

        Fix compile.

        * Api/qwebpage.cpp:
        (QWebPage::stop):

2007-02-20  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Make editing of forms work plus make sure that non-void methods
        always return something.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::canRunBeforeUnloadConfirmPanel):
        (WebCore::ChromeClientQt::runBeforeUnloadConfirmPanel):
        (WebCore::ChromeClientQt::runJavaScriptConfirm):
        (WebCore::ChromeClientQt::runJavaScriptPrompt):
        (WebCore::ChromeClientQt::shouldInterruptJavaScript):
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::shouldDeleteRange):
        (WebCore::EditorClientQt::shouldBeginEditing):
        (WebCore::EditorClientQt::shouldEndEditing):
        (WebCore::EditorClientQt::shouldInsertText):
        (WebCore::EditorClientQt::shouldChangeSelectedRange):
        (WebCore::EditorClientQt::shouldApplyStyle):
        (WebCore::EditorClientQt::shouldInsertNode):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidLoadResourceFromMemoryCache):
        (WebCore::FrameLoaderClientQt::dispatchCreatePage):

2007-02-17  Lars Knoll <lars@trolltech.com>

        Reviewed by Maciej.

        Additional coding by Maciej, additional review by Oliver.

        Add stubs for the new methods in ChormeClient and EditorClient,
        remove all references to FrameQt.

        * Api/qwebframe.cpp:
        (QWebFrame::QWebFrame):
        * Api/qwebframe_p.h:
        * Api/qwebpage.cpp:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::shouldInterruptJavaScript):
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::shouldChangeSelectedRange):
        (WebCore::EditorClientQt::isEditable):
        * WebCoreSupport/EditorClientQt.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setFrame):
        (WebCore::FrameLoaderClientQt::webFrame):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-02-18  Oliver Hunt  <oliver@apple.com>

        Build fix -- adding DragClientQt method stubs

        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::DragClientQt::willPerformDragSourceAction):
        (WebCore::DragClientQt::startDrag):
        (WebCore::DragClientQt::createDragImageForLink):
        * WebCoreSupport/DragClientQt.h:

2007-02-15  Brady Eidson  <beidson@apple.com>

        Reviewed by Adam

        Moved scroll state down into the cross platform FrameLoader - 
        Blind attempt at keeping Qt building

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::restoreViewState):
        (WebCore::FrameLoaderClientQt::saveViewStateToItem):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-02-07  Anders Carlsson  <acarlsson@apple.com>

        Try fixing the Qt build.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::shouldInterruptJavaScript):
        * WebCoreSupport/ChromeClientQt.h:

2007-02-02  Zack Rusin  <zrusin@trolltech.com>

        Compilation fix: forward declare d-ptr.

        * Api/qcookiejar.h:

2007-02-02  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Make the frames white by default and get the
        files that WebCore can handle render inside
        the frames.

        * Api/qwebframe.cpp:
        (QWebFrame::QWebFrame):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame):
        (WebCore::FrameLoaderClientQt::objectContentType):

2007-02-01  George Staikos  <staikos@kde.org>

        Reviewed by Zack and Lars.

        Add a cookie interface for the Qt build.

        * Api/qcookiejar.cpp: Added.
        (QCookieJarPrivate::QCookieJarPrivate):
        (qHash):
        (QCookieJar::QCookieJar):
        (QCookieJar::~QCookieJar):
        (QCookieJar::setCookies):
        (QCookieJar::cookies):
        (QCookieJar::isEnabled):
        (QCookieJar::setEnabled):
        (gCleanupJar):
        (QCookieJar::setCookieJar):
        (QCookieJar::cookieJar):
        * Api/qcookiejar.h: Added.

2007-02-01  Lars Knoll <lars@trolltech.com>

        Reviewed by Adam.

        Fix form loading for the Qt build.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::callPolicyFunction):
        (WebCore::FrameLoaderClientQt::slotCallPolicyFunction):
        (WebCore::FrameLoaderClientQt::dispatchWillSubmitForm):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForMIMEType):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):

2007-01-31  Zack Rusin  <zrusin@trolltech.com>

        Expose the fact that the form has been edited
        in the public api.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPage::isModified):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::respondToChangedContents):
        (WebCore::EditorClientQt::isEditable):

2007-01-31  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Properly propagate key events.

        * Api/qwebframe.cpp:
        (QWebFrame::addToJSWindowObject):
        (QWebFrame::innerText):
        (QWebFrame::renderTreeDump):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * Api/qwebpage.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::pageDestroyed):
        (WebCore::EditorClientQt::handleKeyPress):
        (WebCore::EditorClientQt::EditorClientQt):
        * WebCoreSupport/EditorClientQt.h:

2007-01-31  George Staikos  <staikos@kde.org>

        Remove focusFrame() - misguided - and add childFrames().  Fix a crash
        on exit.

        Reviewed by Zack.

        * Api/qwebframe.cpp:
        (QWebFrame::resizeEvent):
        (QWebFrame::childFrames):
        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::webFrame):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-30  Zack Rusin  <zrusin@trolltech.com>

        Improve QtLauncher to make it more useful as a testing tool.

        * QtLauncher/main.cpp:
        (ClearButton::ClearButton):
        (ClearButton::paintEvent):
        (SearchEdit::SearchEdit):
        (SearchEdit::~SearchEdit):
        (SearchEdit::paintEvent):
        (SearchEdit::resizeEvent):
        (SearchEdit::moveEvent):
        (MainWindow::MainWindow):
        (MainWindow::changeLocation):
        (MainWindow::loadFinished):

2007-01-30  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        Added import/export macros needed for build with ELF visibility and
        for a build on Windows (in the future).

        * Api/qwebframe.h:
        * Api/qwebkitglobal.h: Added.
        * Api/qwebpage.h:
        * Api/qwebpagehistory.h:

2007-01-30  Zack Rusin  <zack@kde.org>

        Change the signature of handleKeyPress
        (make it compile)

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyPress):
        * WebCoreSupport/EditorClientQt.h:

2007-01-29  Zack Rusin  <zack@kde.org>

        Reviewed by Lars

        Set the allows-scrolling property on the view.

        * Api/qwebframe.cpp:
        (QWebFrame::QWebFrame):

2007-01-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Stub for new DragClient method

        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::DragClientQt::dragSourceActionMaskForPoint):
        * WebCoreSupport/DragClientQt.h:

2007-01-29  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Mark.

        - updated for cross-platform data loading support

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createDocumentLoader):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-29  George Staikos  <staikos@kde.org>

        Make window resizing work.

        * Api/qwebpage.cpp:
        (QWebPage::setWindowGeometry):
        * Api/qwebpage.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::setWindowRect):

2007-01-29  George Staikos  <staikos@kde.org>

        Make popup windows work.

        * Api/qwebpage.cpp:
        (QWebPage::createWindow):
        * Api/qwebpage.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::createWindow):

2007-01-29  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Fix the way we handle native widgets (QWidget) inside
        WebCore. Now WebCore::Widget owns the QWidget in all
        cases. This is the only way to get well defined semantics
        for all teh native widgets we have (currently ScrollView
        and ScrollBar, but plugins will follow).

        This has the side effect that one cannot rely on a defined 
        lifetime of a QWebFrame when using the API. 

        * Api/qwebframe.cpp:
        (QWebFrame::~QWebFrame):
        * Api/qwebpage.cpp:
        (QWebPage::~QWebPage):
        * Api/qwebpage_p.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::detachedFromParent3):
        (WebCore::FrameLoaderClientQt::detachedFromParent4):
        (WebCore::FrameLoaderClientQt::frameLoaderDestroyed):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-29  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Implement more functions

        * Api/qwebpage.cpp:
        (QWebPage::javaScriptConsoleMessage):
        (QWebPage::statusTextChanged):
        (QWebPage::runJavaScriptAlert):
        * Api/qwebpage.h:
        * Api/qwebpagehistory.cpp:
        (QWebPageHistory::canGoBack):
        (QWebPageHistory::canGoForward):
        * Api/qwebpagehistory.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::addMessageToConsole):
        (WebCore::ChromeClientQt::runJavaScriptAlert):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::shouldGoToHistoryItem):

2007-01-26  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Qt implementation.

        * Api/qwebframe.cpp:
        (QWebFrame::QWebFrame):
        (QWebFrame::title):
        (QWebFrame::selectedText):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * Api/qwebpage.cpp:
        (QWebPage::createFrame):
        (QWebPage::open):
        (QWebPage::url):
        (QWebPage::title):
        (QWebPage::focusFrame):
        (QWebPage::stop):
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setFrame):
        (WebCore::FrameLoaderClientQt::detachFrameLoader):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveTitle):
        (WebCore::FrameLoaderClientQt::didChangeTitle):
        (WebCore::FrameLoaderClientQt::setTitle):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-26  Lars Knoll <lars@trolltech.com>

        Make it compile again with Qt 4.2 and add the copyright
        headers where forgotten in the last submit.

        * Api/qwebpagehistory.cpp:
        * Api/qwebpagehistory.h:
        (QExplicitlySharedDataPointer::operator*):
        (QExplicitlySharedDataPointer::operator->):
        (QExplicitlySharedDataPointer::operator T *):
        (QExplicitlySharedDataPointer::operator const T *):
        (QExplicitlySharedDataPointer::data):
        (QExplicitlySharedDataPointer::constData):
        (QExplicitlySharedDataPointer::operator==):
        (QExplicitlySharedDataPointer::operator!=):
        (QExplicitlySharedDataPointer::QExplicitlySharedDataPointer):
        (QExplicitlySharedDataPointer::~QExplicitlySharedDataPointer):
        (QExplicitlySharedDataPointer::operator=):
        (QExplicitlySharedDataPointer::operator!):
        (::QExplicitlySharedDataPointer):

2007-01-26  Zack Rusin  <zrusin@trolltech.com>

        Reviewed by Lars

        Implement history support on platform Qt.

        * Api/qwebpage.cpp:
        (QWebPage::history):
        (QWebPage::goBack):
        (QWebPage::goForward):
        (QWebPage::goToHistoryItem):
        * Api/qwebpage.h:
        * Api/qwebpagehistory.cpp: Added.
        (QWebHistoryItem::~QWebHistoryItem):
        (QWebHistoryItem::originalUrl):
        (QWebHistoryItem::currentUrl):
        (QWebHistoryItem::title):
        (QWebHistoryItem::lastVisited):
        (QWebHistoryItem::icon):
        (QWebHistoryItem::QWebHistoryItem):
        (QWebPageHistory::QWebPageHistory):
        (QWebPageHistory::itemAtIndex):
        (QWebPageHistory::~QWebPageHistory):
        (QWebPageHistory::items):
        (QWebPageHistory::backItems):
        (QWebPageHistory::forwardItems):
        (QWebPageHistory::goBack):
        (QWebPageHistory::goForward):
        (QWebPageHistory::goToItem):
        (QWebPageHistory::backItem):
        (QWebPageHistory::currentItem):
        (QWebPageHistory::forwardItem):
        * Api/qwebpagehistory.h: Added.
        * Api/qwebpagehistory_p.h: Added.
        (QWebHistoryItemPrivate::QWebHistoryItemPrivate):
        (QWebHistoryItemPrivate::~QWebHistoryItemPrivate):
        (QWebPageHistoryPrivate::QWebPageHistoryPrivate):
        (QWebPageHistoryPrivate::~QWebPageHistoryPrivate):

2007-01-26  Lars Knoll <lars@trolltech.com>

        Get rid of FrameQtClient. It's unused since we moved over
        to the loader.

        * Api/qwebframe.cpp:
        (QWebFrame::QWebFrame):

2007-01-26  Zack Rusin  <zack@kde.org>

        Reviewed by Lars

        Correctly position child frames within the 
        toplevel frame. We were placed it on the widget
        itself instead of the vieweport.

        * Api/qwebframe.cpp:
        (QWebFrame::QWebFrame):

2007-01-26  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Make sure we resize the HTML when resizing a 
        QWebFrame. Also ensure that the render tree
        is up to date before dumping it.

        * Api/qwebframe.cpp:
        (QWebFrame::innerText):
        (QWebFrame::renderTreeDump):
        (QWebFrame::resizeEvent):
        * Api/qwebframe.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::createMainFrame):

2007-01-26  Zack Rusin  <zack@kde.org>

        Reviewed by Lars

        Display pages inside a mainwindow instead
        of a custom qwidget.

        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):
        (main):

2007-01-25  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Emit the loadDone() signal from teh onload event callback
        again. This hangs on one or two test cases, but removes
        hundreds of failures elsewhere.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoad):

2007-01-24  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Implement some bits and pieces required by the loader.
        Fixes quite a few crashes and hangs in the lyout tests

        * Api/qwebframe.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoad):
        (WebCore::FrameLoaderClientQt::finishedLoading):
        (WebCore::FrameLoaderClientQt::setMainDocumentError):
        (WebCore::FrameLoaderClientQt::committedLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoading):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoading):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):
        (WebCore::FrameLoaderClientQt::createFrame):

2007-01-24  Lars Knoll <lars@trolltech.com>

        Fix compilation again.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::handleKeyPress):
        * WebCoreSupport/EditorClientQt.h:

2007-01-23  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

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

        * Api/qwebframe.cpp:
        (QWebFrame::QWebFrame):
        (QWebFrame::~QWebFrame):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::detachedFromParent3):
        (WebCore::FrameLoaderClientQt::detachedFromParent4):
        (WebCore::FrameLoaderClientQt::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientQt::postProgressStartedNotification):
        (WebCore::FrameLoaderClientQt::postProgressEstimateChangedNotification):
        (WebCore::FrameLoaderClientQt::postProgressFinishedNotification):
        (WebCore::FrameLoaderClientQt::frameLoaderDestroyed):
        (WebCore::FrameLoaderClientQt::windowObjectCleared):

2007-01-23  Zack Rusin  <zack@kde.org>

        Adjust the DragClientQt to latest changes.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::DragClientQt::dragControllerDestroyed):
        * WebCoreSupport/DragClientQt.h:

2007-01-23  Zack Rusin  <zack@kde.org>

        Fix the Qt build

        * WebCoreSupport/DragClientQt.cpp:
        (WebCore::DragClientQt::willPerformDragDestinationAction):
        * WebCoreSupport/DragClientQt.h:

2007-01-23  Lars Knoll <lars@trolltech.com>

        Reviewed by Maciej

        Add support for Frames to the Qt build and fix some issues
        in the API classes.

        * Api/qwebframe.cpp:
        (QWebFrame::QWebFrame):
        (QWebFrame::~QWebFrame):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::createMainFrame):
        (QWebPage::createFrame):
        * Api/qwebpage.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::detachedFromParent3):
        (WebCore::FrameLoaderClientQt::detachedFromParent4):
        (WebCore::FrameLoaderClientQt::cancelPolicyCheck):
        (WebCore::FrameLoaderClientQt::windowObjectCleared):
        (WebCore::FrameLoaderClientQt::createFrame):
        (WebCore::FrameLoaderClientQt::objectContentType):
        (WebCore::FrameLoaderClientQt::createPlugin):
        (WebCore::FrameLoaderClientQt::redirectDataToPlugin):
        (WebCore::FrameLoaderClientQt::createJavaAppletWidget):
        (WebCore::FrameLoaderClientQt::overrideMediaType):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam.

        Qt build stubs for Drop logic

        * WebCoreSupport/DragClientQt.cpp: Added.
        (WebCore::DragClientQt::actionMaskForDrag):
        (WebCore::DragClientQt::willPerformDragDestinationAction):
        * WebCoreSupport/DragClientQt.h: Added.
        * WebKitPart/WebKitPart.cpp:
        (WebKitPart::initView):

2007-01-19  John Sullivan  <sullivan@apple.com>

        Added stubs for new callbacks, to try to avoid breaking the Qt port.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidFinishDocumentLoad):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-19  Anders Carlsson  <acarlsson@apple.com>

        Try fixing the QT build.
        
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::runJavaScriptAlert):
        (WebCore::ChromeClientQt::runJavaScriptConfirm):
        (WebCore::ChromeClientQt::runJavaScriptPrompt):
        (WebCore::ChromeClientQt::setStatusbarText):
        * WebCoreSupport/ChromeClientQt.h:

2007-01-18  Zack Rusin  <zack@kde.org>

        Reviewed by Lars.

        Implementing a little bit of load progress tracking in the Qt port.

        * Api/qwebframe.cpp:
        (QWebFrame::QWebFrame):
        (QWebFrame::page):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):
        * Api/qwebpage.h:
        * QtLauncher/main.cpp:
        (main):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setFrame):
        (WebCore::FrameLoaderClientQt::detachFrameLoader):
        (WebCore::FrameLoaderClientQt::postProgressStartedNotification):
        (WebCore::FrameLoaderClientQt::postProgressEstimateChangedNotification):
        (WebCore::FrameLoaderClientQt::postProgressFinishedNotification):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-17  Alice Liu  <alice.liu@apple.com>

        Added these stubs to keep the Qt build from failing.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::didSetSelectionTypesForPasteboard):
        * WebCoreSupport/EditorClientQt.h:

2007-01-17  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Remove the inheritance from Shared<XxxClient> in the
        client classes.

        Answer asynchronously to most of the Policy checking methods
        in FrameLoaderClientQt to avoid some crashes in the loader.

        * WebCoreSupport/ChromeClientQt.cpp:
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/ContextMenuClientQt.cpp:
        * WebCoreSupport/ContextMenuClientQt.h:
        * WebCoreSupport/EditorClientQt.cpp:
        * WebCoreSupport/EditorClientQt.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::FrameLoaderClientQt):
        (WebCore::FrameLoaderClientQt::callPolicyFunction):
        (WebCore::FrameLoaderClientQt::slotCallPolicyFunction):
        (WebCore::FrameLoaderClientQt::cancelPolicyCheck):
        (WebCore::FrameLoaderClientQt::dispatchWillSubmitForm):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForMIMEType):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-17  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        change all notImplemented() macros to use qDebug
        instead of fprintf(stder, ...)

        * WebCoreSupport/ChromeClientQt.cpp:
        * WebCoreSupport/ContextMenuClientQt.cpp:
        * WebCoreSupport/EditorClientQt.cpp:
        * WebCoreSupport/FrameLoaderClientQt.cpp:

2007-01-16  Alice Liu  <alice.liu@apple.com>

        Added these stubs to keep the Qt build from failing.

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::didWriteSelectionToPasteboard):
        * WebCoreSupport/EditorClientQt.h:

2007-01-16  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Added the start of a public API to the Qt build
        of WebKit. Currently we have QWebPage and QWebFrame
        with a few small methods.

        Converted the QtLauncher to use the new public API.

        * Api/qwebframe.cpp: Added.
        (QWebFrame::QWebFrame):
        (QWebFrame::~QWebFrame):
        (QWebFrame::addToJSWindowObject):
        (QWebFrame::markup):
        (QWebFrame::innerText):
        (QWebFrame::renderTreeDump):
        * Api/qwebframe.h: Added.
        * Api/qwebframe_p.h: Added.
        (QWebFramePrivate::QWebFramePrivate):
        * Api/qwebpage.cpp: Added.
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::~QWebPagePrivate):
        (QWebPagePrivate::createMainFrame):
        (QWebPage::QWebPage):
        (QWebPage::~QWebPage):
        (QWebPage::createFrame):
        (QWebPage::open):
        (QWebPage::mainFrame):
        (QWebPage::sizeHint):
        * Api/qwebpage.h: Added.
        * Api/qwebpage_p.h: Added.
        * QtLauncher/main.cpp:
        (main):
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::ChromeClientQt):
        (WebCore::ChromeClientQt::setWindowRect):
        (WebCore::ChromeClientQt::windowRect):
        (WebCore::ChromeClientQt::pageRect):
        (WebCore::ChromeClientQt::focus):
        (WebCore::ChromeClientQt::unfocus):
        (WebCore::ChromeClientQt::canTakeFocus):
        (WebCore::ChromeClientQt::takeFocus):
        (WebCore::ChromeClientQt::createWindow):
        (WebCore::ChromeClientQt::createModalDialog):
        (WebCore::ChromeClientQt::show):
        (WebCore::ChromeClientQt::addMessageToConsole):
        (WebCore::ChromeClientQt::chromeDestroyed):
        (WebCore::ChromeClientQt::canRunBeforeUnloadConfirmPanel):
        (WebCore::ChromeClientQt::runBeforeUnloadConfirmPanel):
        (WebCore::ChromeClientQt::closeWindowSoon):
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setFrame):
        (WebCore::FrameLoaderClientQt::detachFrameLoader):
        (WebCore::FrameLoaderClientQt::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientQt::partClearedInBegin):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-15  Anders Carlsson  <acarlsson@apple.com>

        Fix build.
        
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::postProgressStartedNotification):
        (WebCore::FrameLoaderClientQt::postProgressEstimateChangedNotification):
        (WebCore::FrameLoaderClientQt::postProgressFinishedNotification):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-13  Lars Knoll <lars@trolltech.com>

        Compile again after yesterdays changes.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::assignIdentifierToInitialRequest):
        (WebCore::FrameLoaderClientQt::dispatchWillSendRequest):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveAuthenticationChallenge):
        (WebCore::FrameLoaderClientQt::dispatchDidCancelAuthenticationChallenge):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveResponse):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveContentLength):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoading):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoading):
        (WebCore::FrameLoaderClientQt::incrementProgress):
        (WebCore::FrameLoaderClientQt::completeProgress):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-11  Brady Eidson  <beidson@apple.com>

        Keep the fancy new FrameLoaderClientQt building with a small api change in WebCore
        Yay for the loader on QT!

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveAuthenticationChallenge):
        (WebCore::FrameLoaderClientQt::dispatchDidCancelAuthenticationChallenge):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-11  Lars Knoll <lars@trolltech.com>

        Reviewed by Darin

        Start using the loader in the Qt port.

        * QtLauncher/main.cpp:
        (main):
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::FrameLoaderClientQt):
        (WebCore::FrameLoaderClientQt::~FrameLoaderClientQt):
        (WebCore::FrameLoaderClientQt::setFrame):
        (WebCore::FrameLoaderClientQt::detachFrameLoader):
        (WebCore::FrameLoaderClientQt::makeDocumentView):
        (WebCore::FrameLoaderClientQt::makeRepresentation):
        (WebCore::FrameLoaderClientQt::setCopiesOnScroll):
        (WebCore::FrameLoaderClientQt::dispatchDidStartProvisionalLoad):
        (WebCore::FrameLoaderClientQt::cancelPolicyCheck):
        (WebCore::FrameLoaderClientQt::dispatchWillSubmitForm):
        (WebCore::FrameLoaderClientQt::progressStarted):
        (WebCore::FrameLoaderClientQt::progressCompleted):
        (WebCore::FrameLoaderClientQt::setMainFrameDocumentReady):
        (WebCore::FrameLoaderClientQt::clearArchivedResources):
        (WebCore::FrameLoaderClientQt::canShowMIMEType):
        (WebCore::FrameLoaderClientQt::representationExistsForURLScheme):
        (WebCore::FrameLoaderClientQt::provisionalLoadStarted):
        (WebCore::FrameLoaderClientQt::prepareForDataSourceReplacement):
        (WebCore::FrameLoaderClientQt::frameLoaderDestroyed):
        (WebCore::FrameLoaderClientQt::canHandleRequest):
        (WebCore::FrameLoaderClientQt::shouldGoToHistoryItem):
        (WebCore::FrameLoaderClientQt::canCachePage):
        (WebCore::FrameLoaderClientQt::committedLoad):
        (WebCore::FrameLoaderClientQt::cancelledError):
        (WebCore::FrameLoaderClientQt::cannotShowURLError):
        (WebCore::FrameLoaderClientQt::interruptForPolicyChangeError):
        (WebCore::FrameLoaderClientQt::cannotShowMIMETypeError):
        (WebCore::FrameLoaderClientQt::fileDoesNotExistError):
        (WebCore::FrameLoaderClientQt::shouldFallBack):
        (WebCore::FrameLoaderClientQt::createDocumentLoader):
        (WebCore::FrameLoaderClientQt::dispatchWillSendRequest):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveResponse):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForMIMEType):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):
        (WebCore::FrameLoaderClientQt::willUseArchive):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-11  George Staikos  <staikos@kde.org>

        Fix Qt Build.

        * WebCoreSupport/ContextMenuClientQt.cpp:
        (WebCore::ContextMenuClientQt::searchWithGoogle):
        * WebCoreSupport/ContextMenuClientQt.h:

2007-01-06  George Staikos  <staikos@kde.org>

        Reviewed by Brady.

        Make it link.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setMainDocumentError):
        (WebCore::FrameLoaderClientQt::committedLoad):
        (WebCore::FrameLoaderClientQt::cancelledError):
        (WebCore::FrameLoaderClientQt::cannotShowURLError):
        (WebCore::FrameLoaderClientQt::interruptForPolicyChangeError):
        (WebCore::FrameLoaderClientQt::cannotShowMIMETypeError):
        (WebCore::FrameLoaderClientQt::fileDoesNotExistError):
        (WebCore::FrameLoaderClientQt::shouldFallBack):
        (WebCore::FrameLoaderClientQt::createDocumentLoader):
        (WebCore::FrameLoaderClientQt::download):
        (WebCore::FrameLoaderClientQt::dispatchWillSendRequest):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveResponse):
        (WebCore::FrameLoaderClientQt::dispatchDidReceiveContentLength):
        (WebCore::FrameLoaderClientQt::dispatchDidFinishLoading):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoading):
        (WebCore::FrameLoaderClientQt::dispatchDidLoadResourceFromMemoryCache):
        (WebCore::FrameLoaderClientQt::dispatchDidFailProvisionalLoad):
        (WebCore::FrameLoaderClientQt::dispatchDidFailLoad):
        (WebCore::FrameLoaderClientQt::dispatchCreatePage):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForMIMEType):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNewWindowAction):
        (WebCore::FrameLoaderClientQt::dispatchDecidePolicyForNavigationAction):
        (WebCore::FrameLoaderClientQt::dispatchUnableToImplementPolicy):
        (WebCore::FrameLoaderClientQt::incrementProgress):
        (WebCore::FrameLoaderClientQt::completeProgress):
        (WebCore::FrameLoaderClientQt::startDownload):
        (WebCore::FrameLoaderClientQt::willUseArchive):
        * WebCoreSupport/FrameLoaderClientQt.h:

2007-01-05  Lars Knoll <lars@trolltech.com>

        Make the Qt build compile again

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::canTakeFocus):
        (WebCore::ChromeClientQt::takeFocus):
        * WebCoreSupport/ChromeClientQt.h:
        * WebCoreSupport/ContextMenuClientQt.cpp:
        (WebCore::ContextMenuClientQt::getCustomMenuFromDefaultItems):
        * WebCoreSupport/ContextMenuClientQt.h:

2007-01-03  Lars Knoll <lars@trolltech.com>

        Fix the Qt build

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setDocumentViewFromPageCache):
        (WebCore::FrameLoaderClientQt::updateGlobalHistoryForStandardLoad):
        (WebCore::FrameLoaderClientQt::updateGlobalHistoryForReload):
        (WebCore::FrameLoaderClientQt::shouldGoToHistoryItem):
        (WebCore::FrameLoaderClientQt::saveScrollPositionAndViewStateToItem):
        (WebCore::FrameLoaderClientQt::saveDocumentViewToPageCache):
        (WebCore::FrameLoaderClientQt::canCachePage):
        * WebCoreSupport/FrameLoaderClientQt.h:

2006-12-29  George Staikos  <staikos@kde.org>

        Add missing notimplemented.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::frameLoaderDestroyed):
        (WebCore::FrameLoaderClientQt::canHandleRequest):
        (WebCore::FrameLoaderClientQt::partClearedInBegin):

2006-12-21  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::hasWebView):
        (WebCore::FrameLoaderClientQt::hasFrameView):
        (WebCore::FrameLoaderClientQt::dispatchDidHandleOnloadEvents):
        (WebCore::FrameLoaderClientQt::dispatchDidFirstLayout):
        (WebCore::FrameLoaderClientQt::setTitle):
        (WebCore::FrameLoaderClientQt::partClearedInBegin):
        * WebCoreSupport/FrameLoaderClientQt.h:
                 Remove some runtimw warnings
                 Add partClearedInBegin forwarding call, so
                 I can catch this in the layout tests.

2006-12-19  Lars Knoll <lars@trolltech.com>

        Reviewed by Rob.

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::canRunBeforeUnloadConfirmPanel):
        (WebCore::ChromeClientQt::runBeforeUnloadConfirmPanel):
        (WebCore::ChromeClientQt::closeWindowSoon):
        * WebCoreSupport/ChromeClientQt.h:
                Make it compile.

2006-12-16  Zack Rusin  <zack@kde.org>

        Adjust the client to the most recent interface.

        * WebCoreSupport/ContextMenuClientQt.cpp:
        (WebCore::ContextMenuClientQt::contextMenuDestroyed):
        (WebCore::ContextMenuClientQt::addCustomContextMenuItems):
        (WebCore::ContextMenuClientQt::contextMenuItemSelected):
        (WebCore::ContextMenuClientQt::downloadURL):
        (WebCore::ContextMenuClientQt::copyImageToClipboard):
        (WebCore::ContextMenuClientQt::lookUpInDictionary):
        * WebCoreSupport/ContextMenuClientQt.h:

2006-12-14  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        * QtLauncher/QtLauncher.pro: Link this little test program
        with rpath, for convenience. (This is never going to get installed
        anyway)

2006-12-12  George Staikos  <staikos@kde.org>

        Reviewed by Alexey.

        Fix the Qt build again.

        * WebCoreSupport/ContextMenuClientQt.cpp:
        (WebCore::ContextMenuClientQt::speak):
        (WebCore::ContextMenuClientQt::stopSpeaking):
        * WebCoreSupport/ContextMenuClientQt.h:
        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::toggleContinuousSpellChecking):
        (WebCore::EditorClientQt::toggleGrammarChecking):
        * WebCoreSupport/EditorClientQt.h:

2006-12-10  George Staikos  <staikos@kde.org>

        Reviewed by Zack.

        Add a default user agent for now.

        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::userAgent):

2006-12-10  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Comment out a notImplemented() warning

        * WebCoreSupport/EditorClientQt.cpp:
        (WebCore::EditorClientQt::clearUndoRedoOperations):

2006-12-10  Zack Rusin  <zack@kde.org>

        Print out the method name if it's unimplemented.

        * WebCoreSupport/FrameLoaderClientQt.cpp:

2006-12-10  Zack Rusin  <zack@kde.org>

        Moving the clients from platform to their final location.

        * WebCoreSupport/FrameLoaderClientQt.cpp: Added.
        * WebCoreSupport/FrameLoaderClientQt.h: Added.
        * WebCoreSupport/ChromeClientQt.cpp: Added.
        * WebCoreSupport/ChromeClientQt.h: Added.
        * WebCoreSupport/ContextMenuClientQt.cpp: Added.
        * WebCoreSupport/ContextMenuClientQt.h: Added.
        * WebCoreSupport/EditorClientQt.cpp: Added.
        * WebCoreSupport/EditorClientQt.h: Added.

2006-12-10  Zack Rusin  <zack@kde.org>

        Adjusting to the changes in platform/qt.

        * QtLauncher/main.cpp:
        (main):

2006-12-09  Lars Knoll <lars@trolltech.com>

        Reviewed by Zack

        Make it possible to build WebKit with qmake.

        * QtLauncher/QtLauncher.pro: Added.
        * QtLauncher/main.cpp:

2006-12-08  Zack Rusin  <zack@kde.org>

        Reviewed by Maciej.

        Fix the build after the recent changes.

        * QtLauncher/main.cpp:
        (main):
        * WebKitPart/WebKitPart.cpp:
        (WebKitPart::initView):

2006-11-19  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Zack.

        http://bugs.webkit.org/show_bug.cgi?id=11649
        Fix Qt-only build

        * QtLauncher/CMakeLists.txt:

2006-11-17  Zack Rusin  <zack@kde.org>

        Reviewed by Mitz. Landed by Niko.

        Adjusting to the new api.

        * QtLauncher/main.cpp:
        (main):
        * WebKitPart/WebKitPart.cpp:
        (WebKitPart::initView):

2006-11-10  Zack Rusin  <zack@kde.org>

        Reviewed and landed by Anders.

        Adjusting to the recent loader changes, making it compile
        and work.

        * QtLauncher/main.cpp:
        (main):
        * WebKitPart/WebKitPart.cpp:
        (WebKitPart::closeUrl):
        (WebKitPart::initView):

2006-11-03  Zack Rusin  <zack@kde.org>

        Reviewed by Maciej.

        Fixing compile on both Qt and KDE platforms.

        * QtLauncher/main.cpp:
        (main): url has already been defined
        * WebKitPart/WebKitPartBrowserExtension.cpp: removing
        duplicate implementation of this class

2006-10-31  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Maciej, landed by Anders.

        * QtLauncher/CMakeLists.txt: Make linkage against kde libraries
          optional
        * QtLauncher/main.cpp: Make it compile without KDE.
        (main):

2006-11-02  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Maciej, landed by Anders.

        * QtLauncher/main.cpp:
        (main): Declare our frame as main frame to the Page object.
        Fixes crashes on various web sites

2006-10-31  Zack Rusin  <zack@kde.org>

        Reviewed by Mitz.

        Fix the Qt build after last nights changes.

        * QtLauncher/CMakeLists.txt:
        * WebKitPart/CMakeLists.txt:

2006-10-26  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Darin Adler.

        Fix Qt/Linux build.

        * QtLauncher/main.cpp:
        (main):
        * WebKitPart/WebKitPart.cpp:
        (WebKitPart::openUrl):

2006-10-24  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Maciej.

        Fix Qt/Linux build.

        - Remove BrowserExtensionQt, move it's methods to Page/FrameQt.
        - Fix CMakeLists.txt to include platform/network.

        * QtLauncher/CMakeLists.txt:
        * WebKitPart/CMakeLists.txt:

2006-10-24  Simon Hausmann  <hausmann@kde.org>

        Reviewed by Darin Adler.

        * QtLauncher/CMakeLists.txt, WebKitPart/CMakeLists.txt: Added project name to
          kde4_automoc macro, as required by the latest KDE4 cmake module.

2006-10-20  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by Anders.

        Adapt to FrameQtClient changes, and provide some kind of status
        information to the KPart wheter we're loading or not (started/completed signaling).

        * WebKitPart/CMakeLists.txt:
        * WebKitPart/WebKitPart.cpp:
        (WebKitPart::WebKitPart):
        (WebKitPart::~WebKitPart):
        (WebKitPart::openUrl):
        (WebKitPart::initView):
        * WebKitPart/WebKitPart.h:
        * WebKitPart/WebKitPartBrowserExtension.cpp: Added.
        (WebKitPartBrowserExtension::WebKitPartBrowserExtension):
        (WebKitPartBrowserExtension::~WebKitPartBrowserExtension):
        * WebKitPart/WebKitPartBrowserExtension.h: Added.
        * WebKitPart/WebKitPartClient.cpp:
        (WebKitPartClient::WebKitPartClient):
        (WebKitPartClient::loadFinished):
        * WebKitPart/WebKitPartClient.h:
        * WebKitPart/WebKitPartInterface.h:

2006-10-02  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by eseidel.  Landed by eseidel.

        Fix last remaining issue Qt/Linux build with gcc3.

        * WebKitPart/WebKitPart.h: Remove Q_PROPERTY usage, which is not needed and made problems.

2006-09-10  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed and landed by ap.

        Fix QtLauncher - it is supposed to create a FrameView on its own nowadays.

        * QtLauncher/main.cpp:
        (main):

2006-09-04  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Tim H.

        Fixes last part of: http://bugs.webkit.org/show_bug.cgi?id=10644
        Move QtLauncher down to WebKitQt.

        * QtLauncher/CMakeLists.txt: Added.
        * QtLauncher/main.cpp: Added.
        (main):

2006-09-04  Nikolas Zimmermann  <zimmermann@kde.org>

        Reviewed by Darin Adler. Final polish by Sam.

        Fixes parts of: http://bugs.webkit.org/show_bug.cgi?id=10644
        Add WebKitPart, an embeddable KPart for the KDE platform.

        * WebKitPart/CMakeLists.txt: Added.
        * WebKitPart/WebKitFactory.cpp: Added.
        (WebKitFactory::WebKitFactory):
        (WebKitFactory::~WebKitFactory):
        (WebKitFactory::createPartObject):
        (WebKitFactory::instance):
        (WebKitFactory::ref):
        (WebKitFactory::deref):
        (init_libWebKitPart):
        * WebKitPart/WebKitFactory.h: Added.
        * WebKitPart/WebKitPart.cpp: Added.
        (WebKitPart::WebKitPart):
        (WebKitPart::~WebKitPart):
        (WebKitPart::openFile):
        (WebKitPart::openUrl):
        (WebKitPart::closeUrl):
        (WebKitPart::parentPart):
        (WebKitPart::frame):
        (WebKitPart::initView):
        * WebKitPart/WebKitPart.desktop: Added.
        * WebKitPart/WebKitPart.h: Added.
        (WebKitPart::):
        * WebKitPart/WebKitPart.rc: Added.
        * WebKitPart/WebKitPartBrowser.rc: Added.
        * WebKitPart/WebKitPartClient.cpp: Added.
        (WebKitPartClient::WebKitPartClient):
        (WebKitPartClient::~WebKitPartClient):
        * WebKitPart/WebKitPartClient.h: Added.
        * WebKitPart/WebKitPartInterface.cpp: Added.
        (WebKitPartInterface::WebKitPartInterface):
        (WebKitPartInterface::~WebKitPartInterface):
        (WebKitPartInterface::url):
        (WebKitPartInterface::closeURL):
        * WebKitPart/WebKitPartInterface.h: Added.
        * WebKitPart/org.kde.WebKitPart.xml: Added.

