diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index fcdeddf..67e2040 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,5 +1,127 @@
 2006-08-24  Nikolas Zimmermann  <zimmermann@kde.org>
 
+        Reviewed/landed by Adam.
+
+        Final cleanup to conform to WebKit coding style!
+
+        * kcanvas/device/qt/KCanvasClipperQt.cpp:
+        (WebCore::KCanvasClipperQt::applyClip):
+        * kcanvas/device/qt/KCanvasClipperQt.h:
+        * kcanvas/device/qt/KCanvasPathQt.cpp:
+        * kcanvas/device/qt/KCanvasPathQt.h:
+        * kcanvas/device/qt/KRenderingDeviceQt.cpp:
+        * kcanvas/device/qt/KRenderingDeviceQt.h:
+        * kcanvas/device/qt/KRenderingPaintServerGradientQt.cpp:
+        (WebCore::KRenderingPaintServerLinearGradientQt::KRenderingPaintServerLinearGradientQt):
+        (WebCore::KRenderingPaintServerRadialGradientQt::KRenderingPaintServerRadialGradientQt):
+        * kcanvas/device/qt/KRenderingPaintServerGradientQt.h:
+        * kcanvas/device/qt/KRenderingPaintServerPatternQt.cpp:
+        (WebCore::KRenderingPaintServerPatternQt::KRenderingPaintServerPatternQt):
+        * kcanvas/device/qt/KRenderingPaintServerPatternQt.h:
+        * kcanvas/device/qt/KRenderingPaintServerQt.cpp:
+        (WebCore::KRenderingPaintServerQt::setPenProperties):
+        * kcanvas/device/qt/KRenderingPaintServerQt.h:
+        * kcanvas/device/qt/KRenderingPaintServerSolidQt.cpp:
+        (WebCore::KRenderingPaintServerSolidQt::KRenderingPaintServerSolidQt):
+        (WebCore::KRenderingPaintServerSolidQt::renderPath):
+        * kcanvas/device/qt/KRenderingPaintServerSolidQt.h:
+        * kcanvas/device/qt/RenderPathQt.cpp:
+        * kcanvas/device/qt/RenderPathQt.h:
+        * platform/qt/AffineTransformQt.cpp:
+        * platform/qt/BrowserExtensionQt.cpp:
+        * platform/qt/BrowserExtensionQt.h:
+        * platform/qt/ColorQt.cpp:
+        (WebCore::Color::Color):
+        * platform/qt/ComboBoxQt.cpp:
+        (WebCore::PlatformComboBox::PlatformComboBox):
+        (WebCore::PlatformComboBox::~PlatformComboBox):
+        (WebCore::PlatformComboBox::setParentWidget):
+        (WebCore::PlatformComboBox::appendGroupLabel):
+        * platform/qt/CookieJarQt.cpp:
+        * platform/qt/CursorQt.cpp:
+        (WebCore::Cursors::Cursors::self):
+        * platform/qt/FloatPointQt.cpp:
+        * platform/qt/FloatRectQt.cpp:
+        * platform/qt/FontCacheQt.cpp:
+        (WebCore::FontCache::getSimilarFontPlatformData):
+        (WebCore::FontCache::createFontPlatformData):
+        * platform/qt/FontDataQt.cpp:
+        * platform/qt/FontPlatformData.h:
+        * platform/qt/FontPlatformDataQt.cpp:
+        * platform/qt/FontQt.cpp:
+        (WebCore::Font::operator QFont):
+        (WebCore::Font::drawComplexText):
+        (WebCore::Font::floatWidthForComplexText):
+        * platform/qt/FrameQt.cpp:
+        (WebCore::FrameQt::openURL):
+        (WebCore::FrameQt::submitForm):
+        (WebCore::FrameQt::urlSelected):
+        (WebCore::FrameQt::keyEvent):
+        * platform/qt/FrameQt.h:
+        * platform/qt/GlyphMapQt.cpp:
+        * platform/qt/GraphicsContextQt.cpp:
+        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
+        (WebCore::GraphicsContext::GraphicsContext):
+        (WebCore::GraphicsContext::drawConvexPolygon):
+        (WebCore::GraphicsContext::setFocusRingClip):
+        (WebCore::GraphicsContext::clip):
+        * platform/qt/ImageQt.cpp:
+        (WebCore::Image::draw):
+        (WebCore::Image::drawTiled):
+        * platform/qt/ImageSourceQt.cpp:
+        * platform/qt/IntPointQt.cpp:
+        * platform/qt/IntRectQt.cpp:
+        * platform/qt/IntSizeQt.cpp:
+        * platform/qt/LineEditQt.cpp:
+        (WebCore::PlatformLineEdit::PlatformLineEdit):
+        (WebCore::PlatformLineEdit::~PlatformLineEdit):
+        (WebCore::PlatformLineEdit::setParentWidget):
+        (WebCore::PlatformLineEdit::addSearchResult):
+        * platform/qt/ListBoxQt.cpp:
+        (WebCore::ListBox::ListBox):
+        (WebCore::ListBox::~ListBox):
+        (WebCore::ListBox::setParentWidget):
+        * platform/qt/PageQt.cpp:
+        (WebCore::Page::windowRect):
+        (WebCore::Page::setWindowRect):
+        * platform/qt/PathQt.cpp:
+        (WebCore::Path::addArc):
+        * platform/qt/PlatformKeyboardEventQt.cpp:
+        (WebCore::windowsKeyCodeForKeyEvent):
+        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
+        * platform/qt/PlatformMouseEventQt.cpp:
+        * platform/qt/RenderThemeQt.cpp:
+        (WebCore::RenderThemeQt::getStylePainterAndWidgetFromPaintInfo):
+        (WebCore::RenderThemeQt::applyTheme):
+        (WebCore::RenderThemeQt::paintButton):
+        (WebCore::RenderThemeQt::paintTextField):
+        * platform/qt/ResourceLoaderCurl.cpp:
+        (WebCore::ResourceLoader::assembleResponseHeaders):
+        (WebCore::ResourceLoader::retrieveCharset):
+        (WebCore::ResourceLoader::receivedResponse):
+        * platform/qt/ResourceLoaderManager.cpp:
+        (WebCore::ResourceLoaderManager::add):
+        * platform/qt/ResourceLoaderManager.h:
+        * platform/qt/ScreenQt.cpp:
+        * platform/qt/ScrollViewCanvasQt.cpp:
+        (WebCore::ScrollViewCanvasQt::handleKeyEvent):
+        * platform/qt/ScrollViewCanvasQt.h:
+        * platform/qt/ScrollViewQt.cpp:
+        * platform/qt/SharedTimerQt.cpp:
+        * platform/qt/SharedTimerQt.h:
+        (WebCore::SharedTimerQt::inst):
+        * platform/qt/StringQt.cpp:
+        * platform/qt/SystemTimeQt.cpp:
+        * platform/qt/TemporaryLinkStubs.cpp:
+        * platform/qt/TextEditQt.cpp:
+        (WebCore::PlatformTextEdit::PlatformTextEdit):
+        (WebCore::PlatformTextEdit::~PlatformTextEdit):
+        (WebCore::PlatformTextEdit::setParentWidget):
+        * platform/qt/WidgetQt.cpp:
+        (WebCore::Widget::setQWidget):
+
+2006-08-24  Nikolas Zimmermann  <zimmermann@kde.org>
+
         Reviewed and landed by Anders.
 
         Fixes parts of: http://bugzilla.opendarwin.org/show_bug.cgi?id=10467
