| Index: ui/gl/gl_surface_glx.cc
|
| diff --git a/ui/gl/gl_surface_glx.cc b/ui/gl/gl_surface_glx.cc
|
| index 7e6dfaab6bd9513fd10d4cddbce6c655d8d08d55..5acfc7c9d214560663cc7ad1649ececbe9eb3e3d 100644
|
| --- a/ui/gl/gl_surface_glx.cc
|
| +++ b/ui/gl/gl_surface_glx.cc
|
| @@ -21,6 +21,7 @@ extern "C" {
|
| #include "base/threading/thread.h"
|
| #include "base/time/time.h"
|
| #include "third_party/mesa/src/include/GL/osmesa.h"
|
| +#include "ui/events/platform/platform_event_source.h"
|
| #include "ui/gfx/x/x11_connection.h"
|
| #include "ui/gfx/x/x11_types.h"
|
| #include "ui/gl/gl_bindings.h"
|
| @@ -425,6 +426,15 @@ bool NativeViewGLSurfaceGLX::Initialize() {
|
| NULL);
|
| XMapWindow(g_display, window_);
|
|
|
| + ui::PlatformEventSource* event_source =
|
| + ui::PlatformEventSource::GetInstance();
|
| + // Can be NULL in tests, when we don't care about Exposes.
|
| + if (event_source) {
|
| + XSelectInput(g_display, window_, ExposureMask);
|
| + ui::PlatformEventSource::GetInstance()->AddPlatformEventDispatcher(this);
|
| + }
|
| + XFlush(g_display);
|
| +
|
| gfx::AcceleratedWidget window_for_vsync = window_;
|
|
|
| if (g_glx_oml_sync_control_supported)
|
| @@ -437,11 +447,28 @@ bool NativeViewGLSurfaceGLX::Initialize() {
|
|
|
| void NativeViewGLSurfaceGLX::Destroy() {
|
| if (window_) {
|
| + ui::PlatformEventSource* event_source =
|
| + ui::PlatformEventSource::GetInstance();
|
| + if (event_source)
|
| + event_source->RemovePlatformEventDispatcher(this);
|
| XDestroyWindow(g_display, window_);
|
| XFlush(g_display);
|
| }
|
| }
|
|
|
| +bool NativeViewGLSurfaceGLX::CanDispatchEvent(const ui::PlatformEvent& event) {
|
| + return event->type == Expose && event->xexpose.window == window_;
|
| +}
|
| +
|
| +uint32_t NativeViewGLSurfaceGLX::DispatchEvent(const ui::PlatformEvent& event) {
|
| + XEvent forwarded_event = *event;
|
| + forwarded_event.xexpose.window = parent_window_;
|
| + XSendEvent(g_display, parent_window_, False, ExposureMask,
|
| + &forwarded_event);
|
| + XFlush(g_display);
|
| + return ui::POST_DISPATCH_STOP_PROPAGATION;
|
| +}
|
| +
|
| bool NativeViewGLSurfaceGLX::Resize(const gfx::Size& size) {
|
| size_ = size;
|
| glXWaitGL();
|
| @@ -547,12 +574,6 @@ VSyncProvider* NativeViewGLSurfaceGLX::GetVSyncProvider() {
|
| return vsync_provider_.get();
|
| }
|
|
|
| -NativeViewGLSurfaceGLX::NativeViewGLSurfaceGLX()
|
| - : parent_window_(0),
|
| - window_(0),
|
| - config_(NULL) {
|
| -}
|
| -
|
| NativeViewGLSurfaceGLX::~NativeViewGLSurfaceGLX() {
|
| Destroy();
|
| }
|
|
|