2009-08-10  Kavindra Palaraja  <kavindra.palaraja@nokia.com>

        Reviewed by Simon Hausmann.

        Various fixes and improvements to the QWebPluginInfo, QWebPluginDatabase and QWebSettings documentation.

        * Api/qwebplugindatabase.cpp:
        * Api/qwebsettings.cpp:

2009-08-08  Volker Hilsheimer  <volker.hilsheimer@nokia.com>

        Reviewed by Simon Hausmann.

        Doc: there is no group of explicitly shared classes, only one class uses this.

        Explain the implications in the QWebHistoryItem documentation, and get rid
        of the "group".

        * Api/qwebhistory.cpp:

2009-08-05  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] Fix build error caused by http://trac.webkit.org/changeset/46763

        * Api/qwebpluginfactory.h: Export macro added.

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

        Reviewed by Simon Hausmann.

        [Qt] QWebFrame::requestedUrl method can mis-behave in case of unhandled sslErrors.
        https://bugs.webkit.org/show_bug.cgi?id=27804

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

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

        Reviewed by Tor Arne Vestbø.

        Rename QWebPlugin to QWebPluginInfo, as discussed on IRC.

        * Api/qwebplugindatabase.cpp:
        (QWebPluginInfoPrivate::QWebPluginInfoPrivate):
        (QWebPluginInfo::QWebPluginInfo):
        (QWebPluginInfo::~QWebPluginInfo):
        (QWebPluginInfo::name):
        (QWebPluginInfo::description):
        (QWebPluginInfo::mimeTypes):
        (QWebPluginInfo::supportsMimeType):
        (QWebPluginInfo::path):
        (QWebPluginInfo::isNull):
        (QWebPluginInfo::setEnabled):
        (QWebPluginInfo::isEnabled):
        (QWebPluginInfo::operator==):
        (QWebPluginInfo::operator!=):
        (QWebPluginInfo::operator=):
        (QWebPluginDatabase::plugins):
        (QWebPluginDatabase::pluginForMimeType):
        (QWebPluginDatabase::setPreferredPluginForMimeType):
        * Api/qwebplugindatabase.h:
        * Api/qwebplugindatabase_p.h:
        * tests/qwebplugindatabase/tst_qwebplugindatabase.cpp:
        (tst_QWebPluginDatabase::installedPlugins):
        (tst_QWebPluginDatabase::searchPaths):
        (tst_QWebPluginDatabase::null_data):
        (tst_QWebPluginDatabase::null):
        (tst_QWebPluginDatabase::pluginForMimeType):
        (tst_QWebPluginDatabase::enabled):
        (tst_QWebPluginDatabase::operatorequal_data):
        (tst_QWebPluginDatabase::operatorequal):
        (tst_QWebPluginDatabase::preferredPlugin):

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

        Reviewed by Adam Treat.

        Replace QWebPlugin::MimeType with a typedef to
        QWebPluginFactory::MimeType.

        * Api/qwebplugindatabase.cpp:
        * Api/qwebplugindatabase.h:
        * Api/qwebpluginfactory.cpp:
        (QWebPluginFactory::MimeType::operator==):
        * Api/qwebpluginfactory.h:

