summaryrefslogtreecommitdiff
path: root/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2012-10-17 16:21:14 +0200
committerSimon Hausmann <simon.hausmann@digia.com>2012-10-17 16:21:14 +0200
commit8995b83bcbfbb68245f779b64e5517627c6cc6ea (patch)
tree17985605dab9263cc2444bd4d45f189e142cca7c /Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp
parentb9c9652036d5e9f1e29c574f40bc73a35c81ace6 (diff)
downloadqtwebkit-8995b83bcbfbb68245f779b64e5517627c6cc6ea.tar.gz
Imported WebKit commit cf4f8fc6f19b0629f51860cb2d4b25e139d07e00 (http://svn.webkit.org/repository/webkit/trunk@131592)
New snapshot that includes the build fixes for Mac OS X 10.6 and earlier as well as the previously cherry-picked changes
Diffstat (limited to 'Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp')
-rw-r--r--Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp50
1 files changed, 13 insertions, 37 deletions
diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp
index b42b2ee8f..e5bac671e 100644
--- a/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp
+++ b/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp
@@ -75,6 +75,10 @@ using namespace WebCore;
typedef HashMap<GtkWidget*, IntRect> WebKitWebViewChildrenMap;
+#if USE(TEXTURE_MAPPER_GL)
+void redirectedWindowDamagedCallback(void* data);
+#endif
+
struct _WebKitWebViewBasePrivate {
WebKitWebViewChildrenMap children;
OwnPtr<PageClientImpl> pageClient;
@@ -111,7 +115,6 @@ struct _WebKitWebViewBasePrivate {
#if USE(TEXTURE_MAPPER_GL)
OwnPtr<RedirectedXCompositeWindow> redirectedWindow;
- bool readyToRenderAcceleratedCompositingResults;
#endif
};
@@ -300,7 +303,7 @@ static void webkitWebViewBaseContainerForall(GtkContainer* container, gboolean i
WebKitWebViewChildrenMap children = priv->children;
WebKitWebViewChildrenMap::const_iterator end = children.end();
for (WebKitWebViewChildrenMap::const_iterator current = children.begin(); current != end; ++current)
- (*callback)(current->first, callbackData);
+ (*callback)(current->key, callbackData);
if (includeInternals && priv->inspectorView)
(*callback)(priv->inspectorView, callbackData);
@@ -351,7 +354,8 @@ static void webkit_web_view_base_init(WebKitWebViewBase* webkitWebViewBase)
#if USE(TEXTURE_MAPPER_GL)
priv->redirectedWindow = RedirectedXCompositeWindow::create(IntSize(1, 1));
- priv->readyToRenderAcceleratedCompositingResults = false;
+ if (priv->redirectedWindow)
+ priv->redirectedWindow->setDamageNotifyCallback(redirectedWindowDamagedCallback, webkitWebViewBase);
#endif
}
@@ -364,10 +368,9 @@ static bool webkitWebViewRenderAcceleratedCompositingResults(WebKitWebViewBase*
// To avoid flashes when initializing accelerated compositing for the first
// time, we wait until we know there's a frame ready before rendering.
WebKitWebViewBasePrivate* priv = webViewBase->priv;
- if (!priv->readyToRenderAcceleratedCompositingResults)
+ if (!priv->redirectedWindow)
return false;
- ASSERT(priv->redirectedWindow);
cairo_rectangle(cr, clipRect->x, clipRect->y, clipRect->width, clipRect->height);
cairo_surface_t* surface = priv->redirectedWindow->cairoSurfaceForWidget(GTK_WIDGET(webViewBase));
cairo_set_source_surface(cr, surface, 0, 0);
@@ -430,7 +433,7 @@ static void resizeWebKitWebViewBaseFromAllocation(WebKitWebViewBase* webViewBase
}
#if USE(TEXTURE_MAPPER_GL)
- if (sizeChanged)
+ if (sizeChanged && webViewBase->priv->redirectedWindow)
webViewBase->priv->redirectedWindow->resize(viewRect.size());
#endif
@@ -801,7 +804,8 @@ void webkitWebViewBaseCreateWebPage(WebKitWebViewBase* webkitWebViewBase, WebCon
#endif
#if USE(TEXTURE_MAPPER_GL)
- priv->pageProxy->setAcceleratedCompositingWindowId(priv->redirectedWindow->windowId());
+ if (priv->redirectedWindow)
+ priv->pageProxy->setAcceleratedCompositingWindowId(priv->redirectedWindow->windowId());
#endif
}
@@ -928,37 +932,9 @@ GdkEvent* webkitWebViewBaseTakeContextMenuEvent(WebKitWebViewBase* webkitWebView
}
#if USE(TEXTURE_MAPPER_GL)
-static gboolean queueAnotherDrawOfAcceleratedCompositingResults(gpointer* webViewBasePointer)
+void redirectedWindowDamagedCallback(void* data)
{
- // The WebViewBase may have been destroyed in the time since we queued this
- // draw and the time we are actually executing.
- if (!*webViewBasePointer) {
- fastFree(webViewBasePointer);
- return FALSE;
- }
-
- WebKitWebViewBase* webViewBase = WEBKIT_WEB_VIEW_BASE(*webViewBasePointer);
- gtk_widget_queue_draw(GTK_WIDGET(webViewBase));
- webViewBase->priv->readyToRenderAcceleratedCompositingResults = true;
-
- g_object_remove_weak_pointer(G_OBJECT(webViewBase), webViewBasePointer);
- fastFree(webViewBasePointer);
-
- return FALSE;
-}
-
-void webkitWebViewBaseQueueDrawOfAcceleratedCompositingResults(WebKitWebViewBase* webViewBase)
-{
- gtk_widget_queue_draw(GTK_WIDGET(webViewBase));
-
- // Redraw again, one frame later, as it might take some time for the new GL frame to be available.
- // This prevents the display from always being one frame behind in the case GL hasn't yet finished
- // rendering to the window.
- // TODO: Add XDamage support to RedirectedXCompositeWindow to accomplish this.
- gpointer* webViewBasePointer = static_cast<gpointer*>(fastMalloc(sizeof(gpointer)));
- g_object_add_weak_pointer(G_OBJECT(webViewBase), webViewBasePointer);
- *webViewBasePointer = webViewBase;
- g_timeout_add(1000 / 60, reinterpret_cast<GSourceFunc>(queueAnotherDrawOfAcceleratedCompositingResults), webViewBasePointer);
+ gtk_widget_queue_draw(GTK_WIDGET(data));
}
#endif