Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(495)

Unified Diff: ui/gl/gl_surface_glx.cc

Issue 299143002: glx: forward Expose event from child window to parent (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix nested #ifdefs Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/gl/gl_surface_glx.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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();
}
« no previous file with comments | « ui/gl/gl_surface_glx.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698