2009-08-04  Jakub Wieczorek  <faw217@gmail.com>

        Reviewed by Simon Hausmann.

        Add QWebPluginDatabase API to the Qt API.
        
        https://bugs.webkit.org/show_bug.cgi?id=27651

        * Api/headers.pri:
        * Api/qwebplugindatabase.cpp: Added.
        (QWebPluginPrivate::QWebPluginPrivate):
        (QWebPluginDatabasePrivate::QWebPluginDatabasePrivate):
        (QWebPlugin::MimeType::operator==):
        (QWebPlugin::QWebPlugin):
        (QWebPlugin::~QWebPlugin):
        (QWebPlugin::name):
        (QWebPlugin::description):
        (QWebPlugin::mimeTypes):
        (QWebPlugin::supportsMimeType):
        (QWebPlugin::path):
        (QWebPlugin::isNull):
        (QWebPlugin::setEnabled):
        (QWebPlugin::isEnabled):
        (QWebPlugin::operator==):
        (QWebPlugin::operator!=):
        (QWebPlugin::operator=):
        (QWebPluginDatabase::QWebPluginDatabase):
        (QWebPluginDatabase::~QWebPluginDatabase):
        (QWebPluginDatabase::plugins):
        (QWebPluginDatabase::defaultSearchPaths):
        (QWebPluginDatabase::searchPaths):
        (QWebPluginDatabase::setSearchPaths):
        (QWebPluginDatabase::addSearchPath):
        (QWebPluginDatabase::refresh):
        (QWebPluginDatabase::pluginForMimeType):
        (QWebPluginDatabase::setPreferredPluginForMimeType):
        * Api/qwebplugindatabase.h: Added.
        * Api/qwebplugindatabase_p.h: Added.
        * Api/qwebsettings.cpp:
        (QWebSettings::pluginDatabase):
        * Api/qwebsettings.h:
        * tests/qwebplugindatabase/qwebplugindatabase.pro: Added.
        * tests/qwebplugindatabase/tst_qwebplugindatabase.cpp: Added.
        (tst_QWebPluginDatabase::installedPlugins):
        (tst_QWebPluginDatabase::searchPaths):
        (tst_QWebPluginDatabase::null_data):
        (tst_QWebPluginDatabase::null):
        (tst_QWebPluginDatabase::pluginForMimeType):
        (tst_QWebPluginDatabase::enabled):
        (tst_QWebPluginDatabase::operatorequal_data):
        (tst_QWebPluginDatabase::operatorequal):
        (tst_QWebPluginDatabase::preferredPlugin):
        * tests/tests.pro:

2009-08-03  Balazs Kelemen  <kelemen.balazs.3@stud.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Do memory cleanup when running robotized QtLauncher in debug as well.

        * QtLauncher/main.cpp:
        (launcherMain):
        (main):

2009-07-30  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Initialize HTML5 Application Cache for QtWebKit to a sensible default
        https://bugs.webkit.org/show_bug.cgi?id=27866

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

2009-07-31  Jakob Petsovits  <jakob.petsovits@torchmobile.com>

        Reviewed by Adam Treat.

        Build QtWebKit without benchmark tests for Qt < 4.5.
        https://bugs.webkit.org/show_bug.cgi?id=27886

        The QBENCHMARK macro is only available from 4.5 on,
        so builds for Qt < 4.5 shouldn't try to build those.

        * tests/tests.pro:

2009-07-31  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Adam Treat.

        Fix warning by migrating use of QString.sprintf(...) to
        QString.arg().arg()...

        * WebCoreSupport/EditorClientQt.cpp:
        (dumpRange):

2009-07-31  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Tor Arne Vestbø.

        Expose the Offline Web Application Cache in the Qt API.

        * Api/qwebsettings.cpp:
        (QWebSettings::QWebSettings):
        (QWebSettings::setOfflineWebApplicationCachePath):
        (QWebSettings::offlineWebApplicationCachePath):
        (QWebSettings::setOfflineWebApplicationCacheQuota):
        (QWebSettings::offlineWebApplicationCacheQuota):
        * Api/qwebsettings.h:

2009-07-30  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Adam Treat.

        Add missing Q_OBJECT to class inheriting from QObject.

        * tests/qwebframe/tst_qwebframe.cpp:

2009-07-30  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Adam Treat.

        Fix indentation.

        * tests/qwebframe/tst_qwebframe.cpp:

2009-07-30  Volker Hilsheimer <volker.hilsheimer@nokia.com>

        Reviewed by Simon Hausmann.

        Fix documentation links to examples.

        * Api/qwebview.cpp:

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

        Reviewed by Simon Hausmann.

        Allocate MainWindow on heap in robotized QtLauncher as well.

        * QtLauncher/main.cpp:
        (main):

2009-07-29  Kevin McCullough  <kmccullough@apple.com>

        Reviewed by Darin Adler.

        Added foundation work to allow a testing infrastructure for the Web
        Inspector.

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

2009-07-29  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] In debug mode, this fix frees cached resources
        and other unreferenced objects (by calling the
        garbage collector) to remove the LEAK messages.
        https://bugs.webkit.org/show_bug.cgi?id=27767

        * Api/qwebframe.cpp:
        (qt_drt_cache_clear):
        * QtLauncher/main.cpp:
        (main):

2009-07-28  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Fix the Qt build by adapting to the changes of ScriptObject.

        * Api/qwebelement.cpp:
        (setupScriptObject):

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

        Reviewed by Simon Hausmann.

        Add WebKit version API to Qt.

        Get the current version of WebKit from WebKit/mac/Configurations/Version.xcconfig
        at compile time and make it available to Qt applications through
        qWebKitVersion().

        Also amend the User Agent string to place the Safari clause outside
        the final bracket and to the end of the UA string.

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

        Minor build tweak by Simon Hausmann (adding export macros to new functions).

        * Api/headers.pri:
        * Api/qwebkitversion.cpp: Added.
        (webKitVersion):
        (webKitMajorVersion):
        (webKitMinorVersion):
        * Api/qwebkitversion.h: Added.
        * Api/qwebpage.cpp:
        (QWebPage::userAgentForUrl):
        * tests/qwebview/tst_qwebview.cpp:
        (tst_QWebView::getWebKitVersion):

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

        Rubber-stamped by Ariya Hidayat.

        Fix compilation with the precompiled header.

        * WebKit_pch.h: Don't include JSDOMBinding.h and MathObject.h,
        as they include AtomicString.h. AtomicString.cpp needs to enable
        a #define before including AtomicString.h, which breaks if the PCH
        forces the inclusion beforehand.

2009-07-28  Ariya Hidayat  <ariya.hidayat@nokia.com>

        Reviewed by Simon Hausmann.

        Added tests to ensure that scroll position can be changed
        programmatically, even when the scroll bar policy is set to off.

        * tests/qwebframe/tst_qwebframe.cpp:

2009-07-28  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.
        
        Fix a few compilation warnings in the QWebFrame tests.

        * tests/qwebframe/tst_qwebframe.cpp:

2009-07-28  Andre Pedralho  <andre.pedralho@openbossa.org>

         Reviewed by Simon Hausmann.

         Fixed tst_QWebFrame::hasSetFocus test which was using
         an undefined resource.
         https://bugs.webkit.org/show_bug.cgi?id=27512

         * tests/qwebframe/tst_qwebframe.cpp:

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

        Reviewed by Ariya Hidayat.

        Make it possible to pass relative file names to QtLauncher.

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

2009-07-27  Alexey Proskuryakov  <ap@webkit.org>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=27735
        Give a helpful name to JSLock constructor argument

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

2009-07-27  Volker Hilsheimer <volker.hilsheimer@nokia.com>

        Reviewed by Simon Hausmann.

        QWebView's "enabled" parameter should default to true, as with QGraphicsView and
        QPainter.

        * Api/qwebview.cpp: Add reference to QPainter::renderHints().
        * Api/qwebview.h: Add default for enabled argument.

2009-07-26  Kavindra Palaraja  <kavindra.palaraja@nokia.com>

        Reviewed by Simon Hausmann.

        More documentation cleanups in the QWebElement class overview.

        * Api/qwebelement.cpp:

2009-07-26  Kavindra Palaraja  <kavindra.palaraja@nokia.com>

        Reviewed by Simon Hausmann.

        Clean up documentation of QWebElement's findFirst and findAll functions,
        as well as their QWebFrame counterparts.

        * Api/qwebelement.cpp:
        * Api/qwebframe.cpp:

2009-07-26  Kavindra Palaraja  <kavindra.palaraja@nokia.com>

        Reviewed by Simon Hausmann.

        Various documentation cleanups

        * Fixed qdoc warnings
        * Hide QWebNetworkInterface from the class overview
        * Mention QWebElement in the module overview
        * More cleanups

        * Api/qwebframe.cpp:
        * Api/qwebnetworkinterface.cpp:
        * Api/qwebview.cpp:
        * docs/qtwebkit.qdoc:

2009-07-26  Kavindra Palaraja  <kavindra.palaraja@nokia.com>

        Reviewed by Simon Hausmann.

        Added missing class diagram referenced from the docs, taken from the Qt
        documentation.

        * docs/qtwebkit.qdocconf: Register the image directory with
        qdoc.
        * docs/qwebview-diagram.png: Added.

2009-07-24  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Adam Treat.

        As per discussion on IRC, changed originalUrl by requestedUrl.

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

2009-07-24  Andre Pedralho  <andre.pedralho@openbossa.org>

        Reviewed by Adam Treat.

        Removed void QWebFrame::renderContents(...) and added the Q_PROPERTY
        clipRenderToViewport to control whether QWebFrame::render would call
        FrameView::paintContents rather than FrameView::paint and do not clip
        the frame content to viewport.


        * Api/qwebframe.cpp:
        (QWebFramePrivate::renderPrivate):
        (QWebFrame::clipRenderToViewport):
        (QWebFrame::setClipRenderToViewport):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        (QWebFramePrivate::QWebFramePrivate):
        * tests/qwebframe/tst_qwebframe.cpp:

2009-07-24  Antonio Gomes   <antonio.gomes@openbossa.org>

        Reviewed by Simon Hausmann.

        [QT] Implement originalUrl getter method to the API
        https://bugs.webkit.org/show_bug.cgi?id=25867

        * Api/qwebframe.cpp:
        (QWebFrame::originalUrl):
        * Api/qwebframe.h:
        * tests/qwebframe/qwebframe.qrc:
        * tests/qwebframe/test1.html: Added.
        * tests/qwebframe/test2.html: Added.
        * tests/qwebframe/tst_qwebframe.cpp:

2009-07-24  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Build fix for Qt.

        Fix build issue introduced in 46344
        ([Bug 22700] ApplicationCache should have size limit)

        Remove method only added to the Qt ChromeClient.

        * WebCoreSupport/ChromeClientQt.h:

2009-07-24  Andrei Popescu  <andreip@google.com>

        Reviewed by Anders Carlsson.

        ApplicationCache should have size limit
        https://bugs.webkit.org/show_bug.cgi?id=22700

        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::reachedMaxAppCacheSize):
        Adds empty implementation of the reachedMaxAppCacheSize callback.
        * WebCoreSupport/ChromeClientQt.h:

2009-07-23  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Add simple proxy support for QtLauncher
        https://bugs.webkit.org/show_bug.cgi?id=27495

        Picks up proxy settings from the http_proxy environment
        variable.

        * QtLauncher/QtLauncher.pro: Add QtNetwork dependency for all 
        platforms.
        * QtLauncher/main.cpp:
        (MainWindow::MainWindow):

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

        Reviewed by Holger Freyther.

        Added a testcase to verify that cached methods in the QOBject bindings
        remain alife even after garbage collection.

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

2009-07-23  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        Fixing two issues related to QtLauncher
          - MainWindow objects are not always freed after close
          - JavaScript window.close() sometimes crashes
        https://bugs.webkit.org/show_bug.cgi?id=27601

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

2009-07-21  Volker Hilsheimer <volker.hilsheimer@nokia.com>

        Reviewed by Simon Hausmann.

        Various improvements to the API documentation.

        * Updated link to W3c Database spec
        * Formatting fixes, cleanups
        * Add missing \since 4.6 tags to QWebPage::frameAt
        * Extend QWebDatabase and QWebSecurityOrigin docs.

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

2009-07-21  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Rubber-stamped by Simon Hausmann.

        Remove preliminary-tag from QWebElement

        * Api/qwebelement.cpp:

