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

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

Issue 1602173005: Add PlatformWindow/Event related code for Ozone X11. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: XEventDispatcher added. Created 4 years, 11 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "ui/platform_window/x11/x11_window.h"
6
7 #include <X11/Xlib.h>
8
9 #include "base/macros.h"
10 #include "ui/events/devices/x11/touch_factory_x11.h"
11 #include "ui/events/event.h"
12 #include "ui/events/event_utils.h"
13 #include "ui/events/x/events_x_utils.h"
14
15 namespace ui {
16
17 void X11Window::SetCursor(PlatformCursor cursor) {
18 XDefineCursor(xdisplay_, xwindow_, cursor);
19 }
20
21 void X11Window::ProcessXInput2Event(XEvent* xev) {
22 if (!TouchFactory::GetInstance()->ShouldProcessXI2Event(xev))
23 return;
24 EventType event_type = EventTypeFromNative(xev);
25 switch (event_type) {
26 case ET_KEY_PRESSED:
27 case ET_KEY_RELEASED: {
28 KeyEvent key_event(xev);
29 delegate_->DispatchEvent(&key_event);
30 break;
31 }
32 case ET_MOUSE_PRESSED:
33 case ET_MOUSE_MOVED:
34 case ET_MOUSE_DRAGGED:
35 case ET_MOUSE_RELEASED: {
36 MouseEvent mouse_event(xev);
37 delegate_->DispatchEvent(&mouse_event);
38 break;
39 }
40 case ET_MOUSEWHEEL: {
41 MouseWheelEvent wheel_event(xev);
42 delegate_->DispatchEvent(&wheel_event);
43 break;
44 }
45 case ET_SCROLL_FLING_START:
46 case ET_SCROLL_FLING_CANCEL:
47 case ET_SCROLL: {
48 ScrollEvent scroll_event(xev);
49 delegate_->DispatchEvent(&scroll_event);
50 break;
51 }
52 case ET_TOUCH_MOVED:
53 case ET_TOUCH_PRESSED:
54 case ET_TOUCH_CANCELLED:
55 case ET_TOUCH_RELEASED: {
56 TouchEvent touch_event(xev);
57 delegate_->DispatchEvent(&touch_event);
58 break;
59 }
60 default:
61 break;
62 }
63 }
64
65 bool X11Window::CanDispatchEvent(const PlatformEvent& event) {
66 const XEvent* xevent = static_cast<const XEvent*>(event);
67 return XWindowFromXEvent(*xevent) == xwindow_;
68 }
69
70 uint32_t X11Window::DispatchEvent(const PlatformEvent& event) {
71 XEvent* xev = static_cast<XEvent*>(event);
72 switch (xev->type) {
73 case Expose:
74 case FocusOut:
75 case ConfigureNotify:
76 case ClientMessage: {
77 // Shared event handling implementation with ozone.
78 ProcessXWindowEvent(*xev);
79 break;
80 }
81
82 case EnterNotify: {
83 // EnterNotify creates ET_MOUSE_MOVED. Mark as synthesized as this is
84 // not real mouse move event.
85 MouseEvent mouse_event(xev);
86 CHECK_EQ(ET_MOUSE_MOVED, mouse_event.type());
87 mouse_event.set_flags(mouse_event.flags() | EF_IS_SYNTHESIZED);
88 delegate_->DispatchEvent(&mouse_event);
89 break;
90 }
91 case LeaveNotify: {
92 MouseEvent mouse_event(xev);
93 delegate_->DispatchEvent(&mouse_event);
94 break;
95 }
96
97 {
98 gfx::Rect damage_rect(xev->xexpose.x, xev->xexpose.y,
99 xev->xexpose.width, xev->xexpose.height);
100 delegate_->OnDamageRect(damage_rect);
101 break;
102 }
103
104 case KeyPress:
105 case KeyRelease: {
106 KeyEvent key_event(xev);
107 delegate_->DispatchEvent(&key_event);
108 break;
109 }
110
111 case ButtonPress:
112 case ButtonRelease: {
113 switch (EventTypeFromNative(xev)) {
114 case ET_MOUSEWHEEL: {
115 MouseWheelEvent mouseev(xev);
116 delegate_->DispatchEvent(&mouseev);
117 break;
118 }
119 case ET_MOUSE_PRESSED:
120 case ET_MOUSE_RELEASED: {
121 MouseEvent mouseev(xev);
122 delegate_->DispatchEvent(&mouseev);
123 break;
124 }
125 case ET_UNKNOWN:
126 // No event is created for X11-release events for mouse-wheel
127 // buttons.
128 break;
129 default:
130 NOTREACHED();
131 }
132 break;
133 }
134
135 case GenericEvent: {
136 ProcessXInput2Event(xev);
137 break;
138 }
139 }
140 return POST_DISPATCH_STOP_PROPAGATION;
141 }
142
143 bool X11Window::DispatchXEvent(const XEvent& xev) {
144 NOTREACHED();
145 return false;
146 }
147
148 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698