Chromium Code Reviews

Side by Side Diff: ui/platform_window/x11/x11_window.cc

Issue 862093002: Split the event library into a cross-platform and native part. Part 1. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Rebase to ToT Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff |
« no previous file with comments | « ui/events/x/events_x_unittest.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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...)
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...)
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...)
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
OLDNEW
« no previous file with comments | « ui/events/x/events_x_unittest.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine