Index: chrome/browser/renderer_host/render_widget_host_view_gtk.cc |
diff --git a/chrome/browser/renderer_host/render_widget_host_view_gtk.cc b/chrome/browser/renderer_host/render_widget_host_view_gtk.cc |
index 7fce046571bbb7f4eff565fb57ce9cd425c68144..5ef533dea8fd6912004f05859bb5833fc9e791e3 100644 |
--- a/chrome/browser/renderer_host/render_widget_host_view_gtk.cc |
+++ b/chrome/browser/renderer_host/render_widget_host_view_gtk.cc |
@@ -38,6 +38,7 @@ |
#include "ui/base/l10n/l10n_util.h" |
#include "ui/base/x/x11_util.h" |
#include "ui/gfx/gtk_preserve_window.h" |
+#include "ui/gfx/gtk_native_view_id_manager.h" |
#include "webkit/glue/webaccessibility.h" |
#include "webkit/glue/webcursor_gtk_data.h" |
#include "webkit/plugins/npapi/webplugin.h" |
@@ -495,7 +496,8 @@ RenderWidgetHostViewGtk::RenderWidgetHostViewGtk(RenderWidgetHost* widget_host) |
do_x_grab_(false), |
is_fullscreen_(false), |
dragged_at_horizontal_edge_(0), |
- dragged_at_vertical_edge_(0) { |
+ dragged_at_vertical_edge_(0), |
+ accelerated_surface_acquired_(false) { |
host_->set_view(this); |
} |
@@ -732,6 +734,13 @@ void RenderWidgetHostViewGtk::RenderViewGone(base::TerminationStatus status, |
} |
void RenderWidgetHostViewGtk::Destroy() { |
+ if (accelerated_surface_acquired_) { |
+ GtkNativeViewManager* manager = GtkNativeViewManager::GetInstance(); |
+ gfx::NativeViewId view_id = gfx::IdFromNativeView(GetNativeView()); |
+ gfx::PluginWindowHandle surface = manager->GetXIDForId(&surface, view_id); |
+ manager->ReleasePermanentXID(surface); |
+ } |
+ |
if (do_x_grab_) { |
// Undo the X grab. |
GdkDisplay* display = gtk_widget_get_display(parent_); |
@@ -1071,6 +1080,26 @@ void RenderWidgetHostViewGtk::AcceleratedCompositingActivated(bool activated) { |
gtk_preserve_window_delegate_resize(widget, activated); |
} |
+gfx::PluginWindowHandle RenderWidgetHostViewGtk::AcquireCompositingSurface() { |
+ GtkNativeViewManager* manager = GtkNativeViewManager::GetInstance(); |
+ gfx::PluginWindowHandle surface = gfx::kNullPluginWindow; |
+ gfx::NativeViewId view_id = gfx::IdFromNativeView(GetNativeView()); |
+ |
+ if (!manager->GetPermanentXIDForId(&surface, view_id)) { |
+ DLOG(ERROR) << "Can't find XID for view id " << view_id; |
+ } else { |
+ accelerated_surface_acquired_ = true; |
+ } |
+ return surface; |
+} |
+ |
+void RenderWidgetHostViewGtk::ReleaseCompositingSurface( |
+ gfx::PluginWindowHandle surface) { |
+ GtkNativeViewManager* manager = GtkNativeViewManager::GetInstance(); |
+ manager->ReleasePermanentXID(surface); |
+ accelerated_surface_acquired_ = false; |
+} |
+ |
void RenderWidgetHostViewGtk::ForwardKeyboardEvent( |
const NativeWebKeyboardEvent& event) { |
if (!host_) |