| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/message_pump_x.h" | 5 #include "base/message_pump_x.h" |
| 6 | 6 |
| 7 #include <X11/extensions/XInput2.h> | 7 #include <X11/extensions/XInput2.h> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/message_loop.h" | 10 #include "base/message_loop.h" |
| (...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 186 | 186 |
| 187 bool MessagePumpX::ProcessXEvent(XEvent* xev) { | 187 bool MessagePumpX::ProcessXEvent(XEvent* xev) { |
| 188 bool should_quit = false; | 188 bool should_quit = false; |
| 189 | 189 |
| 190 bool have_cookie = false; | 190 bool have_cookie = false; |
| 191 if (xev->type == GenericEvent && | 191 if (xev->type == GenericEvent && |
| 192 XGetEventData(xev->xgeneric.display, &xev->xcookie)) { | 192 XGetEventData(xev->xgeneric.display, &xev->xcookie)) { |
| 193 have_cookie = true; | 193 have_cookie = true; |
| 194 } | 194 } |
| 195 | 195 |
| 196 if (WillProcessXEvent(xev) == MessagePumpObserver::EVENT_CONTINUE) { | 196 if (WillProcessXEvent(xev) == EVENT_CONTINUE) { |
| 197 MessagePumpDispatcher::DispatchStatus status = | 197 MessagePumpDispatcher::DispatchStatus status = |
| 198 GetDispatcher()->Dispatch(xev); | 198 GetDispatcher()->Dispatch(xev); |
| 199 | 199 |
| 200 if (status == MessagePumpDispatcher::EVENT_QUIT) { | 200 if (status == MessagePumpDispatcher::EVENT_QUIT) { |
| 201 should_quit = true; | 201 should_quit = true; |
| 202 Quit(); | 202 Quit(); |
| 203 } else if (status == MessagePumpDispatcher::EVENT_IGNORED) { | 203 } else if (status == MessagePumpDispatcher::EVENT_IGNORED) { |
| 204 VLOG(1) << "Event (" << xev->type << ") not handled."; | 204 VLOG(1) << "Event (" << xev->type << ") not handled."; |
| 205 } | 205 } |
| 206 DidProcessXEvent(xev); |
| 206 } | 207 } |
| 207 | 208 |
| 208 if (have_cookie) { | 209 if (have_cookie) { |
| 209 XFreeEventData(xev->xgeneric.display, &xev->xcookie); | 210 XFreeEventData(xev->xgeneric.display, &xev->xcookie); |
| 210 } | 211 } |
| 211 | 212 |
| 212 return should_quit; | 213 return should_quit; |
| 213 } | 214 } |
| 214 | 215 |
| 215 bool MessagePumpX::RunOnce(GMainContext* context, bool block) { | 216 bool MessagePumpX::RunOnce(GMainContext* context, bool block) { |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 retvalue = g_main_context_iteration(context, block); | 258 retvalue = g_main_context_iteration(context, block); |
| 258 #endif | 259 #endif |
| 259 | 260 |
| 260 return retvalue; | 261 return retvalue; |
| 261 } | 262 } |
| 262 | 263 |
| 263 bool MessagePumpX::WillProcessXEvent(XEvent* xevent) { | 264 bool MessagePumpX::WillProcessXEvent(XEvent* xevent) { |
| 264 ObserverListBase<MessagePumpObserver>::Iterator it(observers()); | 265 ObserverListBase<MessagePumpObserver>::Iterator it(observers()); |
| 265 MessagePumpObserver* obs; | 266 MessagePumpObserver* obs; |
| 266 while ((obs = it.GetNext()) != NULL) { | 267 while ((obs = it.GetNext()) != NULL) { |
| 267 if (obs->WillProcessXEvent(xevent)) | 268 if (obs->WillProcessEvent(xevent)) |
| 268 return true; | 269 return true; |
| 269 } | 270 } |
| 270 return false; | 271 return false; |
| 271 } | 272 } |
| 272 | 273 |
| 274 void MessagePumpX::DidProcessXEvent(XEvent* xevent) { |
| 275 ObserverListBase<MessagePumpObserver>::Iterator it(observers()); |
| 276 MessagePumpObserver* obs; |
| 277 while ((obs = it.GetNext()) != NULL) { |
| 278 obs->DidProcessEvent(xevent); |
| 279 } |
| 280 } |
| 281 |
| 273 #if defined(TOOLKIT_USES_GTK) | 282 #if defined(TOOLKIT_USES_GTK) |
| 274 GdkFilterReturn MessagePumpX::GdkEventFilter(GdkXEvent* gxevent, | 283 GdkFilterReturn MessagePumpX::GdkEventFilter(GdkXEvent* gxevent, |
| 275 GdkEvent* gevent, | 284 GdkEvent* gevent, |
| 276 gpointer data) { | 285 gpointer data) { |
| 277 MessagePumpX* pump = static_cast<MessagePumpX*>(data); | 286 MessagePumpX* pump = static_cast<MessagePumpX*>(data); |
| 278 XEvent* xev = static_cast<XEvent*>(gxevent); | 287 XEvent* xev = static_cast<XEvent*>(gxevent); |
| 279 | 288 |
| 280 if (pump->ShouldCaptureXEvent(xev) && pump->GetDispatcher()) { | 289 if (pump->ShouldCaptureXEvent(xev) && pump->GetDispatcher()) { |
| 281 pump->ProcessXEvent(xev); | 290 pump->ProcessXEvent(xev); |
| 282 return GDK_FILTER_REMOVE; | 291 return GDK_FILTER_REMOVE; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 321 capture_x_events_[MotionNotify] = true; | 330 capture_x_events_[MotionNotify] = true; |
| 322 capture_gdk_events_[GDK_MOTION_NOTIFY] = true; | 331 capture_gdk_events_[GDK_MOTION_NOTIFY] = true; |
| 323 | 332 |
| 324 capture_x_events_[GenericEvent] = true; | 333 capture_x_events_[GenericEvent] = true; |
| 325 } | 334 } |
| 326 | 335 |
| 327 COMPILE_ASSERT(XLASTEvent >= LASTEvent, XLASTEvent_too_small); | 336 COMPILE_ASSERT(XLASTEvent >= LASTEvent, XLASTEvent_too_small); |
| 328 | 337 |
| 329 #endif // defined(TOOLKIT_USES_GTK) | 338 #endif // defined(TOOLKIT_USES_GTK) |
| 330 | 339 |
| 331 MessagePumpObserver::EventStatus | |
| 332 MessagePumpObserver::WillProcessXEvent(XEvent* xev) { | |
| 333 return EVENT_CONTINUE; | |
| 334 } | |
| 335 | |
| 336 } // namespace base | 340 } // namespace base |
| OLD | NEW |