2009-07-20  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Eric Seidel.

        Fix Qt code to follow the WebKit Coding Style.

        * Api/qcookiejar.cpp:
        (QCookieJar::setCookieJar):
        (QCookieJar::cookieJar):
        * Api/qcookiejar.h:
        * Api/qwebdatabase.cpp:
        (QWebDatabase::QWebDatabase):
        (QWebDatabase::removeDatabase):
        * Api/qwebdatabase.h:
        * Api/qwebdatabase_p.h:
        * Api/qwebelement.h:
        * Api/qwebframe.cpp:
        (QWebFrame::title):
        (QWebFrame::print):
        * Api/qwebframe.h:
        * Api/qwebframe_p.h:
        * Api/qwebhistory.cpp:
        (QWebHistory::clear):
        * Api/qwebhistory.h:
        * Api/qwebhistory_p.h:
        * Api/qwebhistoryinterface.cpp:
        (gCleanupInterface):
        (QWebHistoryInterface::setDefaultInterface):
        (QWebHistoryInterface::defaultInterface):
        (QWebHistoryInterface::QWebHistoryInterface):
        * Api/qwebhistoryinterface.h:
        * Api/qwebnetworkinterface.cpp:
        (QWebNetworkManager::started):
        (QWebNetworkManager::finished):
        (QWebNetworkInterfacePrivate::parseDataUrl):
        (QWebNetworkInterface::addJob):
        (WebCoreHttp::onResponseHeaderReceived):
        (WebCoreHttp::onReadyRead):
        * Api/qwebnetworkinterface.h:
        * Api/qwebnetworkinterface_p.h:
        * Api/qwebpage.cpp:
        (QWebPagePrivate::editorCommandForWebActions):
        (QWebPagePrivate::createContextMenu):
        (QWebPagePrivate::focusInEvent):
        (QWebPage::fixedContentsSize):
        (QWebPage::setContentEditable):
        (QWebPage::swallowContextMenuEvent):
        (QWebPage::findText):
        * Api/qwebpage.h:
        * Api/qwebpage_p.h:
        * Api/qwebpluginfactory.h:
        * Api/qwebsecurityorigin.h:
        * Api/qwebsecurityorigin_p.h:
        * Api/qwebsettings.cpp:
        (QWebSettingsPrivate::QWebSettingsPrivate):
        (QWebSettingsPrivate::apply):
        (QWebSettings::globalSettings):
        (QWebSettings::QWebSettings):
        (QWebSettings::fontSize):
        (QWebSettings::setUserStyleSheetUrl):
        (QWebSettings::setDefaultTextEncoding):
        (QWebSettings::setIconDatabasePath):
        (QWebSettings::iconDatabasePath):
        (QWebSettings::iconForUrl):
        (QWebSettings::setWebGraphic):
        (QWebSettings::setFontFamily):
        (QWebSettings::fontFamily):
        (QWebSettings::testAttribute):
        (qt_websettings_setLocalStorageDatabasePath):
        * Api/qwebsettings.h:
        * Api/qwebview.cpp:
        (QWebView::setPage):
        (QWebView::event):
        * Api/qwebview.h:

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

        Reviewed by Simon Hausmann.

        [Qt] Add test for loading webpages...

        Performance test for loading webpages. Wait for the loadFinished
        signal to be fired. This should include a non empty layout.

        * tests/benchmarks/loading/tst_loading.cpp: Added.
        (waitForSignal):
        (tst_Loading::init):
        (tst_Loading::cleanup):
        (tst_Loading::load_data):
        (tst_Loading::load):
        * tests/benchmarks/loading/tst_loading.pro: Added.
        * tests/tests.pro:

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

        Reviewed by Simon Hausmann.

        [Qt] Add a test case for drawing a simple viewrect to a QPixmap

        * tests/benchmarks/painting/tst_painting.cpp: Added.
        (waitForSignal):
        (tst_Painting::init):
        (tst_Painting::cleanup):
        (tst_Painting::paint_data):
        (tst_Painting::paint):
        * tests/benchmarks/painting/tst_painting.pro: Added.
        * tests/tests.pro:

