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

Side by Side Diff: ui/events/ozone/evdev/key_event_converter_evdev.cc

Issue 561243002: ozone: evdev: Move read polling into EventConverterEvdev (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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
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/events/ozone/evdev/key_event_converter_evdev.h" 5 #include "ui/events/ozone/evdev/key_event_converter_evdev.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 #include <linux/input.h> 8 #include <linux/input.h>
9 9
10 #include "base/message_loop/message_loop.h" 10 #include "base/message_loop/message_loop.h"
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
187 187
188 bool IsLockButton(unsigned int code) { return code == KEY_CAPSLOCK; } 188 bool IsLockButton(unsigned int code) { return code == KEY_CAPSLOCK; }
189 189
190 } // namespace 190 } // namespace
191 191
192 KeyEventConverterEvdev::KeyEventConverterEvdev( 192 KeyEventConverterEvdev::KeyEventConverterEvdev(
193 int fd, 193 int fd,
194 base::FilePath path, 194 base::FilePath path,
195 EventModifiersEvdev* modifiers, 195 EventModifiersEvdev* modifiers,
196 const EventDispatchCallback& callback) 196 const EventDispatchCallback& callback)
197 : EventConverterEvdev(callback), 197 : EventConverterEvdev(fd, path),
198 fd_(fd), 198 callback_(callback),
199 path_(path),
200 modifiers_(modifiers) { 199 modifiers_(modifiers) {
201 // TODO(spang): Initialize modifiers using EVIOCGKEY. 200 // TODO(spang): Initialize modifiers using EVIOCGKEY.
202 } 201 }
203 202
204 KeyEventConverterEvdev::~KeyEventConverterEvdev() { 203 KeyEventConverterEvdev::~KeyEventConverterEvdev() {
205 Stop(); 204 Stop();
206 close(fd_); 205 close(fd_);
207 } 206 }
208 207
209 void KeyEventConverterEvdev::Start() {
210 base::MessageLoopForUI::current()->WatchFileDescriptor(
211 fd_, true, base::MessagePumpLibevent::WATCH_READ, &controller_, this);
212 }
213
214 void KeyEventConverterEvdev::Stop() {
215 controller_.StopWatchingFileDescriptor();
216 }
217
218 void KeyEventConverterEvdev::OnFileCanReadWithoutBlocking(int fd) { 208 void KeyEventConverterEvdev::OnFileCanReadWithoutBlocking(int fd) {
219 input_event inputs[4]; 209 input_event inputs[4];
220 ssize_t read_size = read(fd, inputs, sizeof(inputs)); 210 ssize_t read_size = read(fd, inputs, sizeof(inputs));
221 if (read_size < 0) { 211 if (read_size < 0) {
222 if (errno == EINTR || errno == EAGAIN) 212 if (errno == EINTR || errno == EAGAIN)
223 return; 213 return;
224 if (errno != ENODEV) 214 if (errno != ENODEV)
225 PLOG(ERROR) << "error reading device " << path_.value(); 215 PLOG(ERROR) << "error reading device " << path_.value();
226 Stop(); 216 Stop();
227 return; 217 return;
228 } 218 }
229 219
230 CHECK_EQ(read_size % sizeof(*inputs), 0u); 220 CHECK_EQ(read_size % sizeof(*inputs), 0u);
231 ProcessEvents(inputs, read_size / sizeof(*inputs)); 221 ProcessEvents(inputs, read_size / sizeof(*inputs));
232 } 222 }
233 223
234 void KeyEventConverterEvdev::OnFileCanWriteWithoutBlocking(int fd) {
235 NOTREACHED();
236 }
237
238 void KeyEventConverterEvdev::ProcessEvents(const input_event* inputs, 224 void KeyEventConverterEvdev::ProcessEvents(const input_event* inputs,
239 int count) { 225 int count) {
240 for (int i = 0; i < count; ++i) { 226 for (int i = 0; i < count; ++i) {
241 const input_event& input = inputs[i]; 227 const input_event& input = inputs[i];
242 if (input.type == EV_KEY) { 228 if (input.type == EV_KEY) {
243 ConvertKeyEvent(input.code, input.value); 229 ConvertKeyEvent(input.code, input.value);
244 } else if (input.type == EV_SYN) { 230 } else if (input.type == EV_SYN) {
245 // TODO(sadrul): Handle this case appropriately. 231 // TODO(sadrul): Handle this case appropriately.
246 } 232 }
247 } 233 }
(...skipping 15 matching lines...) Expand all
263 } 249 }
264 } 250 }
265 251
266 int flags = modifiers_->GetModifierFlags(); 252 int flags = modifiers_->GetModifierFlags();
267 253
268 KeyEvent key_event( 254 KeyEvent key_event(
269 down ? ET_KEY_PRESSED : ET_KEY_RELEASED, 255 down ? ET_KEY_PRESSED : ET_KEY_RELEASED,
270 code, 256 code,
271 KeycodeConverter::NativeKeycodeToCode(key + kXkbKeycodeOffset), 257 KeycodeConverter::NativeKeycodeToCode(key + kXkbKeycodeOffset),
272 flags); 258 flags);
273 DispatchEventToCallback(&key_event); 259 callback_.Run(&key_event);
274 } 260 }
275 261
276 } // namespace ui 262 } // namespace ui
OLDNEW
« no previous file with comments | « ui/events/ozone/evdev/key_event_converter_evdev.h ('k') | ui/events/ozone/evdev/key_event_converter_evdev_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698