| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "ui/platform_window/x11/x11_window.h" | 5 #include "ui/platform_window/x11/x11_window.h" |
| 6 | 6 |
| 7 #include <X11/extensions/XInput2.h> | 7 #include <X11/extensions/XInput2.h> |
| 8 #include <X11/Xatom.h> | 8 #include <X11/Xatom.h> |
| 9 #include <X11/Xlib.h> | 9 #include <X11/Xlib.h> |
| 10 #include <X11/Xutil.h> | 10 #include <X11/Xutil.h> |
| 11 | 11 |
| 12 #include "ui/events/event.h" | 12 #include "ui/events/event.h" |
| 13 #include "ui/events/event_utils.h" | 13 #include "ui/events/event_utils.h" |
| 14 #include "ui/events/platform/platform_event_builder.h" |
| 14 #include "ui/events/platform/platform_event_dispatcher.h" | 15 #include "ui/events/platform/platform_event_dispatcher.h" |
| 15 #include "ui/events/platform/platform_event_source.h" | 16 #include "ui/events/platform/platform_event_source.h" |
| 16 #include "ui/events/platform/x11/x11_event_source.h" | 17 #include "ui/events/platform/x11/x11_event_source.h" |
| 17 #include "ui/events/x/touch_factory_x11.h" | 18 #include "ui/events/x/touch_factory_x11.h" |
| 18 #include "ui/gfx/geometry/rect.h" | 19 #include "ui/gfx/geometry/rect.h" |
| 19 #include "ui/gfx/x/x11_atom_cache.h" | 20 #include "ui/gfx/x/x11_atom_cache.h" |
| 20 #include "ui/gfx/x/x11_types.h" | 21 #include "ui/gfx/x/x11_types.h" |
| 21 #include "ui/platform_window/platform_window_delegate.h" | 22 #include "ui/platform_window/platform_window_delegate.h" |
| 22 | 23 |
| 23 namespace ui { | 24 namespace ui { |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 66 xwindow_ = None; | 67 xwindow_ = None; |
| 67 } | 68 } |
| 68 | 69 |
| 69 void X11Window::ProcessXInput2Event(XEvent* xev) { | 70 void X11Window::ProcessXInput2Event(XEvent* xev) { |
| 70 if (!TouchFactory::GetInstance()->ShouldProcessXI2Event(xev)) | 71 if (!TouchFactory::GetInstance()->ShouldProcessXI2Event(xev)) |
| 71 return; | 72 return; |
| 72 EventType event_type = EventTypeFromNative(xev); | 73 EventType event_type = EventTypeFromNative(xev); |
| 73 switch (event_type) { | 74 switch (event_type) { |
| 74 case ET_KEY_PRESSED: | 75 case ET_KEY_PRESSED: |
| 75 case ET_KEY_RELEASED: { | 76 case ET_KEY_RELEASED: { |
| 76 KeyEvent key_event(xev); | 77 KeyEvent key_event = PlatformEventBuilder::BuildKeyEvent(xev); |
| 77 delegate_->DispatchEvent(&key_event); | 78 delegate_->DispatchEvent(&key_event); |
| 78 break; | 79 break; |
| 79 } | 80 } |
| 80 case ET_MOUSE_PRESSED: | 81 case ET_MOUSE_PRESSED: |
| 81 case ET_MOUSE_MOVED: | 82 case ET_MOUSE_MOVED: |
| 82 case ET_MOUSE_DRAGGED: | 83 case ET_MOUSE_DRAGGED: |
| 83 case ET_MOUSE_RELEASED: { | 84 case ET_MOUSE_RELEASED: { |
| 84 MouseEvent mouse_event(xev); | 85 MouseEvent mouse_event = PlatformEventBuilder::BuildMouseEvent(xev); |
| 85 delegate_->DispatchEvent(&mouse_event); | 86 delegate_->DispatchEvent(&mouse_event); |
| 86 break; | 87 break; |
| 87 } | 88 } |
| 88 case ET_MOUSEWHEEL: { | 89 case ET_MOUSEWHEEL: { |
| 89 MouseWheelEvent wheel_event(xev); | 90 MouseWheelEvent wheel_event = |
| 91 PlatformEventBuilder::BuildMouseWheelEvent(xev); |
| 90 delegate_->DispatchEvent(&wheel_event); | 92 delegate_->DispatchEvent(&wheel_event); |
| 91 break; | 93 break; |
| 92 } | 94 } |
| 93 case ET_SCROLL_FLING_START: | 95 case ET_SCROLL_FLING_START: |
| 94 case ET_SCROLL_FLING_CANCEL: | 96 case ET_SCROLL_FLING_CANCEL: |
| 95 case ET_SCROLL: { | 97 case ET_SCROLL: { |
| 96 ScrollEvent scroll_event(xev); | 98 ScrollEvent scroll_event = PlatformEventBuilder::BuildScrollEvent(xev); |
| 97 delegate_->DispatchEvent(&scroll_event); | 99 delegate_->DispatchEvent(&scroll_event); |
| 98 break; | 100 break; |
| 99 } | 101 } |
| 100 case ET_TOUCH_MOVED: | 102 case ET_TOUCH_MOVED: |
| 101 case ET_TOUCH_PRESSED: | 103 case ET_TOUCH_PRESSED: |
| 102 case ET_TOUCH_CANCELLED: | 104 case ET_TOUCH_CANCELLED: |
| 103 case ET_TOUCH_RELEASED: { | 105 case ET_TOUCH_RELEASED: { |
| 104 TouchEvent touch_event(xev); | 106 TouchEvent touch_event = PlatformEventBuilder::BuildTouchEvent(xev); |
| 107 |
| 108 if (touch_event.type() == ET_TOUCH_PRESSED) |
| 109 IncrementTouchIdRefCount(xev); |
| 110 |
| 105 delegate_->DispatchEvent(&touch_event); | 111 delegate_->DispatchEvent(&touch_event); |
| 112 |
| 113 ClearTouchIdIfReleased(xev); |
| 106 break; | 114 break; |
| 107 } | 115 } |
| 108 default: | 116 default: |
| 109 break; | 117 break; |
| 110 } | 118 } |
| 111 } | 119 } |
| 112 | 120 |
| 113 void X11Window::Show() { | 121 void X11Window::Show() { |
| 114 if (window_mapped_) | 122 if (window_mapped_) |
| 115 return; | 123 return; |
| (...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 253 bool X11Window::CanDispatchEvent(const PlatformEvent& event) { | 261 bool X11Window::CanDispatchEvent(const PlatformEvent& event) { |
| 254 return FindXEventTarget(event) == xwindow_; | 262 return FindXEventTarget(event) == xwindow_; |
| 255 } | 263 } |
| 256 | 264 |
| 257 uint32_t X11Window::DispatchEvent(const PlatformEvent& event) { | 265 uint32_t X11Window::DispatchEvent(const PlatformEvent& event) { |
| 258 XEvent* xev = event; | 266 XEvent* xev = event; |
| 259 switch (xev->type) { | 267 switch (xev->type) { |
| 260 case EnterNotify: { | 268 case EnterNotify: { |
| 261 // EnterNotify creates ET_MOUSE_MOVED. Mark as synthesized as this is | 269 // EnterNotify creates ET_MOUSE_MOVED. Mark as synthesized as this is |
| 262 // not real mouse move event. | 270 // not real mouse move event. |
| 263 MouseEvent mouse_event(xev); | 271 MouseEvent mouse_event = PlatformEventBuilder::BuildMouseEvent(xev); |
| 264 CHECK_EQ(ET_MOUSE_MOVED, mouse_event.type()); | 272 CHECK_EQ(ET_MOUSE_MOVED, mouse_event.type()); |
| 265 mouse_event.set_flags(mouse_event.flags() | EF_IS_SYNTHESIZED); | 273 mouse_event.set_flags(mouse_event.flags() | EF_IS_SYNTHESIZED); |
| 266 delegate_->DispatchEvent(&mouse_event); | 274 delegate_->DispatchEvent(&mouse_event); |
| 267 break; | 275 break; |
| 268 } | 276 } |
| 269 case LeaveNotify: { | 277 case LeaveNotify: { |
| 270 MouseEvent mouse_event(xev); | 278 MouseEvent mouse_event = PlatformEventBuilder::BuildMouseEvent(xev); |
| 271 delegate_->DispatchEvent(&mouse_event); | 279 delegate_->DispatchEvent(&mouse_event); |
| 272 break; | 280 break; |
| 273 } | 281 } |
| 274 | 282 |
| 275 case Expose: { | 283 case Expose: { |
| 276 gfx::Rect damage_rect(xev->xexpose.x, | 284 gfx::Rect damage_rect(xev->xexpose.x, |
| 277 xev->xexpose.y, | 285 xev->xexpose.y, |
| 278 xev->xexpose.width, | 286 xev->xexpose.width, |
| 279 xev->xexpose.height); | 287 xev->xexpose.height); |
| 280 delegate_->OnDamageRect(damage_rect); | 288 delegate_->OnDamageRect(damage_rect); |
| 281 break; | 289 break; |
| 282 } | 290 } |
| 283 | 291 |
| 284 case KeyPress: | 292 case KeyPress: |
| 285 case KeyRelease: { | 293 case KeyRelease: { |
| 286 KeyEvent key_event(xev); | 294 KeyEvent key_event = PlatformEventBuilder::BuildKeyEvent(xev); |
| 287 delegate_->DispatchEvent(&key_event); | 295 delegate_->DispatchEvent(&key_event); |
| 288 break; | 296 break; |
| 289 } | 297 } |
| 290 | 298 |
| 291 case ButtonPress: | 299 case ButtonPress: |
| 292 case ButtonRelease: { | 300 case ButtonRelease: { |
| 293 switch (EventTypeFromNative(xev)) { | 301 switch (EventTypeFromNative(xev)) { |
| 294 case ET_MOUSEWHEEL: { | 302 case ET_MOUSEWHEEL: { |
| 295 MouseWheelEvent mouseev(xev); | 303 MouseWheelEvent mouseev = |
| 304 PlatformEventBuilder::BuildMouseWheelEvent(xev); |
| 296 delegate_->DispatchEvent(&mouseev); | 305 delegate_->DispatchEvent(&mouseev); |
| 297 break; | 306 break; |
| 298 } | 307 } |
| 299 case ET_MOUSE_PRESSED: | 308 case ET_MOUSE_PRESSED: |
| 300 case ET_MOUSE_RELEASED: { | 309 case ET_MOUSE_RELEASED: { |
| 301 MouseEvent mouseev(xev); | 310 MouseEvent mouseev = PlatformEventBuilder::BuildMouseEvent(xev); |
| 302 delegate_->DispatchEvent(&mouseev); | 311 delegate_->DispatchEvent(&mouseev); |
| 303 break; | 312 break; |
| 304 } | 313 } |
| 305 case ET_UNKNOWN: | 314 case ET_UNKNOWN: |
| 306 // No event is created for X11-release events for mouse-wheel | 315 // No event is created for X11-release events for mouse-wheel |
| 307 // buttons. | 316 // buttons. |
| 308 break; | 317 break; |
| 309 default: | 318 default: |
| 310 NOTREACHED(); | 319 NOTREACHED(); |
| 311 } | 320 } |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 351 | 360 |
| 352 case GenericEvent: { | 361 case GenericEvent: { |
| 353 ProcessXInput2Event(xev); | 362 ProcessXInput2Event(xev); |
| 354 break; | 363 break; |
| 355 } | 364 } |
| 356 } | 365 } |
| 357 return POST_DISPATCH_STOP_PROPAGATION; | 366 return POST_DISPATCH_STOP_PROPAGATION; |
| 358 } | 367 } |
| 359 | 368 |
| 360 } // namespace ui | 369 } // namespace ui |
| OLD | NEW |