2009-07-20  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Holger Freyther.

        [Qt] Add an option for QtLauncher to build without QtUiTools dependency
        https://bugs.webkit.org/show_bug.cgi?id=27438

        Based on Norbert Leser's work.

        * QtLauncher/main.cpp:
        (WebPage::createPlugin):

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

        Reviewed by Adam Treat.

        Coding style fixes.

        * Api/qcookiejar.cpp:
        (QCookieJarPrivate::QCookieJarPrivate):
        (qHash):
        (QCookieJar::cookieJar):
        * Api/qwebelement.cpp:
        (QWebElement::functions):
        (QWebElement::scriptableProperties):
        * Api/qwebframe.cpp:
        (QWebFrame::metaData):
        (QWebFrame::scrollBarValue):
        (QWebFrame::scroll):
        (QWebFrame::scrollPosition):
        (QWebFrame::print):
        * Api/qwebnetworkinterface.cpp:
        (decodePercentEncoding):
        (QWebNetworkRequestPrivate::init):
        (QWebNetworkRequestPrivate::setURL):
        (QWebNetworkRequest::QWebNetworkRequest):
        (QWebNetworkRequest::operator=):
        (QWebNetworkRequest::setUrl):
        (QWebNetworkRequest::setHttpHeader):
        (QWebNetworkRequest::httpHeaderField):
        (QWebNetworkRequest::setHttpHeaderField):
        (QWebNetworkRequest::setPostData):
        (QWebNetworkJob::setResponse):
        (QWebNetworkJob::frame):
        (QWebNetworkManager::add):
        (QWebNetworkManager::cancel):
        (QWebNetworkManager::started):
        (QWebNetworkManager::data):
        (QWebNetworkManager::finished):
        (QWebNetworkManager::addHttpJob):
        (QWebNetworkManager::cancelHttpJob):
        (QWebNetworkManager::httpConnectionClosed):
        (QWebNetworkInterfacePrivate::sendFileData):
        (QWebNetworkInterfacePrivate::parseDataUrl):
        (QWebNetworkManager::doWork):
        (QWebNetworkInterface::setDefaultInterface):
        (QWebNetworkInterface::defaultInterface):
        (QWebNetworkInterface::QWebNetworkInterface):
        (QWebNetworkInterface::addJob):
        (QWebNetworkInterface::cancelJob):
        (WebCoreHttp::WebCoreHttp):
        (WebCoreHttp::request):
        (WebCoreHttp::scheduleNextRequest):
        (WebCoreHttp::getConnection):
        (WebCoreHttp::onResponseHeaderReceived):
        (WebCoreHttp::onReadyRead):
        (WebCoreHttp::onRequestFinished):
        (WebCoreHttp::onAuthenticationRequired):
        (WebCoreHttp::onProxyAuthenticationRequired):
        * Api/qwebpage.cpp:
        (QWebPagePrivate::QWebPagePrivate):
        (QWebPagePrivate::mouseReleaseEvent):
        (QWebPagePrivate::inputMethodEvent):
        (QWebPagePrivate::shortcutOverrideEvent):
        (QWebPage::inputMethodQuery):
        (QWebPage::javaScriptPrompt):
        (QWebPage::updatePositionDependentActions):
        (QWebPage::userAgentForUrl):
        (QWebPagePrivate::_q_onLoadProgressChanged):
        (QWebPage::totalBytes):
        (QWebPage::bytesReceived):
        * Api/qwebsettings.cpp:
        (QWebSettings::iconForUrl):
        (QWebSettings::setObjectCacheCapacities):
        * Api/qwebview.cpp:
        (QWebView::paintEvent):
        (QWebView::changeEvent):

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

        Reviewed by Simon Hausmann.

        Overwrite the plugin directories for the DRT.
        Part of https://bugs.webkit.org/show_bug.cgi?id=27215

        * Api/qwebpage.cpp:
        (qt_drt_overwritePluginDirectories): Only set the plugin directories
        to the ones in the QTWEBKIT_PLUGIN_PATH environment variable.

2009-07-16  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Dan Bernstein.

        This is the 2nd part of fixing "RTL: tooltip does not get its directionlity from its element's."
        https://bugs.webkit.org/show_bug.cgi?id=24187 

        Add one extra parameter to the callee of HitTestResult::title() due to the signature change.

        * Api/qwebframe.cpp:
        (QWebHitTestResultPrivate::QWebHitTestResultPrivate): Add direction as a parameter to the callee of HitTestResult::title().
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::mouseDidMoveOverElement): Add direction as a parameter to the callee of HitTestResult::title().

2009-07-16  Benjamin C Meyer  <benjamin.meyer@torchmobile.com>

        Reviewed by Adam Treat.

        Add new action to qwebpage to reload without cache.

        * Api/qwebpage.cpp:
        (QWebPagePrivate::updateAction):
        (QWebPagePrivate::updateNavigationActions):
        (QWebPage::triggerAction):
        * Api/qwebpage.h:

2009-07-16  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Darin Adler.

        Fix tooltip does not get its directionality from its element's directionality.
        https://bugs.webkit.org/show_bug.cgi?id=24187

        Per mitz's suggestion in comment #6, while getting the plain-text 
        title, we also get the directionality of the title. How to handle 
        the directionality is up to clients. Clients could ignore it, 
        or use attribute or unicode control characters to display the title
        as what they want.


        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::setToolTip): Add directionality as 2nd parameter to setToopTip() (without handling it yet).
        * WebCoreSupport/ChromeClientQt.h: Add directionality as 2nd parameter to setToolTip().

2009-07-15  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Simon Hausmann.

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

        When the user clicks a link with a target attribute, the newly created window should be visible.
        Make new windows created in Qtlauncher visible.

        * QtLauncher/main.cpp:
        (WebPage::createWindow):

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

        Reviewed by Zack Rusin.

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

        The default constructed values for QSize and WebCore::IntSize are different.  The former
        produces an invalid size whereas the latter produces a size of zero.  This was causing
        a layout to be triggered when constructing a view and an assert to be hit.  This patch fixes
        the crash by taking care not to cause an unnecessary layout triggered by ScrollView::setFixedLayoutSize.

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

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

        Reviewed by Ariya Hidayat.

        Fix qdoc warnings for QWebPage::shouldInterruptJavaScript() and mention
        how to re-implement it.

        * Api/qwebpage.cpp:

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

        Reviewed by Ariya Hidayat.

        Fix crash with plugins when the plugin stream is cancelled.

        Similar to r26667 handle the case where didReceiveResponse on the
        plugin view results in failure to set up the stream and
        setMainDocumentError being called instead. This will set the
        m_pluginView back to 0 and we need check for it before calling
        didReceiveData.

        This was triggered by consecutive execution of
        LayoutTests/plugins/return-error-from-new-stream-callback-in-full-frame-plugin.html
        followed by LayoutTests/scrollbars/scrollbar-crash-on-refresh.html

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

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

        Reviewed by Ariya Hidayat.

        Added QWebDatabase::removeAllDatabases, as a way to delete all
        databases from the offline storage path.

        Used by the Qt DRT.

        * Api/qwebdatabase.cpp:
        (QWebDatabase::removeAllDatabases):
        * Api/qwebdatabase.h:

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

        Reviewed by Ariya Hidayat.

        Added loadStarted() and loadFinished() signals to QWebFrame,
        to allow load tracking of individual frames, as opposed to
        QWebPage's loadStarted/loadFinished signals that are emitted
        whenever _any_ child frame loads/finishes.

        * Api/qwebframe.cpp: Document new signals.
        * Api/qwebframe.h: Add new signals.
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::setFrame): Connect new signals.

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

        Reviewed by Ariya Hidayat.

        Add hooks for the GCController JavaScript interface needed by the
        Qt DRT.

        Fixed sort order of includes in qwebframe.cpp.

        * Api/qwebframe.cpp:
        (qt_drt_javaScriptObjectsCount):
        (qt_drt_garbageCollector_collect):
        (qt_drt_garbageCollector_collectOnAlternateThread):

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

        Reviewed by Ariya Hidayat.

        Add hooks for the GCController JavaScript interface needed by the
        Qt DRT.

        Fixed sort order of includes in qwebframe.cpp.

        * Api/qwebframe.cpp:
        (qt_drt_javaScriptObjectsCount):
        (qt_drt_garbageCollector_collect):
        (qt_drt_garbageCollector_collectOnAlternateThread):

2009-07-12  Brent Fulgham  <bfulgham@gmail.com>

        Speculative build fix after http://trac.webkit.org/changeset/45786.

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

2009-07-10  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Holger Freyther.

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

        Fix a bug where webkit hangs when executing infinite JavaScript loop.

        * Api/qwebpage.cpp:
        (QWebPage::shouldInterruptJavaScript):
        * Api/qwebpage.h:
        * WebCoreSupport/ChromeClientQt.cpp:
        (WebCore::ChromeClientQt::shouldInterruptJavaScript):
        * tests/qwebpage/tst_qwebpage.cpp:
        (JSTestPage::JSTestPage):
        (JSTestPage::shouldInterruptJavaScript):
        (tst_QWebPage::infiniteLoopJS):

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

        Reviewed by Holger Freyther.

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

        Fix crash when in frame tree of a new frame before the new frame
        has been installed in the frame tree, similar to r35088.

        After calling Frame::init() the frame it may have been removed from the
        frame tree again through JavaScript. Detect this by checking the page()
        afterwards.

        To make this check safe the Frame::init() code was moved into
        QWebFrameData's constructor, where a RefPtr holds a reference to the frame.
        After the check back in FrameLoaderClientQt we would hold the single
        reference left and after release() the frame, its frame loader, its
        client as well as the QWebFrame should have disappeared then.

        * Api/qwebframe.cpp:
        (QWebFramePrivate::init): Only call Frame::init here, the rest is
        done in QWebFrameData's constructor.
        (QWebFrame::QWebFrame):
        * Api/qwebframe_p.h: Adjust declaration.
        (QWebFrameData::QWebFrameData): Create the Frame here.
        * Api/qwebpage.cpp:
        (QWebPagePrivate::createMainFrame): Adjust and simplify
        to new QWebFrame constructor.
        * WebCoreSupport/FrameLoaderClientQt.cpp:
        (WebCore::FrameLoaderClientQt::createFrame): Adjust to
        new QWebFrame construction using QWebFrameData and add the
        check like in r35088.

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.