diff --git a/WebCore/kcanvas/device/qt/KCanvasClipperQt.cpp b/WebCore/kcanvas/device/qt/KCanvasClipperQt.cpp
index 35f2324..4aaa760 100644
--- a/WebCore/kcanvas/device/qt/KCanvasClipperQt.cpp
+++ b/WebCore/kcanvas/device/qt/KCanvasClipperQt.cpp
@@ -31,8 +31,8 @@
 
 void KCanvasClipperQt::applyClip(const FloatRect& boundingBox) const
 {
-    KRenderingDeviceContext *context = renderingDevice()->currentContext();
-    KRenderingDeviceContextQt *qtContext = static_cast<KRenderingDeviceContextQt *>(context);
+    KRenderingDeviceContext* context = renderingDevice()->currentContext();
+    KRenderingDeviceContextQt* qtContext = static_cast<KRenderingDeviceContextQt*>(context);
     if (m_clipData.count() < 1)
         return;
 
@@ -48,7 +48,7 @@
         if (clipData.windRule() != clipRule)
             heterogenousClipRules = true;
        
-        QPainterPath path = static_cast<KCanvasPathQt *>(clipData.path.get())->qtPath(); 
+        QPainterPath path = static_cast<KCanvasPathQt*>(clipData.path.get())->qtPath(); 
         if (path.isEmpty())
             continue;
 
@@ -104,11 +104,10 @@
         // we would have to detect such, draw to a mask, and then clip
         // to that mask
         // if (!CGContextIsPathEmpty(cgContext)) {
-            if (clipRule == RULE_EVENODD) {
+            if (clipRule == RULE_EVENODD)
                 newPath.setFillRule(Qt::OddEvenFill);
-            } else {
+            else
                 newPath.setFillRule(Qt::WindingFill);
-            }
         // }
     }
 
diff --git a/WebCore/kcanvas/device/qt/KRenderingPaintServerGradientQt.cpp b/WebCore/kcanvas/device/qt/KRenderingPaintServerGradientQt.cpp
index 3e3a728..779a7af 100644
--- a/WebCore/kcanvas/device/qt/KRenderingPaintServerGradientQt.cpp
+++ b/WebCore/kcanvas/device/qt/KRenderingPaintServerGradientQt.cpp
@@ -51,7 +51,7 @@
 // KRenderingPaintServerLinearGradientQt
 KRenderingPaintServerLinearGradientQt::KRenderingPaintServerLinearGradientQt()
     : KRenderingPaintServerLinearGradient()
-      , KRenderingPaintServerQt()
+    , KRenderingPaintServerQt()
 {
 }
 
@@ -148,6 +148,7 @@
 // KRenderingPaintServerRadialGradientQt
 KRenderingPaintServerRadialGradientQt::KRenderingPaintServerRadialGradientQt()
     : KRenderingPaintServerRadialGradient()
+    , KRenderingPaintServerQt()
 {
 }
 
diff --git a/WebCore/kcanvas/device/qt/KRenderingPaintServerPatternQt.cpp b/WebCore/kcanvas/device/qt/KRenderingPaintServerPatternQt.cpp
index 3833e03..1bb62fa 100644
--- a/WebCore/kcanvas/device/qt/KRenderingPaintServerPatternQt.cpp
+++ b/WebCore/kcanvas/device/qt/KRenderingPaintServerPatternQt.cpp
@@ -42,7 +42,7 @@
 // KRenderingPaintServerPatternQt
 KRenderingPaintServerPatternQt::KRenderingPaintServerPatternQt()
     : KRenderingPaintServerPattern()
