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...) 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...) 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...) 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 |