2007-11-19 Alp Toker <alp@atoker.com>
authoralp@webkit.org <alp@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 19 Nov 2007 15:53:38 +0000 (15:53 +0000)
committeralp@webkit.org <alp@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 19 Nov 2007 15:53:38 +0000 (15:53 +0000)
        Reviewed by Mark Rowe.

        GTK+ drawing fixes.

        Add a check to avoid crashing when the GraphicsContext is not
        associated with a GdkDrawable. This was noticed when adding printing
        support but might be triggered in other situations too.

        Do not render themes when painting is disabled. This is an
        optimisation for cases where GraphicsContext is used to calculate page
        dimensions etc. without actually rendering.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::gdkDrawable):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::paintMozWidget):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@27905 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebCore/ChangeLog
WebCore/platform/graphics/cairo/GraphicsContextCairo.cpp
WebCore/platform/gtk/RenderThemeGtk.cpp

index 0cf81e955311eae9171aa495b62f2e1f3762ab46..678fe2d8ad1f6a0dedfe69005119b3378f297cd7 100644 (file)
@@ -1,3 +1,22 @@
+2007-11-19  Alp Toker  <alp@atoker.com>
+
+        Reviewed by Mark Rowe.
+
+        GTK+ drawing fixes.
+
+        Add a check to avoid crashing when the GraphicsContext is not
+        associated with a GdkDrawable. This was noticed when adding printing
+        support but might be triggered in other situations too.
+
+        Do not render themes when painting is disabled. This is an
+        optimisation for cases where GraphicsContext is used to calculate page
+        dimensions etc. without actually rendering.
+
+        * platform/graphics/cairo/GraphicsContextCairo.cpp:
+        (WebCore::GraphicsContext::gdkDrawable):
+        * platform/gtk/RenderThemeGtk.cpp:
+        (WebCore::paintMozWidget):
+
 2007-11-13  Rahul Abrol  <ra5ul@comcast.net>
 
         Reviewed by Tim Hatcher.
index 62eca40d4b1b6e6660828d59d660fbe83d1d073e..be37d506afddc51a5713fb600c25d7381f87aa32 100644 (file)
@@ -867,6 +867,9 @@ GdkEventExpose* GraphicsContext::gdkExposeEvent() const
 
 GdkDrawable* GraphicsContext::gdkDrawable() const
 {
+    if (!m_data->expose)
+        return 0;
+
     return GDK_DRAWABLE(m_data->expose->window);
 }
 
index 409b367774027bf5f54543ed817606276db12d14..1494d1f991897d825b8344de39f34e6e800419b0 100644 (file)
@@ -110,6 +110,14 @@ static void setMozState(RenderTheme* theme, GtkWidgetState* state, RenderObject*
 
 static bool paintMozWidget(RenderTheme* theme, GtkThemeWidgetType type, RenderObject* o, const RenderObject::PaintInfo& i, const IntRect& rect)
 {
+    // No GdkWindow to render to, so return true to fall back
+    if (!i.context->gdkDrawable())
+        return true;
+
+    // Painting is disabled so just claim to have succeeded
+    if (i.context->paintingDisabled())
+        return false;
+
     GtkWidgetState mozState;
     setMozState(theme, &mozState, o);