-      , KRenderingPaintServerQt()
+    , KRenderingPaintServerQt()
 {
 }
 
diff --git a/WebCore/kcanvas/device/qt/KRenderingPaintServerQt.cpp b/WebCore/kcanvas/device/qt/KRenderingPaintServerQt.cpp
index 7b5bbd4..bdcac03 100644
--- a/WebCore/kcanvas/device/qt/KRenderingPaintServerQt.cpp
+++ b/WebCore/kcanvas/device/qt/KRenderingPaintServerQt.cpp
@@ -41,18 +41,16 @@
 void KRenderingPaintServerQt::setPenProperties(const KRenderingStrokePainter& strokePainter, QPen& pen) const
 {
     pen.setWidthF(strokePainter.strokeWidth());
-    if (strokePainter.strokeCapStyle() == CAP_BUTT) {
+    if (strokePainter.strokeCapStyle() == CAP_BUTT)
         pen.setCapStyle(Qt::FlatCap);
-    } else if (strokePainter.strokeCapStyle() == CAP_ROUND) {
+    else if (strokePainter.strokeCapStyle() == CAP_ROUND)
         pen.setCapStyle(Qt::RoundCap);
-    }
 
     if(strokePainter.strokeJoinStyle() == JOIN_MITER) {
         pen.setJoinStyle(Qt::MiterJoin);
         pen.setMiterLimit((qreal)strokePainter.strokeMiterLimit());
-    } else if(strokePainter.strokeJoinStyle() == JOIN_ROUND) {
+    else if(strokePainter.strokeJoinStyle() == JOIN_ROUND)
         pen.setJoinStyle(Qt::RoundJoin);
-    }
 
     KCDashArray dashes = strokePainter.dashArray();
     unsigned int dashLength = !dashes.isEmpty() ? dashes.count() : 0;
diff --git a/WebCore/kcanvas/device/qt/KRenderingPaintServerSolidQt.cpp b/WebCore/kcanvas/device/qt/KRenderingPaintServerSolidQt.cpp
index ba4e18b..3a2ef49 100644
--- a/WebCore/kcanvas/device/qt/KRenderingPaintServerSolidQt.cpp
+++ b/WebCore/kcanvas/device/qt/KRenderingPaintServerSolidQt.cpp
@@ -37,7 +37,7 @@
 
 KRenderingPaintServerSolidQt::KRenderingPaintServerSolidQt()
     : KRenderingPaintServerSolid()
-      , KRenderingPaintServerQt()
+    , KRenderingPaintServerQt()
 {
 }
 
@@ -96,7 +96,7 @@
 void KRenderingPaintServerSolidQt::renderPath(KRenderingDeviceContext* context, const RenderPath* path, KCPaintTargetType type) const
 {
     RenderStyle* renderStyle = path->style();
-    KRenderingDeviceContextQt *qtContext = static_cast<KRenderingDeviceContextQt*>(context);
+    KRenderingDeviceContextQt* qtContext = static_cast<KRenderingDeviceContextQt*>(context);
 
     if ((type & APPLY_TO_FILL) && KSVGPainterFactory::isFilled(renderStyle))
         qtContext->fillPath();
diff --git a/WebCore/kcanvas/device/qt/RenderPathQt.cpp b/WebCore/kcanvas/device/qt/RenderPathQt.cpp
index 7b1d864..df210cb 100644
--- a/WebCore/kcanvas/device/qt/RenderPathQt.cpp
+++ b/WebCore/kcanvas/device/qt/RenderPathQt.cpp
@@ -21,11 +21,11 @@
     Boston, MA 02111-1307, USA.
 */
 
-#include <QDebug>
-
 #include "config.h"
 #include "RenderPathQt.h"
 
+#include <QDebug>
+
 namespace WebCore {
     
 RenderPathQt::RenderPathQt(RenderStyle* style, SVGStyledElement* node)
diff --git a/WebCore/kcanvas/device/qt/RenderPathQt.h b/WebCore/kcanvas/device/qt/RenderPathQt.h
index f2f360f..5683784 100644
--- a/WebCore/kcanvas/device/qt/RenderPathQt.h
+++ b/WebCore/kcanvas/device/qt/RenderPathQt.h
@@ -34,7 +34,7 @@
     RenderPathQt(RenderStyle*, SVGStyledElement*);
 
 protected:
-    virtual void drawMarkersIfNeeded(GraphicsContext*, const FloatRect&, const KCanvasPath *) const;
+    virtual void drawMarkersIfNeeded(GraphicsContext*, const FloatRect&, const KCanvasPath*) const;
 };
 
 }
diff --git a/WebCore/platform/qt/ColorQt.cpp b/WebCore/platform/qt/ColorQt.cpp
index fd62e88..5d16740 100644
--- a/WebCore/platform/qt/ColorQt.cpp
+++ b/WebCore/platform/qt/ColorQt.cpp
@@ -32,7 +32,7 @@
 
 namespace WebCore {
 
-Color::Color(const QColor &c)
+Color::Color(const QColor& c)
     : m_color(makeRGBA(c.red(), c.green(), c.blue(), c.alpha()))
 {
     m_valid = c.isValid();
diff --git a/WebCore/platform/qt/ComboBoxQt.cpp b/WebCore/platform/qt/ComboBoxQt.cpp
index 26943fa..44ebffe 100644
--- a/WebCore/platform/qt/ComboBoxQt.cpp
+++ b/WebCore/platform/qt/ComboBoxQt.cpp
@@ -40,17 +40,14 @@
     : Widget()
     , m_comboBox(0)
 {
-    qDebug("PlatformComboBox::PlatformComboBox(), this=%p", this);
 }
 
 PlatformComboBox::~PlatformComboBox()
 {
-    qDebug("PlatformComboBox::~PlatformComboBox(), this=%p", this);
 }
 
 void PlatformComboBox::setParentWidget(QWidget* parent)
 {
-    qDebug("PlatformComboBox::setParentWidget(), parent=%p", parent);
     Widget::setParentWidget(parent);
 
     Q_ASSERT(m_comboBox == 0);
@@ -71,7 +68,7 @@
 
 void PlatformComboBox::appendGroupLabel(const DeprecatedString& text)
 {
-    // TODO: Group label?
+    // FIXME: Group label?
     m_comboBox->addItem(text);
 }
 
diff --git a/WebCore/platform/qt/CursorQt.cpp b/WebCore/platform/qt/CursorQt.cpp
index 1824901..c11a951 100644
--- a/WebCore/platform/qt/CursorQt.cpp
+++ b/WebCore/platform/qt/CursorQt.cpp
@@ -90,8 +90,8 @@
     }
 
 public:
-    static Cursors *self();
-    static Cursors *s_self;
+    static Cursors* self();
+    static Cursors* s_self;
 
     Cursor CrossCursor;
     Cursor MoveCursor;
@@ -111,9 +111,8 @@
 
 Cursors* Cursors::self()
 {
-    if (!s_self) {
-        s_self = new Cursors;
-    }
+    if (!s_self)
+        s_self = new Cursors();
 
     return s_self;
 }
diff --git a/WebCore/platform/qt/FontCacheQt.cpp b/WebCore/platform/qt/FontCacheQt.cpp
index 97227e6..fb3020c 100644
--- a/WebCore/platform/qt/FontCacheQt.cpp
+++ b/WebCore/platform/qt/FontCacheQt.cpp
@@ -48,7 +48,7 @@
 
 FontPlatformData* FontCache::getSimilarFontPlatformData(const Font& font)
 {
-    return new FontPlatformData(font.fontDescription(), font.family().family());
+    return 0;
 }
 
 FontPlatformData* FontCache::getLastResortFallbackFont(const Font& font)
@@ -61,7 +61,7 @@
 
 FontPlatformData* FontCache::createFontPlatformData(const FontDescription& fontDescription, const AtomicString& family)
 {
-    return 0;
+    return new FontPlatformData(fontDescription, family);
 }
 
 }
diff --git a/WebCore/platform/qt/FontPlatformData.h b/WebCore/platform/qt/FontPlatformData.h
index ad1cddf..a07d6b3 100644
--- a/WebCore/platform/qt/FontPlatformData.h
+++ b/WebCore/platform/qt/FontPlatformData.h
@@ -39,8 +39,8 @@
 
 class FontPlatformData {
 public:
-    FontPlatformData(const FontPlatformData& other);
-    FontPlatformData& operator=(const FontPlatformData& other);
+    FontPlatformData(const FontPlatformData&);
+    FontPlatformData& operator=(const FontPlatformData&);
 
     class Deleted { };
     FontPlatformData(Deleted);
@@ -56,7 +56,7 @@
 
     unsigned hash() const;
 
-    bool operator==(const FontPlatformData& other) const;
+    bool operator==(const FontPlatformData&) const;
 
 private:
     QFont m_font;
diff --git a/WebCore/platform/qt/FontPlatformDataQt.cpp b/WebCore/platform/qt/FontPlatformDataQt.cpp
index 5b6e6d8..773135a 100644
--- a/WebCore/platform/qt/FontPlatformDataQt.cpp
+++ b/WebCore/platform/qt/FontPlatformDataQt.cpp
@@ -34,7 +34,7 @@
 #include "DeprecatedString.h"
 #include "FontDescription.h"
 
-#include <QDebug>
+#include <QHash>
 #include <QFontInfo>
 
 namespace WebCore {
diff --git a/WebCore/platform/qt/FontQt.cpp b/WebCore/platform/qt/FontQt.cpp
index 16098c1..ed9f15a 100644
--- a/WebCore/platform/qt/FontQt.cpp
+++ b/WebCore/platform/qt/FontQt.cpp
@@ -41,7 +41,6 @@
 
 Font::operator QFont() const
 {
-    Q_ASSERT(primaryFont() != 0);
     return primaryFont()->platformData().font();
 }
 
@@ -62,7 +61,7 @@
 
 void Font::drawComplexText(GraphicsContext* ctx, const TextRun& run, const TextStyle&, const FloatPoint& point) const
 {
-    // ### style, run.from()/length() cut-off
+    // FIXME: style, run.from()/length() cut-off
     ctx->platformContext()->drawText(point.x(),
                                      point.y(),
                                      QString::fromRawData(reinterpret_cast<const QChar*>(run.characters() + run.from()), run.length()));
@@ -70,7 +69,7 @@
 
 float Font::floatWidthForComplexText(const TextRun& run, const TextStyle&) const
 {
-    // ### style
+    // FIXME: style
     QFontMetricsF metrics(primaryFont()->m_font.font());
     return metrics.width(QString::fromRawData(reinterpret_cast<const QChar*>(run.characters() + run.from()), run.length()));
 }
diff --git a/WebCore/platform/qt/FrameQt.cpp b/WebCore/platform/qt/FrameQt.cpp
index 448fb69..0e0bb6c 100644
--- a/WebCore/platform/qt/FrameQt.cpp
+++ b/WebCore/platform/qt/FrameQt.cpp
@@ -143,10 +143,11 @@
 {
     qDebug("openURL(%s)", url.url().latin1());
     didOpenURL(url);
-    
-    ResourceRequest request(resourceRequest());
-    request.m_responseMIMEType = "image/svg+xml";
-    setResourceRequest(request);
+
+    // FIXME: Use mimetype logic from KIO!
+    // ResourceRequest request(resourceRequest());
+    // request.m_responseMIMEType = "image/svg+xml";
+    // setResourceRequest(request);
 
     begin(url);
     ResourceLoader* job = new ResourceLoader(this, "GET", url);
@@ -164,7 +165,7 @@
 
     d->m_submittedFormURL = request.url();
 
-    /* TODO: Once we have a KPart - named "FramePartQt" - we can let that inherit from FrameQtClient and implement the functions...)
+    /* FIXME: Once we have a KPart - named "FramePartQt" - we can let that inherit from FrameQtClient and implement the functions...)
     if(m_client)
         m_client->submitForm(request.doPost() ? "POST" : "GET", request.url(), &request.postData);
     */
@@ -181,7 +182,6 @@
 {
     //need to potentially updateLocationBar(str.ascii()); or notify sys of new url mybe event or callback
     const KURL url = request.url();
-    printf("------------------> LOADING NEW URL %s \n", url.url().ascii());
     didOpenURL(url);
     begin(url);
     ResourceLoader* job = new ResourceLoader(this, "GET", url);
@@ -498,11 +498,11 @@
 
     // Check for cases where we are too early for events -- possible unmatched key up
     // from pressing return in the location bar.
-    Document *doc = document();
+    Document* doc = document();
     if(!doc)
         return false;
 
-    Node *node = doc->focusNode();
+    Node* node = doc->focusNode();
     if(!node) {
         if (doc->isHTMLDocument())
             node = doc->body();
diff --git a/WebCore/platform/qt/FrameQt.h b/WebCore/platform/qt/FrameQt.h
index 6608477..aae5872 100644
--- a/WebCore/platform/qt/FrameQt.h
+++ b/WebCore/platform/qt/FrameQt.h
@@ -49,7 +49,8 @@
     virtual void submitForm(const String& method, const KURL&, const FormData*) = 0;
 };
 
-class FrameQt : public Frame, public ResourceLoaderClient {
+class FrameQt : public Frame,
+                public ResourceLoaderClient {
 public:
     FrameQt(QWidget* parent);
     FrameQt();
@@ -136,7 +137,7 @@
 
     virtual void receivedResponse(ResourceLoader*, PlatformResponse);
     virtual void receivedData(ResourceLoader*, const char*, int);
-    virtual void receivedAllData(ResourceLoader*,PlatformData);
+    virtual void receivedAllData(ResourceLoader*, PlatformData);
 
     void setFrameGeometry(const IntRect&);
 
diff --git a/WebCore/platform/qt/GraphicsContextQt.cpp b/WebCore/platform/qt/GraphicsContextQt.cpp
index 8e6c617..617befd 100644
--- a/WebCore/platform/qt/GraphicsContextQt.cpp
+++ b/WebCore/platform/qt/GraphicsContextQt.cpp
@@ -137,7 +137,7 @@
     }
 
     QPixmap pixmap;
-    QPainter *painter;
+    QPainter* painter;
     qreal opacity;
 };
 
@@ -195,7 +195,7 @@
     painter = p;
     redirect = 0;
 
-    // TODO: Maybe only enable in SVG mode?
+    // FIXME: Maybe only enable in SVG mode?
     painter->setRenderHint(QPainter::Antialiasing);
 }
 
@@ -205,7 +205,7 @@
 
 GraphicsContext::GraphicsContext(PlatformGraphicsContext* context)
     : m_common(createGraphicsContextPrivate())
-      , m_data(new GraphicsContextPlatformPrivate(context))
+    , m_data(new GraphicsContextPlatformPrivate(context))
 {
     setPaintingDisabled(!context);
 }
@@ -243,7 +243,7 @@
     if (m_data->shadow.isNull())
         return;
 
-    TextShadow *shadow = &m_data->shadow;
+    TextShadow* shadow = &m_data->shadow;
 
     if (shadow->blur <= 0) {
         Pen p = pen();
@@ -252,7 +252,7 @@
         setPen(p);
     } else {
         const int thickness = shadow->blur;
-        // ### OPTIMIZE: limit the area to only the actually painted area + 2*thickness
+        // FIXME: OPTIMIZE: limit the area to only the actually painted area + 2*thickness
         const int w = m_data->p().device()->width();
         const int h = m_data->p().device()->height();
         const QRgb color = qRgb(255, 255, 255);
@@ -421,7 +421,7 @@
     if (paintingDisabled())
         return;
 
-    m_data->p().drawConvexPolygon((QPoint*)points, npoints);
+    m_data->p().drawConvexPolygon(reinterpret_cast<const QPoint*>(points), npoints);
 }
 
 void GraphicsContext::fillRect(const IntRect& rect, const Color& c)
@@ -458,7 +458,7 @@
     notImplemented();
 }
 
-void GraphicsContext::setFocusRingClip(const IntRect &rect)
+void GraphicsContext::setFocusRingClip(const IntRect& rect)
 {
     if (paintingDisabled())
         return;
@@ -626,7 +626,7 @@
     m_data->p().setCompositionMode(toQtCompositionMode(op));
 }
 
-void GraphicsContext::clip(const Path &path)
+void GraphicsContext::clip(const Path& path)
 {
     if (paintingDisabled())
         return;
diff --git a/WebCore/platform/qt/ImageQt.cpp b/WebCore/platform/qt/ImageQt.cpp
index 59d8e3c..18aa014 100644
--- a/WebCore/platform/qt/ImageQt.cpp
+++ b/WebCore/platform/qt/ImageQt.cpp
@@ -113,7 +113,7 @@
     // Set the compositing operation.
     ctxt->setCompositeOperation(op);
 
-    QPainter *painter(ctxt->platformContext());
+    QPainter* painter(ctxt->platformContext());
 
     // Test using example site at
     // http://www.meyerweb.com/eric/css/edge/complexspiral/demo.html    
@@ -158,7 +158,7 @@
 
     // Set the compositing operation.
     ctxt->setCompositeOperation(op);
-    QPainter *p = ctxt->platformContext();
+    QPainter* p = ctxt->platformContext();
     p->drawTiledPixmap(dstRect, pix);
 
     ctxt->restore();
diff --git a/WebCore/platform/qt/LineEditQt.cpp b/WebCore/platform/qt/LineEditQt.cpp
index bbad274..424f993 100644
--- a/WebCore/platform/qt/LineEditQt.cpp
+++ b/WebCore/platform/qt/LineEditQt.cpp
@@ -26,7 +26,6 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-#include <QDebug>
 #include <QLineEdit>
 
 #include <config.h>
@@ -45,17 +44,14 @@
     : m_lineEdit(0)
     , m_type(type)
 {
-    qDebug("PlatformLineEdit::PlatformLineEdit(), this=%p", this);
 }
 
 PlatformLineEdit::~PlatformLineEdit()
 {
-    qDebug("PlatformLineEdit::~PlatformLineEdit()");
 }
 
 void PlatformLineEdit::setParentWidget(QWidget* parent)
 {
-    qDebug("PlatformLineEdit::setParentWidget(), parent=%p", parent);
     Widget::setParentWidget(parent);
 
     Q_ASSERT(m_lineEdit == 0);
diff --git a/WebCore/platform/qt/ListBoxQt.cpp b/WebCore/platform/qt/ListBoxQt.cpp
index 408828a..5502b8f 100644
--- a/WebCore/platform/qt/ListBoxQt.cpp
+++ b/WebCore/platform/qt/ListBoxQt.cpp
@@ -42,17 +42,14 @@
     , _width(0.0)
     , _widthGood(false)
 {
-    qDebug("ListBox::ListBox(), this=%p", this);
 }
 
 ListBox::~ListBox()
 {
-    qDebug("ListBox::~ListBox(), this=%p", this);
 }
 
 void ListBox::setParentWidget(QWidget* parent)
 {
-    qDebug("ListBox::setParentWidget(), parent=%p", parent);
     ScrollView::setParentWidget(parent);
 
     Q_ASSERT(m_listWidget == 0);
diff --git a/WebCore/platform/qt/PageQt.cpp b/WebCore/platform/qt/PageQt.cpp
index 928acc7..b534bbc 100644
--- a/WebCore/platform/qt/PageQt.cpp
+++ b/WebCore/platform/qt/PageQt.cpp
@@ -27,7 +27,6 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-#include <QDebug>
 #include <QWidget>
 
 #include "config.h"
@@ -55,14 +54,11 @@
     if (!widget)
         return FloatRect();
 
-    qDebug() << " Page::windowRect() -> " << (QRectF) widget->geometry();
     return (IntRect) widget->geometry();
 }
 
 void Page::setWindowRect(const FloatRect& r)
 {
-    qDebug() << " Page::setWindowRect() -> " << (QRectF) r;
-
     QWidget* widget = rootWindowForFrame(mainFrame());
     if (widget)
         widget->setGeometry(QRect(qRound(r.x()), qRound(r.y()), qRound(r.width()), qRound(r.height())));
diff --git a/WebCore/platform/qt/PathQt.cpp b/WebCore/platform/qt/PathQt.cpp
index a3540e2..01314f0 100644
--- a/WebCore/platform/qt/PathQt.cpp
+++ b/WebCore/platform/qt/PathQt.cpp
@@ -133,8 +133,8 @@
 
     double span = 0;
 
-    double xs     = xc - radius;
-    double ys     = yc - radius;
+    double xs = xc - radius;
+    double ys = yc - radius;
     double width  = radius*2;
     double height = radius*2;
 
@@ -143,7 +143,7 @@
     else if (anticlockwise && (sa < ea))
         span -= 360;
 
-    //### this is also due to switched coordinate system
+    // this is also due to switched coordinate system
     // we would end up with a 0 span instead of 360
     if (!(qFuzzyCompare(span + (ea - sa), 0.0) &&
           qFuzzyCompare(abs(span), 360.0))) {
@@ -152,6 +152,7 @@
 
     m_path->moveTo(QPointF(xc + radius  * cos(sar),
                           yc - radius  * sin(sar)));
+
     m_path->arcTo(xs, ys, width, height, sa, span);
 }
 
diff --git a/WebCore/platform/qt/PlatformKeyboardEventQt.cpp b/WebCore/platform/qt/PlatformKeyboardEventQt.cpp
index c86ce18..b6313c8 100644
--- a/WebCore/platform/qt/PlatformKeyboardEventQt.cpp
+++ b/WebCore/platform/qt/PlatformKeyboardEventQt.cpp
@@ -316,7 +316,7 @@
             return VK_Z; //  (5A) Z key case 'z': case 'Z': return 0x5A;
         case Qt::Key_Meta:
             return VK_LWIN; // (5B) Left Windows key (Microsoft Natural keyboard)
-        //case Qt::Key_Meta_R: TODO: What to do here?
+        //case Qt::Key_Meta_R: FIXME: What to do here?
         //    return VK_RWIN; // (5C) Right Windows key (Natural keyboard)
             // VK_APPS (5D) Applications key (Natural keyboard)
             // VK_SLEEP (5F) Computer Sleep key
@@ -422,7 +422,7 @@
 PlatformKeyboardEvent::PlatformKeyboardEvent(QKeyEvent* event, bool isKeyUp)
 {
     m_text = event->text();
-    m_unmodifiedText = event->text(); // TODO: not correct
+    m_unmodifiedText = event->text(); // FIXME: not correct
     m_keyIdentifier = keyIdentifierForQtKeyCode(event->key());
     m_isKeyUp = isKeyUp;
     m_autoRepeat = event->isAutoRepeat();
diff --git a/WebCore/platform/qt/RenderThemeQt.cpp b/WebCore/platform/qt/RenderThemeQt.cpp
index c3faec2..c4c097f 100644
--- a/WebCore/platform/qt/RenderThemeQt.cpp
+++ b/WebCore/platform/qt/RenderThemeQt.cpp
@@ -23,13 +23,13 @@
  *
  */
 
+#include "config.h"
+
 #include <QStyle>
 #include <QWidget>
 #include <QPainter>
 #include <QStyleOptionButton>
 
-#include "config.h"
-
 #include "RenderTheme.h"
 #include "GraphicsContext.h"
 
@@ -79,7 +79,7 @@
 
     bool supportsFocus(EAppearance) const;
 
-    bool stylePainterAndWidgetForPaintInfo(const RenderObject::PaintInfo&, QStyle*&, QPainter*&, QWidget*&) const;
+    bool getStylePainterAndWidgetFromPaintInfo(const RenderObject::PaintInfo&, QStyle*&, QPainter*&, QWidget*&) const;
     EAppearance applyTheme(QStyleOption&, RenderObject*) const;
 };
 
@@ -149,7 +149,7 @@
     }
 }
 
-bool RenderThemeQt::stylePainterAndWidgetForPaintInfo(const RenderObject::PaintInfo& i, QStyle*& style, QPainter*& painter, QWidget*& widget) const
+bool RenderThemeQt::getStylePainterAndWidgetFromPaintInfo(const RenderObject::PaintInfo& i, QStyle*& style, QPainter*& painter, QWidget*& widget) const
 {
     painter = (i.p ? static_cast<QPainter*>(i.p->platformContext()) : 0);
     widget = (painter ? static_cast<QWidget*>(painter->device()) : 0);
@@ -202,7 +202,8 @@
         option.state &= ~QStyle::State_Enabled;
 
     if (isReadOnlyControl(o))
-        option.state |= QStyle::State_ReadOnly; // Readonly is supported on textfields.
+        // Readonly is supported on textfields.
+        option.state |= QStyle::State_ReadOnly;
 
     if (supportsFocus(o->style()->appearance()) && isFocused(o))
         option.state |= QStyle::State_HasFocus;
@@ -231,7 +232,7 @@
     QPainter* painter = 0;
     QWidget* widget = 0;
     
-    if (!stylePainterAndWidgetForPaintInfo(i, style, painter, widget))
+    if (!getStylePainterAndWidgetFromPaintInfo(i, style, painter, widget))
         return true;
     
     QStyleOptionButton option;
@@ -262,7 +263,7 @@
     QPainter* painter = 0;
     QWidget* widget = 0;
     
-    if (!stylePainterAndWidgetForPaintInfo(i, style, painter, widget))
+    if (!getStylePainterAndWidgetFromPaintInfo(i, style, painter, widget))
         return true;
   
     QStyleOption option;
@@ -272,7 +273,7 @@
     Q_ASSERT(appearance == TextFieldAppearance);
 
     // Now paint the text field.
-    // TODO: this is not enough for sure! (use 'option'...)
+    // FIXME: this is not enough for sure! (use 'option'...)
     painter->drawRect(r);
 
     return false;
diff --git a/WebCore/platform/qt/ResourceLoaderCurl.cpp b/WebCore/platform/qt/ResourceLoaderCurl.cpp
index 82eda3a..0aeafef 100644
--- a/WebCore/platform/qt/ResourceLoaderCurl.cpp
+++ b/WebCore/platform/qt/ResourceLoaderCurl.cpp
@@ -65,7 +65,7 @@
         d->responseHeaders = DeprecatedString::fromUtf8(d->response.toUtf8(), d->response.length());
         d->assembledResponseHeaders = true;
  
-        // TODO: Move the client activation to receivedResponse(), once
+        // FIXME: Move the client activation to receivedResponse(), once
         // we use KIO, and receivedResponse() is called only once.
         if (d->client) {
             d->client->receivedResponse(const_cast<ResourceLoader *>(this), (char *) d->response.data());
@@ -81,7 +81,7 @@
         d->retrievedCharset = true;
     }
 
-    // TODO: We can just parse the headers here, but once we use KIO
+    // FIXME: We can just parse the headers here, but once we use KIO
     // we can set the response parameter to sth. else than a "char*".
     // I save my time but not implementing it for now :-)
     notImplemented();
@@ -94,7 +94,7 @@
     d->assembledResponseHeaders = false;
     d->retrievedCharset = false;
 
-    // TODO: This is flawed:
+    // FIXME: This is flawed:
     // - usually receivedResponse() should be called _once_, when the
     //   response is available - seems very unflexible to do that with libcurl
     //   (so let's wait until it dies and do it properly with KIO then.)
diff --git a/WebCore/platform/qt/ResourceLoaderManager.cpp b/WebCore/platform/qt/ResourceLoaderManager.cpp
index aeec1f2..bb03095 100644
--- a/WebCore/platform/qt/ResourceLoaderManager.cpp
+++ b/WebCore/platform/qt/ResourceLoaderManager.cpp
@@ -215,7 +215,7 @@
         strncpy(postDataString, postData.ascii(), postData.length());
         postDataString[postData.length()] = '\0';
 
-        // TODO: Do it properly after we got rid of libcurl! (also leaks the headerlist. hmpf.)
+        // FIXME: Do it properly after we got rid of libcurl! (also leaks the headerlist. hmpf.)
         curl_easy_setopt(d->m_handle, CURLOPT_POSTFIELDS, postDataString);
     }
 
diff --git a/WebCore/platform/qt/ScrollViewCanvasQt.cpp b/WebCore/platform/qt/ScrollViewCanvasQt.cpp
index 91ef155..ab32ae8 100644
--- a/WebCore/platform/qt/ScrollViewCanvasQt.cpp
+++ b/WebCore/platform/qt/ScrollViewCanvasQt.cpp
@@ -29,10 +29,11 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
+#include "config.h"
+
 #include "ScrollViewCanvasQt.h"
 #include "ScrollViewCanvasQt.moc"
 
-#include "config.h"
 #include "FrameQt.h"
 #include "FrameView.h"
 #include "TypingCommand.h"
@@ -42,7 +43,6 @@
 #include "PlatformMouseEvent.h"
 #include "PlatformKeyboardEvent.h"
 
-#include <QDebug>
 #include <QPainter>
 #include <QPaintEvent>
 #include <QMouseEvent>
@@ -149,10 +149,11 @@
                     TypingCommand::insertText(frame->document(), kevent.text(), false);
 
             }
+
             handled = true;
         }
         
-        // TODO: doScroll stuff()!
+        // FIXME: doScroll stuff()!
     }
 }
 
diff --git a/WebCore/platform/qt/SharedTimerQt.h b/WebCore/platform/qt/SharedTimerQt.h
index affff29..cda9c4e 100644
--- a/WebCore/platform/qt/SharedTimerQt.h
+++ b/WebCore/platform/qt/SharedTimerQt.h
@@ -29,11 +29,8 @@
 #define SharedTimerQtQt_H
 
 #include "SharedTimerQt.h"
-
 #include "SystemTime.h"
-#include <wtf/Assertions.h>
-#include <stdio.h>
-#include <stdlib.h>
+
 #include <QTimer>
 
 namespace WebCore {
@@ -53,7 +50,7 @@
     }
 
 public:
-    static SharedTimerQt *inst()
+    static SharedTimerQt* inst()
     {
         if (!s_self)
             s_self = new SharedTimerQt();
diff --git a/WebCore/platform/qt/StringQt.cpp b/WebCore/platform/qt/StringQt.cpp
index 830b7c6..34b43d7 100644
--- a/WebCore/platform/qt/StringQt.cpp
+++ b/WebCore/platform/qt/StringQt.cpp
@@ -24,6 +24,7 @@
  */
 
 #include "config.h"
+
 #include "PlatformString.h"
 #include "DeprecatedString.h"
 
diff --git a/WebCore/platform/qt/TextEditQt.cpp b/WebCore/platform/qt/TextEditQt.cpp
index 49ae4ca..023905c 100644
--- a/WebCore/platform/qt/TextEditQt.cpp
+++ b/WebCore/platform/qt/TextEditQt.cpp
@@ -24,10 +24,10 @@
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
  */
 
-#include <QDebug>
+#include "config.h"
+
 #include <QTextEdit>
 
-#include <config.h>
 #include "GraphicsTypes.h"
 #include "ScrollView.h"
 #include "TextDirection.h"
@@ -42,17 +42,14 @@
 PlatformTextEdit::PlatformTextEdit(Widget* parent)
     : ScrollView()
 {
-    qDebug("PlatformTextEdit::PlatformTextEdit(), this=%p", this);
 }
 
 PlatformTextEdit::~PlatformTextEdit()
 {
-    qDebug("PlatformTextEdit::~PlatformTextEdit()");
 }
 
 void PlatformTextEdit::setParentWidget(QWidget* parent)
 {
-    qDebug("PlatformTextEdit::setParentWidget(), parent=%p", parent);
     Widget::setParentWidget(parent);
 
     QTextEdit *widget = new QTextEdit(parent, "");
diff --git a/WebCore/platform/qt/WidgetQt.cpp b/WebCore/platform/qt/WidgetQt.cpp
index 4e63649..25e16ea 100644
--- a/WebCore/platform/qt/WidgetQt.cpp
+++ b/WebCore/platform/qt/WidgetQt.cpp
@@ -29,15 +29,14 @@
  */
 
 #include "config.h"
-#include "Widget.h"
 
-#include "Cursor.h"
 #include "Font.h"
-#include "GraphicsContext.h"
+#include "Widget.h"
+#include "Cursor.h"
 #include "IntRect.h"
 #include "RenderObject.h"
+#include "GraphicsContext.h"
 
-#include <QDebug>
 #include <QWidget>
 
 #define notImplemented() do { fprintf(stderr, "FIXME: UNIMPLEMENTED: %s:%d\n", __FILE__, __LINE__); } while(0)
@@ -133,7 +132,7 @@
         data->m_widget->hide();
 }
 
-void Widget::setQWidget(QWidget*child)
+void Widget::setQWidget(QWidget* child)
 {
     delete data->m_widget;
     data->m_widget = child;
