Commit ae2cd5b9 authored by Antoine Labour's avatar Antoine Labour

Revert "ozone: evdev: Handle mouse events"

This reverts commit e6e890a7.

Causes compile failures:
http://build.chromium.org/p/chromium.chromiumos/builders/Linux%20ChromiumOS%20Ozone%20Builder/builds/5856/steps/compile/logs/stdio

TBR=spang
BUG=

Review URL: https://codereview.chromium.org/682753005

Cr-Commit-Position: refs/heads/master@{#301474}
parent 1b29da2e
......@@ -329,7 +329,7 @@ test("events_unittests") {
if (use_ozone) {
sources += [
"ozone/evdev/event_converter_evdev_impl_unittest.cc",
"ozone/evdev/key_event_converter_evdev_unittest.cc",
"ozone/evdev/touch_event_converter_evdev_unittest.cc",
]
}
......
......@@ -346,7 +346,7 @@
}],
['use_ozone==1', {
'sources': [
'ozone/evdev/event_converter_evdev_impl_unittest.cc',
'ozone/evdev/key_event_converter_evdev_unittest.cc',
'ozone/evdev/touch_event_converter_evdev_unittest.cc',
],
'dependencies': [
......
......@@ -45,8 +45,6 @@ component("events_ozone_evdev") {
sources = [
"evdev/event_converter_evdev.cc",
"evdev/event_converter_evdev.h",
"evdev/event_converter_evdev_impl.cc",
"evdev/event_converter_evdev_impl.h",
"evdev/event_device_info.cc",
"evdev/event_device_info.h",
"evdev/event_factory_evdev.cc",
......@@ -54,6 +52,8 @@ component("events_ozone_evdev") {
"evdev/event_modifiers_evdev.cc",
"evdev/event_modifiers_evdev.h",
"evdev/events_ozone_evdev_export.h",
"evdev/key_event_converter_evdev.cc",
"evdev/key_event_converter_evdev.h",
"evdev/touch_event_converter_evdev.cc",
"evdev/touch_event_converter_evdev.h",
]
......
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/events/ozone/evdev/event_converter_evdev_impl.h"
#include <errno.h>
#include <linux/input.h>
#include "base/message_loop/message_loop.h"
#include "ui/events/event.h"
#include "ui/events/keycodes/dom4/keycode_converter.h"
#include "ui/events/keycodes/keyboard_codes.h"
namespace ui {
EventConverterEvdevImpl::EventConverterEvdevImpl(
int fd,
base::FilePath path,
int id,
EventModifiersEvdev* modifiers,
CursorDelegateEvdev* cursor,
KeyboardEvdev* keyboard,
const EventDispatchCallback& callback)
: EventConverterEvdev(fd, path, id),
x_offset_(0),
y_offset_(0),
cursor_(cursor),
keyboard_(keyboard),
modifiers_(modifiers),
callback_(callback) {
}
EventConverterEvdevImpl::~EventConverterEvdevImpl() {
Stop();
close(fd_);
}
void EventConverterEvdevImpl::OnFileCanReadWithoutBlocking(int fd) {
input_event inputs[4];
ssize_t read_size = read(fd, inputs, sizeof(inputs));
if (read_size < 0) {
if (errno == EINTR || errno == EAGAIN)
return;
if (errno != ENODEV)
PLOG(ERROR) << "error reading device " << path_.value();
Stop();
return;
}
DCHECK_EQ(read_size % sizeof(*inputs), 0u);
ProcessEvents(inputs, read_size / sizeof(*inputs));
}
void EventConverterEvdevImpl::ProcessEvents(const input_event* inputs,
int count) {
for (int i = 0; i < count; ++i) {
const input_event& input = inputs[i];
switch (input.type) {
case EV_KEY:
ConvertKeyEvent(input);
break;
case EV_REL:
ConvertMouseMoveEvent(input);
break;
case EV_SYN:
FlushEvents();
break;
}
}
}
void EventConverterEvdevImpl::ConvertKeyEvent(const input_event& input) {
// Mouse processing.
if (input.code >= BTN_MOUSE && input.code < BTN_JOYSTICK) {
DispatchMouseButton(input);
return;
}
// Keyboard processing.
keyboard_->OnKeyChange(input.code, input.value != 0);
}
void EventConverterEvdevImpl::ConvertMouseMoveEvent(const input_event& input) {
if (!cursor_)
return;
switch (input.code) {
case REL_X:
x_offset_ = input.value;
break;
case REL_Y:
y_offset_ = input.value;
break;
}
}
void EventConverterEvdevImpl::DispatchMouseButton(const input_event& input) {
if (!cursor_)
return;
unsigned int modifier;
if (input.code == BTN_LEFT)
modifier = EVDEV_MODIFIER_LEFT_MOUSE_BUTTON;
else if (input.code == BTN_RIGHT)
modifier = EVDEV_MODIFIER_RIGHT_MOUSE_BUTTON;
else if (input.code == BTN_MIDDLE)
modifier = EVDEV_MODIFIER_MIDDLE_MOUSE_BUTTON;
else
return;
int flag = modifiers_->GetEventFlagFromModifier(modifier);
modifiers_->UpdateModifier(modifier, input.value);
callback_.Run(make_scoped_ptr(
new MouseEvent(input.value ? ET_MOUSE_PRESSED : ET_MOUSE_RELEASED,
cursor_->location(),
cursor_->location(),
modifiers_->GetModifierFlags() | flag,
flag)));
}
void EventConverterEvdevImpl::FlushEvents() {
if (!cursor_ || (x_offset_ == 0 && y_offset_ == 0))
return;
cursor_->MoveCursor(gfx::Vector2dF(x_offset_, y_offset_));
callback_.Run(make_scoped_ptr(
new MouseEvent(ui::ET_MOUSE_MOVED,
cursor_->location(),
cursor_->location(),
modifiers_->GetModifierFlags(),
/* changed_button_flags */ 0)));
x_offset_ = 0;
y_offset_ = 0;
}
} // namespace ui
......@@ -16,8 +16,8 @@
#include "ui/events/ozone/device/device_event.h"
#include "ui/events/ozone/device/device_manager.h"
#include "ui/events/ozone/evdev/cursor_delegate_evdev.h"
#include "ui/events/ozone/evdev/event_converter_evdev_impl.h"
#include "ui/events/ozone/evdev/event_device_info.h"
#include "ui/events/ozone/evdev/key_event_converter_evdev.h"
#include "ui/events/ozone/evdev/touch_event_converter_evdev.h"
#if defined(USE_EVDEV_GESTURES)
......@@ -94,15 +94,9 @@ scoped_ptr<EventConverterEvdev> CreateConverter(
return make_scoped_ptr<EventConverterEvdev>(new TouchEventConverterEvdev(
fd, params.path, params.id, devinfo, params.dispatch_callback));
// Everything else: use EventConverterEvdevImpl.
return make_scoped_ptr<EventConverterEvdevImpl>(
new EventConverterEvdevImpl(fd,
params.path,
params.id,
params.modifiers,
params.cursor,
params.keyboard,
params.dispatch_callback));
// Everything else: use KeyEventConverterEvdev.
return make_scoped_ptr<EventConverterEvdev>(
new KeyEventConverterEvdev(fd, params.path, params.id, params.keyboard));
}
// Open an input device. Opening may put the calling thread to sleep, and
......
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/events/ozone/evdev/key_event_converter_evdev.h"
#include <errno.h>
#include <linux/input.h>
#include "base/message_loop/message_loop.h"
#include "ui/events/event.h"
#include "ui/events/keycodes/dom4/keycode_converter.h"
#include "ui/events/keycodes/keyboard_codes.h"
#include "ui/events/ozone/evdev/event_modifiers_evdev.h"
namespace ui {
namespace {
} // namespace
KeyEventConverterEvdev::KeyEventConverterEvdev(int fd,
base::FilePath path,
int id,
KeyboardEvdev* keyboard)
: EventConverterEvdev(fd, path, id), keyboard_(keyboard) {
}
KeyEventConverterEvdev::~KeyEventConverterEvdev() {
Stop();
close(fd_);
}
void KeyEventConverterEvdev::OnFileCanReadWithoutBlocking(int fd) {
input_event inputs[4];
ssize_t read_size = read(fd, inputs, sizeof(inputs));
if (read_size < 0) {
if (errno == EINTR || errno == EAGAIN)
return;
if (errno != ENODEV)
PLOG(ERROR) << "error reading device " << path_.value();
Stop();
return;
}
DCHECK_EQ(read_size % sizeof(*inputs), 0u);
ProcessEvents(inputs, read_size / sizeof(*inputs));
}
void KeyEventConverterEvdev::ProcessEvents(const input_event* inputs,
int count) {
for (int i = 0; i < count; ++i) {
const input_event& input = inputs[i];
if (input.type == EV_KEY) {
keyboard_->OnKeyChange(input.code, input.value != 0);
} else if (input.type == EV_SYN) {
// TODO(sadrul): Handle this case appropriately.
}
}
}
} // namespace ui
......@@ -2,13 +2,12 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_EVENTS_OZONE_EVDEV_EVENT_CONVERTER_EVDEV_IMPL_H_
#define UI_EVENTS_OZONE_EVDEV_EVENT_CONVERTER_EVDEV_IMPL_H_
#ifndef UI_EVENTS_OZONE_EVDEV_KEY_EVENT_CONVERTER_EVDEV_H_
#define UI_EVENTS_OZONE_EVDEV_KEY_EVENT_CONVERTER_EVDEV_H_
#include "base/files/file_path.h"
#include "base/message_loop/message_pump_libevent.h"
#include "ui/events/event.h"
#include "ui/events/ozone/evdev/cursor_delegate_evdev.h"
#include "ui/events/ozone/evdev/event_converter_evdev.h"
#include "ui/events/ozone/evdev/event_modifiers_evdev.h"
#include "ui/events/ozone/evdev/events_ozone_evdev_export.h"
......@@ -18,59 +17,31 @@ struct input_event;
namespace ui {
class EVENTS_OZONE_EVDEV_EXPORT EventConverterEvdevImpl
class EVENTS_OZONE_EVDEV_EXPORT KeyEventConverterEvdev
: public EventConverterEvdev {
public:
EventConverterEvdevImpl(int fd,
base::FilePath path,
int id,
EventModifiersEvdev* modifiers,
CursorDelegateEvdev* cursor,
KeyboardEvdev* keyboard,
const EventDispatchCallback& callback);
virtual ~EventConverterEvdevImpl();
KeyEventConverterEvdev(int fd,
base::FilePath path,
int id,
KeyboardEvdev* keyboard);
virtual ~KeyEventConverterEvdev();
// EventConverterEvdev:
void OnFileCanReadWithoutBlocking(int fd) override;
virtual void OnFileCanReadWithoutBlocking(int fd) override;
private:
void ProcessEvents(const struct input_event* inputs, int count);
void ConvertKeyEvent(const input_event& input);
void ConvertMouseMoveEvent(const input_event& input);
void DispatchMouseButton(const input_event& input);
// Flush events delimited by EV_SYN. This is useful for handling
// non-axis-aligned movement properly.
void FlushEvents();
// Save x-axis events of relative devices to be flushed at EV_SYN time.
int x_offset_;
// Save y-axis events of relative devices to be flushed at EV_SYN time.
int y_offset_;
private:
// Controller for watching the input fd.
base::MessagePumpLibevent::FileDescriptorWatcher controller_;
// Shared cursor state.
CursorDelegateEvdev* cursor_;
// Shared keyboard state.
KeyboardEvdev* keyboard_;
// Modifier key state (shift, ctrl, etc).
EventModifiersEvdev* modifiers_;
// Callback for dispatching events.
EventDispatchCallback callback_;
DISALLOW_COPY_AND_ASSIGN(EventConverterEvdevImpl);
DISALLOW_COPY_AND_ASSIGN(KeyEventConverterEvdev);
};
} // namespace ui
} // namspace ui
#endif // UI_EVENTS_OZONE_EVDEV_EVENT_CONVERTER_EVDEV_IMPL_H_
#endif // UI_EVENTS_OZONE_EVDEV_KEY_EVENT_CONVERTER_EVDEV_H_
......@@ -11,37 +11,38 @@
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/events/event.h"
#include "ui/events/keycodes/keyboard_codes.h"
#include "ui/events/ozone/evdev/event_converter_evdev_impl.h"
#include "ui/events/ozone/evdev/key_event_converter_evdev.h"
#include "ui/events/ozone/evdev/keyboard_evdev.h"
namespace ui {
const char kTestDevicePath[] = "/dev/input/test-device";
class MockEventConverterEvdevImpl : public EventConverterEvdevImpl {
class MockKeyEventConverterEvdev : public KeyEventConverterEvdev {
public:
MockEventConverterEvdevImpl(int fd, KeyboardEvdev* keyboard)
: EventConverterEvdevImpl(fd,
base::FilePath(kTestDevicePath),
1,
keyboard) {
MockKeyEventConverterEvdev(int fd, KeyboardEvdev* keyboard)
: KeyEventConverterEvdev(fd,
base::FilePath(kTestDevicePath),
1,
keyboard) {
Start();
}
virtual ~MockEventConverterEvdevImpl() {}
virtual ~MockKeyEventConverterEvdev() {};
private:
DISALLOW_COPY_AND_ASSIGN(MockEventConverterEvdevImpl);
DISALLOW_COPY_AND_ASSIGN(MockKeyEventConverterEvdev);
};
} // namespace ui
// Test fixture.
class EventConverterEvdevImplTest : public testing::Test {
class KeyEventConverterEvdevTest : public testing::Test {
public:
EventConverterEvdevImplTest() {}
KeyEventConverterEvdevTest() {}
// Overridden from testing::Test:
void SetUp() override {
virtual void SetUp() override {
// Set up pipe to satisfy message pump (unused).
int evdev_io[2];
if (pipe(evdev_io))
......@@ -52,12 +53,12 @@ class EventConverterEvdevImplTest : public testing::Test {
modifiers_.reset(new ui::EventModifiersEvdev());
keyboard_.reset(new ui::KeyboardEvdev(
modifiers_.get(),
base::Bind(&EventConverterEvdevImplTest::DispatchEventForTest,
base::Bind(&KeyEventConverterEvdevTest::DispatchEventForTest,
base::Unretained(this))));
device_.reset(
new ui::MockEventConverterEvdevImpl(events_in_, keyboard_.get()));
new ui::MockKeyEventConverterEvdev(events_in_, keyboard_.get()));
}
void TearDown() override {
virtual void TearDown() override {
device_.reset();
keyboard_.reset();
modifiers_.reset();
......@@ -65,7 +66,7 @@ class EventConverterEvdevImplTest : public testing::Test {
close(events_out_);
}
ui::MockEventConverterEvdevImpl* device() { return device_.get(); }
ui::MockKeyEventConverterEvdev* device() { return device_.get(); }
ui::EventModifiersEvdev* modifiers() { return modifiers_.get(); }
unsigned size() { return dispatched_events_.size(); }
......@@ -85,18 +86,18 @@ class EventConverterEvdevImplTest : public testing::Test {
scoped_ptr<ui::EventModifiersEvdev> modifiers_;
scoped_ptr<ui::KeyboardEvdev> keyboard_;
scoped_ptr<ui::MockEventConverterEvdevImpl> device_;
scoped_ptr<ui::MockKeyEventConverterEvdev> device_;
ScopedVector<ui::Event> dispatched_events_;
int events_out_;
int events_in_;
DISALLOW_COPY_AND_ASSIGN(EventConverterEvdevImplTest);
DISALLOW_COPY_AND_ASSIGN(KeyEventConverterEvdevTest);
};
TEST_F(EventConverterEvdevImplTest, KeyPress) {
ui::MockEventConverterEvdevImpl* dev = device();
TEST_F(KeyEventConverterEvdevTest, KeyPress) {
ui::MockKeyEventConverterEvdev* dev = device();
struct input_event mock_kernel_queue[] = {
{{0, 0}, EV_MSC, MSC_SCAN, 0x7002a},
......@@ -124,8 +125,8 @@ TEST_F(EventConverterEvdevImplTest, KeyPress) {
EXPECT_EQ(0, event->flags());
}
TEST_F(EventConverterEvdevImplTest, KeyRepeat) {
ui::MockEventConverterEvdevImpl* dev = device();
TEST_F(KeyEventConverterEvdevTest, KeyRepeat) {
ui::MockKeyEventConverterEvdev* dev = device();
struct input_event mock_kernel_queue[] = {
{{0, 0}, EV_MSC, MSC_SCAN, 0x7002a},
......@@ -171,14 +172,14 @@ TEST_F(EventConverterEvdevImplTest, KeyRepeat) {
EXPECT_EQ(0, event->flags());
}
TEST_F(EventConverterEvdevImplTest, NoEvents) {
ui::MockEventConverterEvdevImpl* dev = device();
TEST_F(KeyEventConverterEvdevTest, NoEvents) {
ui::MockKeyEventConverterEvdev* dev = device();
dev->ProcessEvents(NULL, 0);
EXPECT_EQ(0u, size());
}
TEST_F(EventConverterEvdevImplTest, KeyWithModifier) {
ui::MockEventConverterEvdevImpl* dev = device();
TEST_F(KeyEventConverterEvdevTest, KeyWithModifier) {
ui::MockKeyEventConverterEvdev* dev = device();
struct input_event mock_kernel_queue[] = {
{{0, 0}, EV_MSC, MSC_SCAN, 0x700e1},
......@@ -224,8 +225,8 @@ TEST_F(EventConverterEvdevImplTest, KeyWithModifier) {
EXPECT_EQ(0, event->flags());
}
TEST_F(EventConverterEvdevImplTest, KeyWithDuplicateModifier) {
ui::MockEventConverterEvdevImpl* dev = device();
TEST_F(KeyEventConverterEvdevTest, KeyWithDuplicateModifier) {
ui::MockKeyEventConverterEvdev* dev = device();
struct input_event mock_kernel_queue[] = {
{{0, 0}, EV_MSC, MSC_SCAN, 0x700e1},
......@@ -289,8 +290,8 @@ TEST_F(EventConverterEvdevImplTest, KeyWithDuplicateModifier) {
EXPECT_EQ(0, event->flags());
}
TEST_F(EventConverterEvdevImplTest, KeyWithLock) {
ui::MockEventConverterEvdevImpl* dev = device();
TEST_F(KeyEventConverterEvdevTest, KeyWithLock) {
ui::MockKeyEventConverterEvdev* dev = device();
struct input_event mock_kernel_queue[] = {
{{0, 0}, EV_MSC, MSC_SCAN, 0x70039},
......@@ -354,8 +355,8 @@ TEST_F(EventConverterEvdevImplTest, KeyWithLock) {
EXPECT_EQ(0, event->flags());
}
TEST_F(EventConverterEvdevImplTest, UnmappedKeyPress) {
ui::MockEventConverterEvdevImpl* dev = device();
TEST_F(KeyEventConverterEvdevTest, UnmappedKeyPress) {
ui::MockKeyEventConverterEvdev* dev = device();
struct input_event mock_kernel_queue[] = {
{{0, 0}, EV_KEY, BTN_TOUCH, 1},
......
......@@ -66,8 +66,6 @@
'evdev/libgestures_glue/gesture_timer_provider.h',
'evdev/event_converter_evdev.cc',
'evdev/event_converter_evdev.h',
'evdev/event_converter_evdev_impl.cc',
'evdev/event_converter_evdev_impl.h',
'evdev/event_device_info.cc',
'evdev/event_device_info.h',
'evdev/event_factory_evdev.cc',
......@@ -75,6 +73,8 @@
'evdev/event_modifiers_evdev.cc',
'evdev/event_modifiers_evdev.h',
'evdev/events_ozone_evdev_export.h',
'evdev/key_event_converter_evdev.cc',
'evdev/key_event_converter_evdev.h',
'evdev/keyboard_evdev.cc',
'evdev/keyboard_evdev.h',
'evdev/touch_event_converter_evdev.cc',
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment